2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ExcelVBA_最終行、最終列の取得

Last updated at Posted at 2020-06-02

#最終行の取得
 ExcelVBAで多用する最終行の取得と最終列の取得についてまとめる。

##1. .End(xlDown):Ctrl+↓ を使う方法
 途中に空欄がある場合は空欄の一つ上のセルが最終行として認識される。
 入力されているセルが1行目のみの場合はその列の最終行は「1048576行目」と認識される。

最終行の取得
最終行 = Cells(1, 1).End(xlDown).Row

##2. .End(xlUp):Ctrl+↑を使う方法
 入力されているセルが1行目のみの場合はその列の最終行は「1行目」と認識される。
 1行目のセルに何も入力されていなくても最終行は「1行目」と認識されてしまう。

最終行の取得
最終行 = Cells(Rows.Count, 1).End(xlUp).Row

##3. CurrentRegionを使う
 途中に空白行(何も入っていない行)がある場合は、そこまでの行になってしまう。

最終行の取得
With Range("B2").CurrentRegion
  最終行 = .Item(.Count).Row
End With

##4. SpecialCells(xlCellTypeLastCell)を使う
 罫線が引いてあればそこまで範囲に入ってしまう。
 行高をデフォルトから変えているだけでも、その行まで範囲に入ってしまう。

最終行の取得
最終行 = Cells.SpecialCells(xlCellTypeLastCell).Row

##5. UsedRangeを使う
 罫線が引いてあればそこまで範囲に入ってしまう。
 行高をデフォルトから変えているだけでも、その行まで範囲に入ってしまう。

最終行の取得
With ActiveSheet.UsedRange
  最終行 = .Item(.Count).Row
End With

##6. Findメソッドを使う
 Findメソッドを使うため、[検索と置換]ダイアログボックスに表示される設定が変わってしまう。

最終行の取得
最終行 = Cells.Find(What:="*",LookIn:=xlFormulas, SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row

##■ユーザー定義関数
 毎回どの方法で最終行を取得するか面倒だったため、Findメソッドを使ったユーザー定義関数を作成。
 [検索と置換]ダイアログボックスの検索値に「*」と入力されてしまうが、大勢に影響ないと判断した。
 同様のやり方で最終列を取得する関数も作成。

最終行の取得
Function rowLast(sheetName As String, column As Integer) As Long
'===========================
'関数名  :   rowLast
'目的    :   最終行を求める
'引数    :   検索する列番号
'返値    :   最終行番号
'===========================
On Error GoTo errExit
   rowLast = Sheets(sheetName).Columns(column).Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Exit Function
errExit: rowLast = 0
End Function
最終列の取得
Function colLast(sheetName As String, row As Integer) As Long
'===========================
'関数名  :   colLast
'目的    :   最終列を求める
'引数    :   検索する行番号
'返値    :   最終列番号
'===========================
On Error GoTo errExit
   colLast = Sheets(sheetName).Rows(row).Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).column
Exit Function
errExit: colLast = 0
End Function
2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?