最後に使用された行と列を見つけることは、VBAを使用したExcelの自動化にとって基本的かつ重要なタスクの1つです。シート、ワークブックを編集し、データを自動的に配置するには、シート上のデータの制限を見つける必要があります。

この記事では、Excelで最後の行と列を見つけるすべての方法を最も簡単な方法で説明します。

1. Range.Endを使用して、列の最後の非空白行を検索します

最初にコードを見てみましょう。手紙で説明します。

Sub getLastUsedRow()

Dim last_row As Integer

last_row = Cells(Rows.Count, 1).End(xlUp).Row ‘This line gets the last row

Debug.Print last_row

End Sub

上記のサブは、列1の最後の行を検索します。

image

どのように機能しますか?

シートの最後の行に移動して、CTRL + UPショートカットを押すのと同じです。

Cells(Rows.Count、1):この部分は列Aのセルを選択します。Rows.Countは1048576を示します。これは通常、Excelシートの最後の行です。

Cells(1048576, 1)
End(xlUp):Endは、シート内を最後までナビゲートするために使用される範囲クラスのメソッドです。 xlUpは、方向を示す変数です。

一緒にこのコマンドは、データを含む最後の行を選択します。

Cells(Rows.Count, 1).End(xlUp)
Row:rowは、選択したセルの行番号を返します。したがって、列Aにデータがある最後のセルの行番号を取得します。例では8です。

データを含む最後の行を見つけるのがいかに簡単かをご覧ください。このメソッドは、前の空白セルに関係なく、データの最後の行を選択します。画像では、セルA8のみにデータがあることがわかります。 A4を除いて、先行するすべてのセルは空白です。

列にデータがある最後のセルを選択します

A列の最後のセルを選択する場合は、末尾から「.row」を削除して、.selectと記述します。

Sub getLastUsedRow()

Cells(Rows.Count, 1).End(xlUp).Select ‘This line selects the last cell in a column

End Sub

「.Select」コマンドはアクティブセルを選択します。

最後のセルのアドレス列を取得する

A列の最後のセルのアドレスを取得する場合は、末尾から「.row」を削除して、.addressを書き込みます。

Sub getLastUsedRow()

add=Cells(Rows.Count, 1).End(xlUp).address ‘This line selects the last cell in a column

Debug.print add

End Sub

Range.Address *関数は、アクティブセルのアドレスを返します。

行の最後の非空白列を検索

これは、列内の最後の空白でないセルを見つけることとほぼ同じです。ここでは、行4にデータがある最後のセルの列番号を取得しています。

Sub getLastUsedCol()

Dim last_col As Integer

last_col = Cells(4,Columns.Count).End(xlToLeft).Column ‘This line gets the last column

Debug.Print last_col

End Sub

image

画像では、行4の最後の空白でないセルの列番号が返されていることがわかります。これは4です。

どのように機能しますか?

メカニズムは、列にデータがある最後のセルを見つけることと同じです。

列に関連するキーワードを使用しました。

VBAを使用してExcelでデータセットを選択

これで、VBAを使用してExcelの最後の行と最後の列を取得する方法がわかりました。

これを使用して、テーブルまたはデータセットを簡単に選択できます。データセットまたはテーブルを選択した後、コピー&ペースト、フォーマット、削除など、それらに対していくつかの操作を実行できます。

ここにデータセットがあります。このデータは下方に拡張できます。開始セル、つまりB4のみが固定されます。最後の行と列は固定されていません。 vbaを使用してテーブル全体を動的に選択する必要があります。

image

空白のセルを持つテーブルを選択するためのVBAコード

Sub select_table()

Dim last_row, last_col As Long

'Get last row

last_row = Cells(Rows.Count, 2).End(xlUp).Row

'Get last column

last_col = Cells(4, Columns.Count).End(xlToLeft).Column

'Select entire table

Range(Cells(4, 2), Cells(last_row, last_col)).Select

End Sub

これを実行すると、テーブル全体がほんの一瞬で選択されます。新しい行と列を追加できます。常にデータ全体が選択されます。

image

この方法の利点:

。それは簡単です。データを含む最後の行を取得するために、文字通り1行だけを記述しました。

これにより、簡単になります。

。速い。コード行が減り、時間がかかりません。

。わかりやすい。

。開始点が固定された不器用なデータテーブルがある場合は、完全に機能します。

Range.Endメソッドの短所:

。出発点を知っている必要があります。

。既知の行または列の最後の非空白セルのみを取得できます。出発点が決まっていないとダメになります。これが発生する可能性は非常に低いです。

2. Find()関数を使用して最後の行を検索する

最初にコードを見てみましょう。

Sub last_row()

lastRow = ActiveSheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row



Debug.Print lastRow

End Sub

image

画像でわかるように、このコードは最後の行を正確に返します。

どのように機能しますか?

ここでは、find関数を使用して、ワイルドカード演算子「*」を使用して任意のものを含むセルを検索します。アスタリスクは、テキストまたは数字を検索するために使用されます。

We set search order by rows (searchorder:=xlByRows). We also tell excel vba the direction of search as xlPrevious (searchdirection:=xlPrevious). It makes find function to search from end of the sheet, row wise.

Once it find a cell that contains anything, it stops. We use the Range.Row method to fetch last row from active cell.

データを含む最後のセルを取得するためのFind関数の利点:

。出発点を知る必要はありません。それはあなたに最後の列を与えるだけです。 。これは一般的であり、変更なしで任意のシートのデータを含む最後のセルを見つけるために使用できます。

。シート上の特定のテキストまたは番号の最後のインスタンスを見つけるために使用できます。

Find()関数の短所:

。醜いです。あまりにも多くの引数。

。遅いです。

。最後の空白以外の列を取得するために使用することはできません。技術的には可能です。しかし、遅くなりすぎます。

3.SpecialCells関数を使用して最後の行を取得する

xlCellTypeLastCell引数を持つSpecialCells関数は、最後に使用されたセルを返します。最初にコードを見てみましょう

Sub spl_last_row_()

lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

Debug.Print lastRow

End Sub

image

上記のコードを実行すると、最後に使用されたセルの行番号が取得されます。

どのように機能しますか?

これは、ExcelのショートカットCTRL + Endに相当するvbaです。最後に使用したセルを選択します。 Ctrlキーを押しながらEndキーを押しながらマクロを記録すると、このコードが表示されます。

Sub Macro1()

'

' Macro1 Macro

'

'

ActiveCell.SpecialCells(xlLastCell).Select

End Sub

最後に使用したセルの行番号を取得するために使用しました。

注:*上記で述べたように、このメソッドは、データを含む最後のセルではなく、最後に使用されたセルを返します。最後のセルのデータを削除しても、上記のvbaコードは「最後に使用されたセル」であるため、同じセル参照を返します。この方法を使用してデータを含む最後のセルを取得するには、最初にドキュメントを保存する必要があります。

関連記事:

link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する]

link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する]

link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [ExcelのVBAステータスバーにメッセージを表示する]

link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする]

人気の記事:

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]

link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]