- ベストアンサー
エクセルVBAで指定範囲内のオートシェープを選択
エクセル2000です。 仮にワークシートのRange("A1:B5")の範囲の中に貼り付けられたオートシェープの直線をまとめて選択する場合にはどのように書けばいいのでしょうか? Sub TEST() Application.Intersect(Range("A1:B5"), ActiveSheet.Lines).Select End Sub とやってみましたが、エラーでした。 どうぞよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 >範囲にこだわらず、Line 1~100までを同時選択はできない >ものでしょうか? Sub test2() On Error Resume Next For i = 1 To 100 Sheets("Sheet1").Shapes("Line " & i).Select (False) Next End Sub
その他の回答 (2)
- ja7awu
- ベストアンサー率62% (292/464)
線の左上端が、セルA1:B5の範囲内にあるものだけを選択状態にするには、 こんな感じで如何でしょうか。 Sub Macro1() Dim L As Line Dim N As Integer For Each L In ActiveSheet.Lines If Not Intersect(Range("A1:B5"), L.TopLeftCell) Is Nothing Then If N = 0 Then L.Select N = N + 1 Else L.Select (False) End If End If Next End Sub
お礼
ありがとうございます。 やはりIntersectでも出来るんですね。 勉強になりました。
EXCEL2002で検証したので、動作しないかもしれません。 もっと簡単にできる方法が分かりませんでしたので、長いです。 >ワークシートのRange("A1:B5")の範囲の中 完全に範囲内に収まる直線と解釈しました。 Sub test1() ' Dim mySht As Worksheet, myRng As Range, myRng2 As Range, SlRng As Range ' Set mySht = Sheets("Sheet1") Set SlRng = Range("A1:B5") For i = 1 To mySht.Shapes.Count Set myRng = mySht.Shapes(i).TopLeftCell Set myRng2 = mySht.Shapes(i).BottomRightCell If mySht.Shapes(i).Type = msoLine Then If myRng.Column >= SlRng.Columns(1).Column _ And myRng.Column <= SlRng.Columns(SlRng.Columns.Count).Column _ And myRng.Row >= SlRng.Rows(1).Row _ And myRng.Row <= SlRng.Rows(SlRng.Rows.Count).Row _ And myRng2.Column >= SlRng.Columns(1).Column _ And myRng2.Column <= SlRng.Columns(SlRng.Columns.Count).Column _ And myRng2.Row >= SlRng.Rows(1).Row _ And myRng2.Row <= SlRng.Rows(SlRng.Rows.Count).Row Then mySht.Shapes(i).Select (False) End If End If Next End Sub
お礼
さっそくありがとうございます。 できました。 これで今回はOKなのですが、かなり煩雑な式になるんですねえ。 考えたのですが、オートシェープの名前はわかっているので ActiveSheet.Shapes.Range(Array("Line 1", "Line 2", "Line 3")).Select のように、Arrayで選択もできるんです。 ただ、数が多くなって、たとえば"Line 100”までこう書くのもなんですよね。 範囲にこだわらず、Line 1~100までを同時選択はできないものでしょうか?
お礼
なんと! Select(False)でこんなことができるんですね! 目からうろこです。 ありがとうございました!