[解決済み] VBAでExcelの最後に使用されたセルを検索する際のエラー
質問
最後に使用されたセルの値を見つけたいとき、私は使用します。
Dim LastRow As Long
LastRow = Range("E4:E48").End(xlDown).Row
Debug.Print LastRow
セルに1つの要素を入れると、間違った出力がされるのですが。しかし、セルに複数の値を入れると、出力は正しくなります。 この理由は何でしょうか?
解決方法を教えてください。
注意事項
: 私は、この記事を「ワンストップ・ポスト」にするつもりです。
Correct
最後の行を見つける方法です。また、最終行を見つける際に従うべきベストプラクティスもカバーする予定です。また、新しいシナリオや情報に出会うたびに、このページを更新していく予定です。
最後の行を見つけるための信頼性の低い方法
最終行を見つけるための最も一般的な方法のいくつかは、非常に信頼性が低く、したがって、決して使用しないでください。
- 使用範囲
- xlDown
- カウントA
UsedRange
べきである
NEVER
は、データを持つ最後のセルを見つけるために使用されます。非常に信頼性が低いです。この実験を試してみてください。
セルに何かを入力する
A5
. これで、最後の行を以下に示すいずれかの方法で計算すると、5が得られます。 ここで、セルに色を付けます。
A10
を赤色で表示します。ここで、以下のコードのいずれかを使用しても、5が得られます。もし
Usedrange.Rows.Count
はどうなるのでしょうか?それは5ではありません。
以下は、その方法を示すシナリオです。
UsedRange
が動作します。
xlDown
も同様に信頼性に欠ける。
次のコードを考えてみましょう。
lastrow = Range("A1").End(xlDown).Row
もし、セルが1つしかなかったらどうなるか(
A1
) にデータがあるか?ワークシートの最後の行に到達することになります。これは、セル
A1
を押し、その後
終了
キーを押しながら
下矢印
キーを押します。また、範囲内に空白のセルがある場合、信頼性の低い結果が得られます。
CountA
も、間に空白のセルがあると間違った結果を出してしまうので、信頼性がありません。
そのため
UsedRange
,
xlDown
と
CountA
で最後のセルを探します。
列の最終行を検索する
E列の最後の行を見つけるには、次のようにします。
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
もし、私たちが
.
前に
Rows.Count
. それを無視することを選択することが多かった。参照
THIS
の質問で、出るかもしれないエラーについて。私はいつも
.
前に
Rows.Count
と
Columns.Count
. この質問は、コードが失敗する典型的なシナリオです。
Rows.Count
が返す
65536
は、Excel 2003 以前のバージョンと
1048576
は、Excel 2007 以降のバージョンです。同様に
Columns.Count
を返します。
256
と
16384
それぞれ
以上のことから、Excel2007+には
1048576
行の値を保持する変数を常に
Long
ではなく
Integer
という文字列が表示されます。
Overflow
のエラーが発生します。
この方法では、隠された行はすべてスキップされることに注意してください。を振り返ってみると
上のスクリーンショットにあるA列の
もし、8行目が隠されていた場合、この方法は
5
ではなく
8
.
シートの最終行を検索する
を見つけるには
Effective
シートの最後の行は、これを使用します。の使い方に注目してください。
Application.WorksheetFunction.CountA(.Cells)
. これは、もしワークシートにデータのあるセルがない場合は
.Find
を実行すると
Run Time Error 91: Object Variable or With block variable not set
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
テーブル(ListObject)の最終行を検索する
例えば、テーブルの3列目の最後の行を取得する場合も、同じ原理が適用されます。
Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")
With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
End Sub
関連
-
[解決済み] Excel/VB関数でエラーになる。"定数式が必要です"
-
[解決済み] 複数のリファレンス値を調べた結果の合計
-
[解決済み] VBAでRangeクラスのSelectメソッドに失敗する
-
[解決済み] ExcelでDateTimeを表現する方法
-
[解決済み] VLOOKUP 最初の結果の下の行に値があるにもかかわらず、0を返す
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】Excelで特定のテキスト値を自動的に日付に変換しないようにする。
-
[解決済み】.text、.value、.value2の違いは何ですか?
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] .docx、.pptxなどの正しいMIMEタイプは何ですか?
-
[解決済み] Excelのセルに画像を挿入する【終了
-
[解決済み] ExcelでDateTimeを表現する方法
-
[解決済み] 配列に対してfor eachループを使用するにはどうしたらよいですか?
-
[解決済み] Microsoft Excelで行数制限が残っているのはなぜですか?[クローズド]
-
[解決済み] Excelの数式 LIKE、AND、IF、WILDCARDS
-
[解決済み] エクセル文書のMIMEタイプ設定
-
[解決済み] Excelの数式で二重引用符を含む文字列を作成する方法は?
-
[解決済み】セルに部分文字列が含まれているかどうかを確認する
-
[解決済み】Excelで数式から空のセルを返す。