初心者のため、分かりづらいかもしれませんがすみません。
EXCELでVBで、使用範囲を取得したいです。
LastC = Range(A1:AA100).SpecialCells(xlCellTypeLastCell).Column
LastR = Range(A1:AA100).SpecialCells(xlCellTypeLastCell).Row
とやったところ、セルに直接入力している部分の最後のセルは取れたのですが、画像や
シェープやグラフなどが入ったセルも含めた使用している範囲を知りたいのですが、そ
の方法がわかりません。またRange(A1:AA100)というのもできれば、シート内全部の中
にしたいので、AA100とか調べる範囲の制限をつけたくないです。
どうしたらよろしいかご教授いただけたらと思います。
よろしくお願いします。
図形用のものはないようですね。
すべてのShapes(DrawingObjects)をループして、TopLeftCell、BottomRightCellを見て
いくんでしょうかね。
sample)
Sub test()
Dim r As Range
Set r = GetDrawingObjectUsedRange
If Not r Is Nothing Then
' セルを選択
r.Select
End If
End Sub
' 図形の使用しているRangeを取得
Private Function GetDrawingObjectUsedRange() As Range
Dim o As Object
Dim r As Range
Dim tl As Range
Dim br As Range
For Each o In ActiveSheet.DrawingObjects
' 常に図形の最左上を指定するようにする
Set r = o.TopLeftCell
If tl Is Nothing Then
Set tl = r
ElseIf tl.Row > r.Row And tl.Column > r.Column Then
Set tl = r
ElseIf tl.Row > r.Row Then
Set tl = tl.Offset(r.Row - tl.Row)
ElseIf tl.Column > r.Column Then
Set tl = tl.Offset(, r.Column - tl.Column)
End If
' 常に図形の最右下を指定するようにする
Set r = o.BottomRightCell
If br Is Nothing Then
Set br = r
ElseIf br.Row < r.Row And br.Column < r.Column Then
Set br = r
ElseIf br.Row < r.Row Then
Set br = br.Offset(r.Row - br.Row)
ElseIf br.Column < r.Column Then
Set br = br.Offset(, r.Column - br.Column)
End If
Next
If Not tl Is Nothing And Not br Is Nothing Then
Set GetDrawingObjectUsedRange = ActiveSheet.Range(tl, br)
End If
End Function
大変ありがとうございました!!おかげで解決できました。
質問には書きませんでしたが、最右下がObjectか値が入力されているセルになるかわか
らないのと先頭(最左上)位置はいつも、A1セルにしたかったので、「' 常に図形の最
左上を指定するようにする」の部分を省略し、For文の前に下の二行を入れました。
Set tl = Range(A1) '最左上を指定
Set br = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell) '使用範囲(除く
図形)の右下セット
これによって、最左上を常にA1、そして、最右下がObjectでなくても選択できるように
なりました。