エクセル の学校
8.一覧 9.HOME
1.Top 2.Last

[[20260210074316]]

[ 初めての方へ | 一覧(最新更新順) |

|
| 全文検索 | 過去ログ | エクセルの学校HOME ]

 

『ダウンリストを追加するとエラーになる』(マクロ初心者)

どなたかご教授ください。

〇cs32,dw32の範囲に斜線を引くよう記述しています。

Sub ボタン52_Click() '(イ) から(?U)斜線

'

    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 723.75, 366.75, 887.25, _
        232.75).Select
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
End Sub

〇斜線を削除するよう記述しています。

Sub ボタン54_Click() '(イ)の原因と期間の解除

 Dim shape As shape
    Dim area As Range

    Set area = Range("cs32,dw32") '削除したいセル範囲を指定する

    For Each shape In ActiveSheet.Shapes
        If Not Intersect(shape.TopLeftCell, area) Is Nothing Then
            shape.Delete
        End If
    Next shape
End Sub

これだけなら正常に動作するのですが、この範囲内にダウンリストを追加 すると斜線削除する際エラーになります。

 If Not Intersect(shape.TopLeftCell, area) Is Nothing Then の部分に
問題があるよう表示されるのですが、何が問題でしょうか

ダウンリストを追加した状態でも正常に動作するようにしたいのですが 解決方法を教えてください。宜しくお願い致します。

< 使用 Excel:unknown、使用 OS:Windows10 >


PCが手元にないので確認だけ。 ↓って意図通りのセル範囲が格納されますか?
 Set area = Range("cs32,dw32")

(もこな2) 2026/02/10(火) 08:04:36


 入力規則のドロップダウンリストもShapeなので、

 Sub ボタン54_Click()

 Dim shape As shape
    Dim area As Range

    Set area = Range("cs32,dw32") '削除したいセル範囲を指定する

    For Each shape In ActiveSheet.Shapes
        If shape.Type <> msoFormControl Then ' フォームコントロール(入力規則も)を除く
            If Not Intersect(shape.TopLeftCell, area) Is Nothing Then
                Stop
                shape.Delete
            End If
        End If
    Next shape
 End Sub

 もこな2さん
 Sub test()
   Set area = Range("cs32,dzw32")
   Debug.Print area.Address
 End Sub
 の結果は、
 $CS$32,$DZW$32
 です
(´・ω・`) 2026/02/10(火) 08:37:59

もこな2さんへ

ありがとうございました。記述頂いたとおりに修正すると、うまく機能しました。 早急な回答ありがとうございました。大変助かりました。 (マクロ初心者) 2026/02/10(火) 08:52:47


 修正案を提示されたのは ´・ω・`さんですよ。

 ちなみにRange("cs32,dw32")は、CS32:DW32を意図したものではないですかという指摘だったと思います。
 いえ、その二つのセルですということならそれで問題ないのですが。

 [参考]
 ?Range("cs32,dw32").Address
 $CS$32,$DW$32
 ?Range("cs32:dw32").Address
 $CS$32:$DW$32
 ?Range("cs32","dw32").Address
 $CS$32:$DW$32
(xyz) 2026/02/10(火) 11:58:15

少し時間がたってしまいましたが、コメントしておきます。

お二人ともありがとうございます。 ↓は承知していたのですが、単純に1つの文字列のなかでカンマで区切るのはOKだったかな?という疑問でした

 Range("CS32:DW32") ←いつものやつ
 Range("cs32","dw32")  ←これは↓の省略形なので許容される
 Application.Range(Range("CS32"),Range("DW32"))

既に解決したようですが、横道に逸らしてしまったお詫びもかねて別案を披露します。

    Sub さんぷる1()
        Dim 開始X As Double, 開始Y As Double
        Dim 終了X As Double, 終了Y As Double

        With ActiveSheet
            With .Range("CS32:DW32")
                終了X = .Left
                開始X = .Left + .Width

                開始Y = .Top
                終了Y = .Top + .Height
            End With

            With .Shapes.AddLine(開始X, 開始Y, 終了X, 終了Y)
                .Name = "あとで消すやつ"
                .Line.ForeColor.RGB = RGB(255, 0, 0)
            End With
        End With
    End Sub
    '-----------------------------------------------------
    Sub さんぷる2()
        Dim MyShape As Shape

        For Each MyShape In ActiveSheet.Shapes
            If MyShape.Name = "あとで消すやつ" Then
                MyShape.Delete
            End If
        Next
    End Sub

なんとなくわかるかとおもいますが、一応解説すると

 (原案) 指定したエリアにのっかっているShape
 (修正) 指定したエリアにのっかっているShapeのうち「msoFormControl」を除く

となっているのに対して

 (別案) (Shapeを追加するときに判別可能な名前を付けておいて、)セル範囲関係なく名前に合致するものを消す

という発想にしています。

(もこな2) 2026/02/15(日) 20:29:11





[ 一覧(最新更新順) |

]

キーボードヒント:[Home]または[Fn+Home]キーで一番上へ戻ります

YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.