見出し画像

【文系人間でも挫折せずに続けられるVBA!#1】最終行・最終列の取得方法について

今回の連載で実現しようとしている業務プロセスは、『売上データを管理しているkintone(業務アプリ)から出力したデータ(csv)を元に、ピボットテーブルを活用し、いくつかの切り口でデータ集計する』という毎月、同様のプロセスを経て作成される資料をマクロを組み、自動化することを目的にしています。

全体の作業手順

1.csvデータ内で必要項目にデータ不備(空白)がないか確認
2.全体をデータ範囲と設定し、ピボットテーブルを作成
3.売上内容(売上コード)でフィルターを掛けた会社ごとの売上高集計
4.月別の売上内容集計
5.代金未回収となっている売上集計
6.振込入金の債権消込(入金日入力)

といった形で作業(プログラミング)予定としています。

まずは、データ不備を確認するために、最終行と列数を取得することにします。

最終行・列数を取得する方法

まずデータ全部を範囲設定するため、最終行と列番号を取得する必要があります。そのための行動として、

1.シートの最下行までカーソルを飛ばす
2.そこから上に飛び、ぶつかった行が最終行

とします。

Sub rowCount()
   Dim m    '変数定義
   '行数の取得(途中に空欄があった場合はそこまでになる)
   m = Cells(1, 1).End(xlDown)
   MsgBox m     'メッセージボックスで行数を確認
End Sub

変数・・・数値や文字などを入れられる入れ物
 ※上記コードでいう部分の、『m』
VBAでは、『Dim』と記載し、そのあとに変数としたい任意の文字列で変数を定義できます。

次に、VBAでセルを指定するときは、Cells(行数,列数)となります。列数は、A列=1、B列=2といった形で数字に置き換えて指定することも可能です。

では、上記コードを実行していきます。一行ずつ確認して実行するために、F8ボタンで進めていきます。実行されているコードは、黄色でハイライトされます。

スクリーンショット 2022-01-25 171918

今回、行数の途中でデータ空白のシートを用意し上記コードを実行した結果が下図になります。

スクリーンショット 2022-01-25 171626

Cells(1, 1).End(xlDown)

この書き方だと、本来は11行目以降もデータがあるにも関わらず、10行目の不備が原因となり、10行目以降は空欄であると判断され、9行目が最終行と認識されてしまいます。

今回は最終行が100行なので、現在の9行目が空白であったとしても100行目のセルを取得できるようコードを修正します。

最終行の取得

スクリーンショット 2022-01-25 192454

Sub rowCount()
   Dim m, n
   
   'シート上にある一番下のセルまで飛んでから上に
   n = Cells(Rows.Count, 1).End(xlUp)
   MsgBox n
   
End Sub

これで、途中にデータ不備(空白)があったとしても最終行データを取得できることが確認できました。

(変更点)
Cells(1,1).End(xlUp)

Cells(Rows.Count,1).End(xlUp)

次は、セルデータではなく行数を取得するようにコードを修正します。

スクリーンショット 2022-01-25 193041

Sub rowCount()
   Dim m, n
   
   'シート上にある一番下のセルまで飛んでから上に
   n = Cells(Rows.Count, 1).End(xlUp).Row
   MsgBox n
End Sub

先ほどのコードの最後に、『.Row』と追記することで行数を取得できるようになりました。

次は、列数を取得する場合のコードです。

一番右の列数を取得

スクリーンショット 2022-01-25 193748

Sub colCount()
   Dim m
   m = Cells(1, Columns.Count).End(xlToLeft).Column
   MsgBox m
End Sub

M列は、A列から数えて13番目なので、『13』列目の数字を取得できています。

今回は、ここまでにしたいと思います。
次回は、データ不備(※必須項目が空白)となっている部分があるかどうかを確認するコードを書いていきます。

最後の一言感想

ネットで検索する際、『VBA 最終行取得』といった検索ワードで検索すると非常に多くのサイトが出てきます。検索1ページ目に掲載されているサイトの大半は見やすく作成されているので、そのコードを参照することを推奨です。

個人的には、サイト記載されているコードを写経(コピー)するのもよいですが、理解を深めるためには自分で簡易的なExcelを作成し、自分の想定通りに動くかどうかを一つ一つ確認していくことが重要だと思います。

この記事が気に入ったらサポートをしてみませんか?