| エクセル | の学校 |
| 8.一覧 | 9.HOME |
| 1.Top | 2.Last |
『ダウンリストを追加するとエラーになる』(マクロ初心者)
どなたかご教授ください。
〇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 >
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
ありがとうございました。記述頂いたとおりに修正すると、うまく機能しました。 早急な回答ありがとうございました。大変助かりました。 (マクロ初心者) 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
]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.