ID非公開さん
2022/1/17 16:00
2回答
Excel VBAについてです。 Visibleを利用して複数の図形を表示/非表示にしたいと思っています。 Aを選択したらAを含むものを非表示にするといったコードを作りました。
Excel VBAについてです。 Visibleを利用して複数の図形を表示/非表示にしたいと思っています。 Aを選択したらAを含むものを非表示にするといったコードを作りました。 実際、このコードで動いたのですが、1つにつき8行でそれが全部で7つあるので長いと言われました。 同じ結果になるものをWithでまとめてはどうかと言われましたが、検索してもうまく見つからずまとめ方が分からない状態です。 (作成したコード) If 卵.Value = True Then ハンバーグ.Visible = False マカロニサラダ.Visible = False ポトフ.Visible = True 豚キムチ焼きうどん.Visible = True 餃子.Visible = True キャベツと卵のスープ.Visible = False あんかけチャーハン.Visible = False ここでは卵が含まれるものは非表示になるようになっています。 このコードを短くすることは可能でしょうか? もしあるようでしたら、ご回答お願いします。
Visual Basic | Excel・117閲覧
ベストアンサー
図形がどういうもので、どういう選択肢があるのかわからんので一例として Dim 料理 As Object Dim 図形 As Shape Dim 原材料 As String '図形の名前と原材料をDictionaryオブジェクトにセット Set 料理 = CreateObject("Scripting.Dictionary") 料理.Add ハンバーグ.Name, "卵, 牛乳, 挽肉, 玉ねぎ, ・・・" 料理.Add マカロニサラダ.Name, "小麦粉, マヨネーズ, 牛乳, きゅうり, ・・・" ・ ・ 料理.Add あんかけチャーハン.Name, "米, 卵, 片栗粉, ・・・" '含むかどうかを判定する原材料を選択 Select Case True Case 卵.Value 原材料 = "卵" Case 牛乳.Value 原材料 = "牛乳" ・ ・ End Select '原材料を含むかどうか判定し表示を切り替える For Each 図形 In ActiveSheet.Shapes With 図形 If 料理.Exists(.Name) then If InStr(料理(.Name), 原材料) <> 0 Then .Visible = False Else .Visible = True End If End If End With Next
ID非公開さん
質問者2022/1/19 22:13
ご回答ありがとうございます。 提示していただいたコードで解決できたのですが、ところどころ分からないところがあるので教えていただきたいです。 ・Set 料理 = CreateObject(\u0022Scripting.Dictionary\u0022) ・For Each 図形 In ActiveSheet.Shapes ・If 料理.Exists(.Name) Then お手数をおかけしますが、よろしくお願いいたします。
質問者からのお礼コメント
ありがとうございます。 回答者様のおかげでできました。 今回は最初に回答していただいた方のをベストアンサーとさせていただきます。
お礼日時:1/25 9:43