Excel VBA 質問スレッド №2072 (未解決)

エクセルの

投稿者 : しんしゃ     投稿日時 : 2025/01/23(Thu) 11:57:05     OS : Windows 11     EXCEL : Excel 2021
初歩的な質問で申し訳ございません。
VBAを使ってエクセル上の4色の線矢印に対して、各色ごとに表示非表示を切り替えるボタンを設置しようとしています。

以下のコードを打ち込みました。

Sub ToggleArrowsBlue()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoLine Then
            If shp.Line.ForeColor.RGB = RGB(91, 155, 213) Then
                shp.Visible = Not shp.Visible
            End If
        End If
    Next shp
End Sub

Sub ToggleArrowsOrange()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoLine Then
            If shp.Line.ForeColor.RGB = RGB(237, 125, 49) Then
                shp.Visible = Not shp.Visible
            End If
        End If
    Next shp
End Sub

Sub ToggleArrowsGreen()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoLine Then
            If shp.Line.ForeColor.RGB = RGB(112, 173, 71) Then
                shp.Visible = Not shp.Visible
            End If
        End If
    Next shp
End Sub

Sub ToggleArrowsRed()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoLine Then
            If shp.Line.ForeColor.RGB = RGB(255, 0, 0) Then
                shp.Visible = Not shp.Visible
            End If
        End If
    Next shp
End Sub

その後、「開発」→「挿入」→「ボタン」でボタンを設置し
それぞれのボタンに対応するサブルーチンを(ToggleArrowsBlue、ToggleArrowsOrange、ToggleArrowsGreen、ToggleArrowsRed)の4種選定して4つのボタンを作りました。

ただし、このボタンを押してもシート内の線矢印の表示非表示は切り替わりません。
何か基本的な見落としをしているのか、コードが誤っているのかヒント頂けると助かります。

スポンサーリンク
[返信 1] Re : エクセルの
投稿者 : さんこう     投稿日時 : 2025/01/23(Thu) 13:04:45
「線矢印」は、「shp.Type = msoLine」ではないみたいです。

参考になれば。

<vba 図形 種類 判定>
https://www.google.com/search?q=vba+%E5%9B%B3%E5%BD%A2+%E7%A8%AE%E9%A1%9E+%E5%88%A4%E5%AE%9A

[返信 2] Re : エクセルの
投稿者 : しんしゃ     投稿日時 : 2025/01/23(Thu) 13:37:18
■[返信 1] さんこうさん(2025-01-23 13:04:45)の記事
> 「線矢印」は、「shp.Type = msoLine」ではないみたいです。

> 参考になれば。

> <vba 図形 種類 判定>
> https://www.google.com/search?q=vba+%E5%9B%B3%E5%BD%A2+%E7%A8%AE%E9%A1%9E+%E5%88%A4%E5%AE%9A


さんこう様、ご返信ありがとうございます。
線矢印についてですが、線の始点や終点の矢印の種類を「矢印」にしているので
msoLineが当てはまると思ったのですが、違うのでしょうか。

[返信 3] Re : エクセルの
投稿者 : さんこう     投稿日時 : 2025/01/23(Thu) 13:43:42
>msoLineが当てはまると思ったのですが、違うのでしょうか。

違うと申し上げたつもりですが、伝わりませんでしたか?


実際に確認してみるといいでしょう。

Sub Test()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        MsgBox IIf(shp.Type = msoLine, "msoLineです", "msoLineではありません")
    Next shp
End Sub

[返信 4] Re : エクセルの
投稿者 : ピロリ     投稿日時 : 2025/01/24(Fri) 08:01:03
■[質問] しんしゃさん(2025-01-23 11:57:05)の記事
> ただし、このボタンを押してもシート内の線矢印の表示非表示は切り替わりません。
表示/非表示の切替えが動作しないのは、下のどちらかですよね。
①さんこうさんの仰る通り、図形が直線コネクタではない場合(直線矢印コネクタとか・・・)
②実際の色が意図した色ではない場合(RGB値が若干異なっているとか・・・)

私もテストコードを掲示します。上手くいかない図形を選択(Select)して 実行してみて下さい。
もし赤い直線コネクタならば、下のようなメッセージを表示するはずです。
(1)Name:Straight Connector xx ← 図形の名称を変更しているのなら、これは無視して下さい。
(2)Type:9           ← これが msoLine の値(9)です。
(3)Color:RGB(255,0,0)     ← 赤色

Sub Test2()
    Dim Nm As String
    Dim C As Long, R As Long, G As Long, B As Long
    On Error Resume Next
    Nm = Selection.Name
    If Err.Number = 0 Then
        C = Shapes(Nm).Line.ForeColor.RGB
        R = C Mod &H100
        G = Int(C / &H100) Mod &H100
        B = Int(C / &H10000)
        MsgBox "選択中の図形の情報" & vbCrLf & _
               "(1)Name:" & Shapes(Nm).Name & vbCrLf & _
               "(2)Type:" & Shapes(Nm).Type & vbCrLf & _
               "(3)Color:RGB(" & R & "." & G & "." & B & ")"
    End If
End Sub

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-02-07 23:16:40 )
タイトルとURLをコピーしました