エクセルのワークシートにボタンを設置しています。
usedRange()関数を呼び出すと、ボタンの部分を含む範囲が返されます。
データを含む実際の使用範囲を取得する方法はありますか?
どのようなボタンかというと、フォームコントロールもActiveXコントロールも使用範囲には影響しないはずです。
Excelが使用範囲をうまく追跡できないことはよく知られた問題です。 VBAで使用範囲を参照すると、現在の使用範囲に値がリセットされます。 そこで、このサブプロシージャを実行してみてください。
Sub ResetUsedRng()
Application.ActiveSheet.UsedRange
End Sub
うまくいかない場合は、フォーマットが残っている可能性があります。 最後の行以降のセルをすべてクリア/削除してみてください。
上記については、以下も参照してください。
Excel開発者のヒントを参照してください。
最後に使用されたセルを検索する別の方法:。
Dim rLastCell As Range
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
最初に使われたセルを探すために、検索方向を変更します。
Readifyは非常に完璧な回答をしてくれました。しかし、私はEnd
文を追加したかったのですが、これは使うことができます。
列の空白の前にある、最後に使用されたセルを検索します。
Sub LastCellBeforeBlankInColumn()
Range("A1").End(xldown).Select
End Sub
列の最後に使われたセルを検索します。
Sub LastCellInColumn()
Range("A" & Rows.Count).End(xlup).Select
End Sub
行の空白の前の最後のセルを検索します。
Sub LastCellBeforeBlankInRow()
Range("A1").End(xlToRight).Select
End Sub
行の最後に使用されているセルを検索します。
Sub LastCellInRow()
Range("IV1").End(xlToLeft).Select
End Sub
詳しくはこちらをご覧ください(xlCellTypeLastCell
があまり信頼できない理由も説明しています)。
Public Sub FindTrueUsedRange(RowLast As Long, ColLast As Long)
Application.EnableEvents = False
Application.ScreenUpdating = False
RowLast = 0
ColLast = 0
ActiveSheet.UsedRange.Select
Cells(1, 1).Activate
Selection.End(xlDown).Select
Selection.End(xlDown).Select
On Error GoTo -1: On Error GoTo Quit
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Activate
On Error GoTo -1: On Error GoTo 0
RowLast = Selection.Row
Cells(1, 1).Activate
Selection.End(xlToRight).Select
Selection.End(xlToRight).Select
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Activate
ColLast = Selection.Column
Quit:
Application.ScreenUpdating = True
Application.EnableEvents = True
On Error GoTo -1: On Error GoTo 0
End Sub