セルの値をワードアートに反映させる方法とは?

このQ&Aのポイント
  • A1の値をワードアートに反映させるためのコードを紹介します。
  • 複数のワードアートにA1の値を反映させる場合は、コードの一部を修正する必要があります。
  • ワードアートオブジェクトの名前を一致させるだけでは、最初の1個しか反映されません。
回答を見る
  • ベストアンサー

セルの値をワードアートに

セルの値をワードアートに A1に入力した値をワードアートに反映させていますが、 A1の値を複数のワードアートに反映させる場合は下記のコードの 3行目を数分だけ入れないとダメでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Address <> "$A$1" Then Exit Sub  ActiveSheet.Shapes("WordArt 1").TextEffect.Text = Target.Value End Sub コピーしてワードアートオブジェクトの名前を一緒にしても 最初の1個しか反映されませんでした。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

同じ文字をすべてのワードアートのテキストに入力するなら以下のようなコードになります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer For i = 1 To ActiveSheet.Shapes.Count If Target.Address <> "$A$1" Then Exit Sub ActiveSheet.Shapes(i).TextEffect.Text = Target.Value Next i End Sub

axizaft2000
質問者

お礼

回答ありがとうございます。 ワードアートのテキストは複数あり、 A1のセルの値はワードアート1~3、 A2のセルはワードアート4~8に反映さる感じです。 同じ文字を全てのテキストにする場合もありますので 大変参考になりました ありがとうございます。

その他の回答 (4)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

>ワードアートのテキストは複数あり、 A1のセルの値はワードアート1~3、 A2のセルはワードアート4~8に反映さる感じです。 ワードアートに反映させる個数に全く規則性のない場合は、当然のことですが、それぞれのケースに対応するコードを記載するしかありません(そもそもイベントマクロを実行する必要性(目的)がわかりませんが、 For i = 1 To 3のように、それぞれのインデックス番号の数字でわけるとわかりよいかもしれません)。 ちなみに規則性がある場合、例えばA1セルから下のセルを3つずつ順次参照するなら、以下のようなコードに変更すれば実行可能です。 ActiveSheet.Shapes(i).TextEffect.Text = Range("a1").Offset(Int((i - 1) / 3), 0).Value

axizaft2000
質問者

お礼

回答ありがとうございます。 反映させる個数などの規則性はあったりなかったりで微妙な所です。 イベントマクロを実行する必要性(目的)はといいますと、 エクセル2000の場合でワードアートにセル値を飛ばすのを 調べたらその方法しか発見出来ませんでしたので・・・ いろいろ難しそうですね。 まだまだVBAは分からない事だらけなので、 皆さんの意見を参考に勉強しなおしてみます。 有難うございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#2,#3です。 すみません。#3でFor Eachで無いと出来ないような書き方をしましたが Sub test02() Worksheets("Sheet1").Shapes.Range(Array("WordArt 1", "WordArt 2", "WordArt 3")).Select Selection.ShapeRange.TextEffect.Text = "長野市" End Sub で、 Selection.ShapeRange.TextEffect.Text = "長野市" の1行で出きるようです。ShapeRangeが抜けていました。訂正します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。 >ワードアート自体が複数あり、A1のセルに反映してる物が2個、 セルA2に反映している物が3個という具合にしたいと思 If Target.Address <> "$A$1" Then  ActiveSheet.Shapes("WordArt 1").TextEffect.Text = Target.Value ActiveSheet.Shapes("WordArt 2").TextEffect.Text = Target.Value Exit Sub Else If Target.Address <> "$A$2" Then  ActiveSheet.Shapes("WordArt 3").TextEffect.Text = Target.Value ActiveSheet.Shapes("WordArt 4").TextEffect.Text = Target.Value ActiveSheet.Shapes("WordArt 5").TextEffect.Text = Target.Value Exit Sub end If のような面倒なコードになると思う。 自分で作業をやっているなら、こういうのは手動でセットしたほうが速いのではないかな。 ーー ただし、下記のような書き方は出来るようだ Sub test01() Worksheets("Sheet1").Shapes.Range(Array("WordArt 1", "WordArt 2", "WordArt 3")).Select 'Selection.TextEffect.Text = "三鷹市" 'この書き方はエラー For Each sh In Selection MsgBox sh.Name Selection.ShapeRange.TextEffect.Text = Worksheets("Sheet1").Range("A5").Value Next End Sub Arrayの書き方、.ShapeRangeに注意。

axizaft2000
質問者

お礼

回答ありがとうございます。 >のような面倒なコードになると思う。 >自分で作業をやっているなら、こういうのは手動でセットしたほうが速いのではないかな シートの広い範囲に配置されているワードアートはおよそ70個で、 それを毎回文字なり数字なりを微妙に変えないといけないため、 手動セットは時間がかかるのでコードでと思っています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$D$4" Then ActiveSheet.Shapes("start_k1").TextEffect.Text = Target.Value Exit Sub Else If Target.Address <> "$D$5" Then ActiveSheet.Shapes("dc_np1").TextEffect.Text = Target.Value Exit Sub End If End Sub 回答を参考に上記で試してみましたがエラーでした。 2000だと難しいのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

図形の調整の隣の矢印キーで、2つのワードアート図形を捉えても、数式バー部にクリックを入れることが出来ーー ワードアート図形をコピーしてはどうですか。 図形1つづつ個別に入れた後では変更されるかも。 ーー VBAのコード上は、ワードアート以外の図形がない場合なら Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub For Each sp In Worksheets("Sheet1").Shapes sp.TextEffect.Text = Target.Value Next End Sub で一斉に変えられるが、こういうのはどうですか。 Shapes以外にオブジェクトがある場合は、Typeを判別するIf文を入れてワードアートに適用を限定するとか。

