|
こんにちは。
おお〜、これこれ、と思いましたが、ちょっと違うような...。
これだと図形類が、セル範囲にすっぽり入ってないとダメですね。
ちょっとでもひっかっていたらってやつがあったと思うんですけど...。
確かりんさんはそんな風に言っていたような気がします。
試してみなかったんで、その辺はあいまいですが。
これでよかったら、こんな感じに配列にセットすれば良いです.
Sub 範囲選択()
Dim Sh As Shape, r1 As Range, r2 As Range
Dim ObjTb() As Variant, Ct As Integer
'On Error GoTo errout
If ActiveSheet.ProtectContents Then
Else
If TypeName(Selection) = "Range" Then
'Selection.Clear
If TypeName(Selection) = "Range" Then
If ActiveSheet.Shapes.Count > 0 Then
For Each Sh In ActiveSheet.Shapes
'図形が完全に範囲に含まれる場合は削除する
'図形左上セルのチェック
Set r1 = Application.Intersect(Selection, _
Sh.TopLeftCell)
'図形右下セルのチェック
Set r2 = Application.Intersect(Selection, _
Sh.BottomRightCell)
If r1 Is Nothing Or r2 Is Nothing Then
'左上セルまたは右下セルが選択範囲の外にある場合は無視
'両方外にある場合も無視
Else
Ct = Ct + 1
ReDim Preserve ObjTb(1 To Ct)
ObjTb(Ct) = Sh.Name
End If
Next
End If
End If
Else
'Selection.Delete
End If
End If
On Error Resume Next
If UBound(ObjTb) <> 0 Then
ActiveSheet.Shapes.Range(ObjTb).Select
End If
Set r1 = Nothing: Set r2 = Nothing
Erase ObjTb
Exit Sub
errout:
End Sub
|
|