はじめに
今回は、VBAで列の一番下にある値を取得し、別のExcelファイルに貼り付ける方法について勉強しました。
使用環境は以下のとおりです。
- 使用OS: Windows 10 Pro
- バージョン: 20H2
背景
VBAプログラムを使って読み込んだファイルから、E列の一番下にあるデータを取得し、
それを別のExcelファイルの指定した位置(ここではK列)に貼り付けたいと考えました。
実際に行った処理
以下のコードで実現できました。
Workbooks(strFileName).Activate
row_end = Cells(Cells(Rows.Count, "E").End(xlUp).Row, "E").Value
ThisWorkbook.Activate
e = Cells(Rows.Count, "K").End(xlUp).Row + 1
Range("K" & e).Select
ActiveCell.Value = row_end
コードの解説
1行目:
対象のExcelファイルをアクティブにしています。strFileName
には、読み込んだファイル名が格納されています。
2行目:
E列の一番下の値を取得しています。
Rows.Count
は、ワークシート上の最終行(通常は1048576行目)を意味します。Cells(Rows.Count, "E").End(xlUp).Row
は、E列の最終データ行番号を取得します。- さらにその位置のセルの値を読み取って、
row_end
に代入しています。
※この処理は、Excel VBAで最終データ行を探すときの定番の書き方です。
3行目:
**貼り付け先となるExcelファイル(ThisWorkbook)**をアクティブに切り替えます。
4行目:
K列の一番下に新たなデータを追加するための行番号を取得しています。
現在のK列最終データの1行下を探すため、+1
しています。
5行目:
追加する場所(K列の最終行+1の位置)を選択しています。
6行目:
先ほど取得したrow_end
の値を、アクティブセル(つまり指定したK列のセル)に貼り付けています。
注意点
.Activate
や.Select
は動作確認用には便利ですが、省略して直接セルに値を代入するほうが実務では推奨されます。- ファイルを跨いで操作する場合、ファイルの開き忘れや指定ミスに注意する必要があります。
(例:本番コードでは、Activateを使わずに、ブック名+シート名+セルを直接指定する方法が安全です。)
まとめ
Cells(Rows.Count, "列").End(xlUp).Row
で、列の一番下のデータ行を取得できる。Value
を使って、実際のデータを取得する。- 貼り付ける場合は、ターゲットファイルに切り替え、最終行を探して追加する。
今回の作業を通じて、列の最終データ行の扱い方と、別ファイルへのデータ転記の基本操作を確実に理解できました。
今後も実践を重ね、よりスムーズに複数ファイルを扱えるようにしていきたいと考えています。