Excel VBA 質問スレッド №2128 (解決済)
特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : 素人 投稿日時 : 2025/06/26(Thu) 08:47:06 OS : Windows 11 EXCEL : Excel 2021
素人なりに、ネットを駆使して、VBAのコードを作成したのですが、範囲指定したセルの中で、H32セルに入力した文字に適応した図形しか表示されません。
どこが間違っているのかわかりますでしょうか。
宜しくお願いいたします。
"特定のセルに入力された特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい"
素人なりに、ネットを駆使して、VBAのコードを作成したのですが、範囲指定したセルの中で、H32セルに入力した文字に適応した図形しか表示されません。
どこが間違っているのかわかりますでしょうか。
宜しくお願いいたします。
"特定のセルに入力された特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい"
Sub 図形() Dim shp As Shape Set shp = ActiveSheet.Shapes(1) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№1" Then shp.Visible = msoTrue Else shp.Visible = msoFalse End If Dim shp2 As Shape Set shp2 = ActiveSheet.Shapes(2) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№5" Then shp2.Visible = msoTrue Else shp2.Visible = msoFalse End If Dim shp3 As Shape Set shp3 = ActiveSheet.Shapes(3) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№6" Then shp3.Visible = msoTrue Else shp3.Visible = msoFalse End If Dim shp4 As Shape Set shp4 = ActiveSheet.Shapes(4) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№4" Then shp4.Visible = msoTrue Else shp4.Visible = msoFalse End If Dim shp5 As Shape Set shp5 = ActiveSheet.Shapes(5) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№3" Then shp5.Visible = msoTrue Else shp5.Visible = msoFalse End If Dim shp6 As Shape Set shp6 = ActiveSheet.Shapes(6) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№7" Then shp6.Visible = msoTrue Else shp6.Visible = msoFalse End If Dim shp7 As Shape Set shp7 = ActiveSheet.Shapes(7) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№2" Then shp7.Visible = msoTrue Else shp7.Visible = msoFalse End If Dim shp8 As Shape Set shp8 = ActiveSheet.Shapes(8) If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№8" Then shp8.Visible = msoTrue Else shp8.Visible = msoFalse End If End Sub
スポンサーリンク
[返信 1] Re : 特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : ごんぼほり 投稿日時 : 2025/06/26(Thu) 10:18:42
まず、複数のセルの値と単独の文字列を比較しようとしているところが間違っています。
Range("H32,H51,H70,H89,H108,H127,H146,H165").Value
は
Range("H32,H51,H70,H89,H108,H127,H146,H165").Areas(1).Value
を返しますので、
Range("H32").Value となります。
If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№1" Then
は
If Range("H32").Value = "№1" Then
と同じ結果になります。
まず、複数のセルの値と単独の文字列を比較しようとしているところが間違っています。
Range("H32,H51,H70,H89,H108,H127,H146,H165").Value
は
Range("H32,H51,H70,H89,H108,H127,H146,H165").Areas(1).Value
を返しますので、
Range("H32").Value となります。
If Range("H32,H51,H70,H89,H108,H127,H146,H165").Value = "№1" Then
は
If Range("H32").Value = "№1" Then
と同じ結果になります。
[返信 2] Re : 特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : higeru 投稿日時 : 2025/06/26(Thu) 12:24:37
やりたいことを想像するに、こういうことかなと。
やりたいことを想像するに、こういうことかなと。
Sub 図形() Dim 特定のセル As Range: Set 特定のセル = Range("H32") Dim 文字列 As Variant: 文字列 = Array(1, 5, 6, 4, 3, 7, 2, 8) Dim i As Long For i = 1 To 8 If 特定のセル.Offset((i - 1) * 19).Value = "№" & 文字列(i - 1) Then ActiveSheet.Shapes(i).Visible = msoTrue Else ActiveSheet.Shapes(i).Visible = msoFalse End If Next End Sub
[返信 3] Re : 特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : 素人 投稿日時 : 2025/06/26(Thu) 17:02:10
ごんぼほりさん、ありがとうございます。H32だけ参照する形だったのですね。
higeruさん、ありがとうございます。ご教示いただいたコードを試しましたが、H32にどの№を記入しても、図形が表示されませんでした。
やりたいことは、"H32,H51,H70,H89,H108,H127,H146,H165"のいずれかのセルに、"№1,№2,№3,№4,№5,№6,№7,№8”いずれかの文字列が記入された時に、各文字に対応した図形が表示されるようにしたいのです。
例:
「H32」セルに「№2」文字列の時、「shp7」図形が表示される。「H51」セルに「№5」文字列の時、「shp2」図形が表示される。(その他の図形は非表示。)
また、文字列も、例では各№にしてますが、名前など、数字を含まない形に転用できればと考えております。
ごんぼほりさん、ありがとうございます。H32だけ参照する形だったのですね。
higeruさん、ありがとうございます。ご教示いただいたコードを試しましたが、H32にどの№を記入しても、図形が表示されませんでした。
やりたいことは、"H32,H51,H70,H89,H108,H127,H146,H165"のいずれかのセルに、"№1,№2,№3,№4,№5,№6,№7,№8”いずれかの文字列が記入された時に、各文字に対応した図形が表示されるようにしたいのです。
例:
「H32」セルに「№2」文字列の時、「shp7」図形が表示される。「H51」セルに「№5」文字列の時、「shp2」図形が表示される。(その他の図形は非表示。)
また、文字列も、例では各№にしてますが、名前など、数字を含まない形に転用できればと考えております。
[返信 4] Re : 特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : ピロリ 投稿日時 : 2025/06/26(Thu) 18:14:15
↓こういうことですか?
↓こういうことですか?
Sub Sample() Dim i As Long, j As Long Dim arr As Variant ' 図1 図2 図3 図4 図5 図6 図7 図8 arr = Array("№1", "№5", "№6", "№4", "№3", "№7", "№2", "№8") For i = 0 To UBound(arr) For j = 0 To 7 If Cells(j * 19 + 32, "H") = arr(i) Then ActiveSheet.Shapes(i + 1).Visible = msoTrue Exit For End If ActiveSheet.Shapes(i + 1).Visible = msoFalse Next j Next i End Sub
[返信 5] Re : 特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい
投稿者 : 素人 投稿日時 : 2025/06/27(Fri) 08:52:49
ピロリさん、ありがとうございます。ご教示いただいたコードで、想定していた働きをしてくれました。
皆さま、素人に分かりやすく教えいただきありがとうございました。
ピロリさん、ありがとうございます。ご教示いただいたコードで、想定していた働きをしてくれました。
皆さま、素人に分かりやすく教えいただきありがとうございました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-04 15:34:37 )