Excel VBA 質問スレッド №2128 (解決済)

特定のセルに入力された文字に適応した図形を特定の位置で表示・非表示したい

投稿者 : 素人     投稿日時 : 2025/06/26(Thu) 08:47:06     OS : Windows 11     EXCEL : Excel 2021
素人なりに、ネットを駆使して、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
と同じ結果になります。

[返信 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」図形が表示される。(その他の図形は非表示。)

また、文字列も、例では各№にしてますが、名前など、数字を含まない形に転用できればと考えております。

[返信 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 )
タイトルとURLをコピーしました