• ベストアンサー

エクセルVBAで指定範囲内のオートシェープを選択

エクセル2000です。 仮にワークシートのRange("A1:B5")の範囲の中に貼り付けられたオートシェープの直線をまとめて選択する場合にはどのように書けばいいのでしょうか? Sub TEST() Application.Intersect(Range("A1:B5"), ActiveSheet.Lines).Select End Sub とやってみましたが、エラーでした。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#29107
noname#29107
回答No.2

#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

AQUALINE
質問者

お礼

なんと! Select(False)でこんなことができるんですね! 目からうろこです。 ありがとうございました!

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

線の左上端が、セル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

AQUALINE
質問者

お礼

ありがとうございます。 やはりIntersectでも出来るんですね。 勉強になりました。

noname#29107
noname#29107
回答No.1

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

AQUALINE
質問者

お礼

さっそくありがとうございます。 できました。 これで今回はOKなのですが、かなり煩雑な式になるんですねえ。 考えたのですが、オートシェープの名前はわかっているので ActiveSheet.Shapes.Range(Array("Line 1", "Line 2", "Line 3")).Select のように、Arrayで選択もできるんです。 ただ、数が多くなって、たとえば"Line 100”までこう書くのもなんですよね。 範囲にこだわらず、Line 1~100までを同時選択はできないものでしょうか?

関連するQ&A