axizaft2000
質問者

お礼

回答ありがとうございます ワードアート以外の図形はないのですが、 ワードアート自体が複数あり、A1のセルに反映してる物が2個、 セルA2に反映している物が3個という具合にしたいと思っています。 その場合でもIF文を入れてという感じになるのでしょうか?

関連するQ&A

  • ワードアートとセルのリンク

    ワードアートとセルのリンク 以下のようになります。 ワードアートオブジェクトの名前は適宜変更してください。この例では"WordArt 1"としています。 ワードアートオブジェクトの名前は名前ボックスで変更するか、複数ある場合はインデックス値でも指定することもできます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then ActiveSheet.Shapes("WordArt 1").TextEffect.Text = Range("A1").Value End If End Sub EXCEL 2000 にて動作確認 という投稿で可能である事は分かったのですが、 シートが違うセルからのリンクは出来るのでしょうか? EXCEL2000です

  • セルの値をファイル名にするには

    現在下記のマクロを入力しています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この時 ファイル名を SHEET1のA1 セルの値を利用してファイル名にするために下記の内容を入れてブックを保存したいと考えています。 上記のマクロが入っていないときは上手く行くのですが下記を追加するにはどうすればいいかご指導いただけませんでしょうか。 宜しく御願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub

  • 複数のセルのなかに該当があればオートシェイプを表示

    Excelで以下の図のような入力フォームを作成しています。 セルA1に1と入力したら1を◎で囲み、 セルB1からD1に2 4 5と入力したら2 4 5を○で囲みたいです。 それぞれの番号を囲むように、ふたつのオートシェイプを作成し、 それぞれに名前をつけました。 ◎をつける方法は以下のようにVBAを作成しうまくいったのですが、 ○をつける方法がわかりません。 ひとつでなく複数のセルを参照して、そのなかに該当があれば○をつける、 というやり方を教えていただけないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "1" Then On Error GoTo SHAPEMAKE ActiveSheet.Shapes("1を囲む内側の○").Visible = True ActiveSheet.Shapes("1を囲む外側の○").Visible = True Else ActiveSheet.Shapes("1を囲む内側の○").Visible = False ActiveSheet.Shapes("1を囲む外側の○").Visible = False End If Exit Sub SHAPEMAKE: ・・・・・・ End With End Sub

  • セルの値をワークシート名にする(エクセル2013)

    インストラクターのネタ帳さんより http://www.relief.jp/itnote/archives/003382.php 下記「セルの値をワークシート名にする?Worksheet_Change」 を拝借し利用させていただこうと思いましたが ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "H1" Then ActiveSheet.Name = Range("H1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のH1セルの値はシート名にできません。" End Sub ---------------------- はそのまま出来るのですが、 H1セルにデータの入力規則:リストを指定しますと エラーとなりシート名が変わりません sheet1のリストA1:A50をsheet2のH1セルにリスト表示させ その表示名をそのままシート名に出来ませんでしょうか? ---------------------- Sub copy Range("H1").Copy Range("P1") End Sub ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "P1" Then ActiveSheet.Name = Range("P1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のP41セルの値はシート名にできません。" End Sub ---------------------- としてH1のセルをP1にコピーしたものを指定して試しましたがやはりエラーとなり うまくいきませんでした。 全くの素人で恐縮ですがよろしくお願いいたします

  • Excelでセルの値を変化させた時にマクロを実行するには?

    "A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then      cells(1,2)=5      ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • E3:N3セルに値を入力後、エンターキーを押すことで、マクロを実行して

    E3:N3セルに値を入力後、エンターキーを押すことで、マクロを実行しております。 しかし、セルが空白のままエンターキーを押してしまうと、エラーとなってしまいます。 (フィルタオプションの設定で値を抽出するマクロのため、空白だとエラーになってしまいます。) できれば、セルが空白のとき、エンターキーを押しても、マクロを実行しないようにしたいです。 言葉足らずで恐縮ですが、何卒よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub Else Application.OnKey Key:="{ENTER}", Procedure:="Macro7" End If On Error Resume Next ActiveSheet.ShowAllData End Sub

  • セルの値を変更した時に日付けが入るマクロ

    エクセル2010を使っている者です。 19行以内、19列以内の範囲において変更があった場合は、変更のあった行の 20列目に日付けが入るようしたくて、以下のVBAを書いたつもりなんですが、 うまく動きません。 セルの値を変えたり、セルをダブルクリックして編集可能な状態にすると、 日付けは入るのですが、そのセルより右の19列目までのセルが全て 「41602」といった数字に変わってしまいます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = Target.Row > 19 Then Exit Sub If Target.Column > 19 Then Exit Sub Target.Offset(0, 1).Value = Date End Sub なお、上記のVBAは以下のサイトを見て作ったものです。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html どなたか、どこがおかしいのかお教えください。

  • 図形の移動をセンチの数値でマクロを実行したい

    エクセル初心者です。 以下のマクロを教えて頂きました。 セルに入力する数値は他の計算式から数値を割り出しています。 このマクロをセンチで入力して、実行する事は可能でしょうか。 その方法がありましたら、教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) With ActiveSheet.Shapes.Range(Array("Group 1")) .Top = 100 .Left = 100 .Height = ActiveSheet.Range("A2").Value .Width = ActiveSheet.Range("A3").Value End With End Sub よろしくお願いします。

専門家に質問してみよう