仕事で必要になりエクセルファイルを作成しようとしてますが上手く行きません。以下の動作は現実的に可能でしょうか?また図形の数を数百個まで増やす予定ですが、同じく難しいでしょうか?
どのように行えばいいか教えてください。
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が青色になる。
No.4ベストアンサー
- 回答日時:
「入力リスト」のシートモジュールに
-----------------------------------------------------------------------
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
-----------------------------------------------------------------------
※ シートモジュールのイベント内で他のシートは処理出来ないので標準モジュール内で着色処理をしています。
シートモジュールへのコードの書き方は判りますよね?
今朝再度確認を行ったところ、モジュールへのコードの貼付けは問題なかったのですが、入力リストがSheet2で作成していたのが原因のようでした。
無事正常動作確認できました。
親身に付き合っていただいてありがとうございました。
No.11
- 回答日時:
一応実際に動作させた時の状態をキャプチャしたものを貼り付けておきます。
※ 写真からExcel2003以前のようなのでExcel2003での画面ですが、Excel2013でも問題なく動作しています。
No.10
- 回答日時:
No.4で「シートモジュールへのコードの書き方は判りますよね?」と聞いているから、まさかないとは思うけど「『入力リスト』のシートモジュールに」をシートに直接書き込んだりはしていないですよね?
下図で赤く囲んだ「Sheet1(入力リスト)」となっているところをダブルクリックして開いた所に書き込むのです。
No.8
- 回答日時:
すみません。
せっかく画像を添付していただいたのですが残念ながら見えません。画面のキャプチャやトリミングとか判りますか?500×500ピクセル以上は勝手に縮小されてしまいます。それを考慮して添付していただけると助かります。
ちなみにこちらではチャント動いています。
下図はシートモジュールです。
No.7
- 回答日時:
念の為確認しておきます。
・シート名は「入力リスト」と「図」で間違いないですよね。
・「Private Sub …」から「End Sub」は、標準モジュールに入れていませんよね。
No.6
- 回答日時:
名前変更のマクロです。
-----------------------------------------------------------------------
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」にして下さい。
No.5
- 回答日時:
多分ですが手動で作ったものは、マクロでも使わなければ名前を変える必要はないのでエクセルの通常機能では変更することが出来ないのでは?(見つけられませんでした)
選択した図形の名前を変更するものを作りましょうか?次のどちらが良いですか?
①選択してマクロを実行、名前を変えたら、次を手動で選択してマクロを実行…
②内部に持っている番号順に勝手に選択するのでセル番号を入力していく
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドボタンがデザインモー...
-
エクセルでシートの並び替えで...
-
マクロを複数シートに実行する...
-
Excelマクロ(Range)につ...
-
エクセルVBAでcmbBoxのプロパテ...
-
【 Excel】シートの見出しに自...
-
VBAで条件によってシート見出し...
-
特定のシートをAuto_Openでアク...
-
マクロを特定の複数シートで実...
-
【Excel】複数あるシート上の住...
-
エクセルで複数のSheetを一括フ...
-
Office for Mac 2011のエクセル
-
エクセルのマクロでMACアドレス...
-
シートを保護した時でも並べ替...
-
エクセルファイルを開く時、常...
-
Excel 関数を使ってデータと一...
-
1ヶ月分の日付を一度に出す方法...
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
excelの不要な行の削除ができな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドボタンがデザインモー...
-
マクロを複数シートに実行する...
-
【 Excel】シートの見出しに自...
-
エクセルを開いたとき常に同じ...
-
エクセルでシートの並び替えで...
-
VBAで条件によってシート見出し...
-
マクロを特定の複数シートで実...
-
Excelのマクロの呼び出し元を知...
-
EXCELでワークシートを開いたら...
-
複数シートの保護・解除
-
エクセルで複数のSheetを一括フ...
-
エクセル2013でマクロのボタン...
-
VBA シート名を先月の名前に...
-
EXCELでマクロを使わずに図形の...
-
EXCELの起動時に常に同じ...
-
EXCELのエラー
-
メッセージボックスでシート名...
-
エクセルVBAでcmbBoxのプロパテ...
-
マクロ 各シートの決められた位...
-
エクセルで回数をカウントする...
おすすめ情報
1.セルごとに対応するオートシェイプは異なります。
2.挿入タブから図形を選択して挿入し、名前を各々つける予定です。
3.場所とはオートシェイプの場所でしょうか?オートシェイプの場所は特に決めていません。ただシートは入力シートと分ける予定です。
以下の条件で参考になるコードを教えていただきたいです。よろしくお願いします。
条件
①図形は既に挿入済みで配置済み。マクロで自動生成して図を作成する必要はありません。
②ワークシートは2つあり、「図」と「入力リスト」があります。
③入力された文字に対する色は以下です。
○=赤、×=青、△=黄
④設置済みの図形の種類は「フローチャート:照合」のみです。
⑤回答された方の意見を参考にし、図形名はセル番号と同じにしています。
変更する色の箇所ですがオートシェイプ図形の塗りつぶしの色です。
言葉足らずで申し訳ありません。
コードを指定の場所へ貼り付けは出来ましたが、前提条件として提示していた図形名をセル番号にすることができていません。例えば図形名をフローチャート:照合1→B3と変更するとB3のセルへ飛んでしまい名前は変更できていませんでした。図形名は別の名前にするべきですか?
それとも特に図形名を変更せずに可能ですか?
わざわざコードを作っていただいたのに初歩的なことを申し訳ないです。
シェイプ名を変更すれば先程作成していただいたコードで動くのであれば①が良いです!
またシェイプ名を変更する場合、入力リスト内の「○、×、△」を入力する行の対応セル番号でよろしかったですか?
写真だとD列になります。
全ての図形名を対応する状態セル(D列)と同じ名前に変更しました。また最初にいただいたコードをコピペし、「If Target.Column <> 4 Then Exit Sub」へと変更行い、D列へ入力したところ
「コンパイルエラー:
修正候補:行番号 または 行ラベル または ステートメント または ステートメント最後」
となりました。最初のコードは何かこちらで入力が必要でしたか?
何度も何度も申し訳ないです。
その通りです。
一応コードについては写真を添付します。
左がシートモジュールで右が標準モジュールです。