10秒目をつむったら…

仕事で必要になりエクセルファイルを作成しようとしてますが上手く行きません。以下の動作は現実的に可能でしょうか?また図形の数を数百個まで増やす予定ですが、同じく難しいでしょうか?
どのように行えばいいか教えてください。

1.ワークシート1のB列に状態を入力。
例 A B C D E
1 名前a ○
2 名前b ×
3 名前c △
4 名前d ×

2.入力に応じてワークシート2の対応するオートシェイプの色が変わる。
例①B1へ○と入力するとオートシェイプaが赤色になる。
②B2へ×と入力するとオートシェイプbが青色になる。
③B3へ△と入力するとオートシェイプcが黄色になる。
④B4へ×と入力するとオートシェイプdが青色になる。

質問者からの補足コメント

  • 1.セルごとに対応するオートシェイプは異なります。
    2.挿入タブから図形を選択して挿入し、名前を各々つける予定です。
    3.場所とはオートシェイプの場所でしょうか?オートシェイプの場所は特に決めていません。ただシートは入力シートと分ける予定です。

      補足日時:2017/02/19 11:21
  • 以下の条件で参考になるコードを教えていただきたいです。よろしくお願いします。


    条件
    ①図形は既に挿入済みで配置済み。マクロで自動生成して図を作成する必要はありません。
    ②ワークシートは2つあり、「図」と「入力リスト」があります。
    ③入力された文字に対する色は以下です。
    ○=赤、×=青、△=黄
    ④設置済みの図形の種類は「フローチャート:照合」のみです。
    ⑤回答された方の意見を参考にし、図形名はセル番号と同じにしています。

      補足日時:2017/02/19 14:10
  • 変更する色の箇所ですがオートシェイプ図形の塗りつぶしの色です。
    言葉足らずで申し訳ありません。

      補足日時:2017/02/19 14:55
  • コードを指定の場所へ貼り付けは出来ましたが、前提条件として提示していた図形名をセル番号にすることができていません。例えば図形名をフローチャート:照合1→B3と変更するとB3のセルへ飛んでしまい名前は変更できていませんでした。図形名は別の名前にするべきですか?
    それとも特に図形名を変更せずに可能ですか?
    わざわざコードを作っていただいたのに初歩的なことを申し訳ないです。

      補足日時:2017/02/19 16:57
  • シェイプ名を変更すれば先程作成していただいたコードで動くのであれば①が良いです!

    またシェイプ名を変更する場合、入力リスト内の「○、×、△」を入力する行の対応セル番号でよろしかったですか?

    写真だとD列になります。

    「エクセル 図形の色変更マクロ(入力シート」の補足画像5
      補足日時:2017/02/19 17:42
  • 全ての図形名を対応する状態セル(D列)と同じ名前に変更しました。また最初にいただいたコードをコピペし、「If Target.Column <> 4 Then Exit Sub」へと変更行い、D列へ入力したところ
    「コンパイルエラー:
    修正候補:行番号 または 行ラベル または ステートメント または ステートメント最後」
    となりました。最初のコードは何かこちらで入力が必要でしたか?

    何度も何度も申し訳ないです。

      補足日時:2017/02/19 19:34
  • その通りです。
    一応コードについては写真を添付します。
    左がシートモジュールで右が標準モジュールです。

    「エクセル 図形の色変更マクロ(入力シート」の補足画像7
      補足日時:2017/02/19 20:35

A 回答 (12件中1~10件)

「入力リスト」のシートモジュールに


-----------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim シェイプ名 As String
Dim 色 As Variant
If Target.Column <> 2 Then Exit Sub
Select Case Target.Value
Case "○"
色 = RGB(255, 0, 0)
Case "×"
色 = RGB(0, 0, 255)
Case "△"
色 = RGB(255, 255, 0)
Case Else
色 = RGB(255, 255, 255)
End Select
シェイプ名 = Target.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Call オートシェイプ着色(シェイプ名, 色)
End Sub
-----------------------------------------------------------------------
標準モジュールに
-----------------------------------------------------------------------
Sub オートシェイプ着色(シェイプ名 As String, 色 As Variant)
Dim シェイプ番号 As Long
Dim シェイプ有 As Boolean
For シェイプ番号 = 1 To Sheets("図").Shapes.Count
If Sheets("図").Shapes(シェイプ番号).Name = シェイプ名 Then
シェイプ有 = True
Exit For
End If
Next
If シェイプ有 = False Then Exit Sub
Sheets("図").Shapes(シェイプ名).Fill.ForeColor.RGB = 色
End Sub
-----------------------------------------------------------------------
※ シートモジュールのイベント内で他のシートは処理出来ないので標準モジュール内で着色処理をしています。

シートモジュールへのコードの書き方は判りますよね?
    • good
    • 1
この回答へのお礼

天才やな

今朝再度確認を行ったところ、モジュールへのコードの貼付けは問題なかったのですが、入力リストがSheet2で作成していたのが原因のようでした。
無事正常動作確認できました。
親身に付き合っていただいてありがとうございました。

お礼日時:2017/02/20 10:31

No.10 図を添付し忘れました。

申し訳ございません。
「エクセル 図形の色変更マクロ(入力シート」の回答画像12
    • good
    • 0

一応実際に動作させた時の状態をキャプチャしたものを貼り付けておきます。


※ 写真からExcel2003以前のようなのでExcel2003での画面ですが、Excel2013でも問題なく動作しています。
「エクセル 図形の色変更マクロ(入力シート」の回答画像11
    • good
    • 0

No.4で「シートモジュールへのコードの書き方は判りますよね?」と聞いているから、まさかないとは思うけど「『入力リスト』のシートモジュールに」をシートに直接書き込んだりはしていないですよね?


下図で赤く囲んだ「Sheet1(入力リスト)」となっているところをダブルクリックして開いた所に書き込むのです。
    • good
    • 0

こちらが標準モジュールの方です。

「エクセル 図形の色変更マクロ(入力シート」の回答画像9
    • good
    • 0

すみません。

せっかく画像を添付していただいたのですが残念ながら見えません。画面のキャプチャやトリミングとか判りますか?
500×500ピクセル以上は勝手に縮小されてしまいます。それを考慮して添付していただけると助かります。

ちなみにこちらではチャント動いています。
下図はシートモジュールです。
「エクセル 図形の色変更マクロ(入力シート」の回答画像8
    • good
    • 0

念の為確認しておきます。


・シート名は「入力リスト」と「図」で間違いないですよね。
・「Private Sub …」から「End Sub」は、標準モジュールに入れていませんよね。
    • good
    • 0

名前変更のマクロです。


-----------------------------------------------------------------------
Sub オートシェイプ名前変更()
Dim 変更前 As String
Dim 変更後 As Variant
変更前 = Selection.ShapeRange.Name
変更後 = InputBox("変更前は「" & 変更前 & "」でした。")
If 変更後 = "" Then Exit Sub
変更後 = StrConv(変更後, vbNarrow + vbUpperCase)
Selection.ShapeRange.Name = 変更後
End Sub
-----------------------------------------------------------------------
※ D3セルなら「D3」と入力して下さい。(小文字で入力しても大文字に修正します、全角文字も半角に修正します)

なおD列で判断するならば「If Target.Column <> 2 Then Exit Sub」は「If Target.Column <> 4 Then Exit Sub」にして下さい。
    • good
    • 0

多分ですが手動で作ったものは、マクロでも使わなければ名前を変える必要はないのでエクセルの通常機能では変更することが出来ないのでは?(見つけられませんでした)


選択した図形の名前を変更するものを作りましょうか?次のどちらが良いですか?
①選択してマクロを実行、名前を変えたら、次を手動で選択してマクロを実行…
②内部に持っている番号順に勝手に選択するのでセル番号を入力していく
    • good
    • 0

色ですが塗りつぶしの色ですか?それとも線の色でしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!