Excel VBAを始めたばかりの頃によく作るのが、「入力フォームから一覧表へデータ追加するマクロ」です。
特に「シート2に入力した内容を、シート1の一番下へ追加したい」という処理は、VBA初心者の定番課題でもあります。
この記事では、「シート2のA3:H3を、シート1のA列最終行の次へ追加する」処理について、LastRow取得やコピー方法を初心者向けに整理して解説します。
VBAでよく使う「最終行取得」とは
今回のような「データ追加型マクロ」で最重要なのが、最終行(LastRow)取得です。
例えばシート1に以下のようなデータがあるとします。
| A列 | 内容 |
|---|---|
| 1行目 | 見出し |
| 2行目 | データ |
| 3行目 | データ |
この場合、次の追加先は4行目になります。
そのため、まず「A列で最後に入力されている行番号」を取得する必要があります。
最終行取得で定番の書き方
VBAでは、最終行取得によく以下のようなコードが使われます。
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
これは「A列の一番下から上へ向かって、最初にデータがあるセルを探す」という意味です。
特に一覧表系マクロではかなり頻繁に登場します。
今回の場合、さらに「+1」して追加先行を作ります。
nextRow = lastRow + 1
空白セルがあっても問題ない理由
質問内容では、「A〜Hには空白がある」とあります。
しかし、A3だけ必須なら、A列基準で追加位置を決める方法で問題ないケースが多いです。
| 列 | 状態 |
|---|---|
| A | 必須 |
| B〜H | 空白あり |
つまり、「A列にデータが存在する=1件データ」とみなす考え方です。
このため、A列最終行を基準にする構造は非常によく使われます。
コピーではなく「値代入」の方がシンプルな場合もある
初心者は最初「Copy/Paste」を使いがちですが、今回程度の処理なら値代入の方がシンプルなケースがあります。
例えば以下のような考え方です。
- コピー貼り付け
- Value直接代入
特にValue代入なら、クリップボードを使わないため高速かつ安定しやすいです。
例えば以下のようなイメージです。
Range("A1:H1").Value = Range("A3:H3").Value
VBAではかなり定番の書き方です。
初心者が混乱しやすい「Cells」と「Range」
VBA初心者が最初につまずきやすいのが、「Cells」と「Range」の違いです。
| 書き方 | 特徴 |
|---|---|
| Range(“A1”) | 直感的 |
| Cells(1,1) | ループ向き |
今回のような「行番号が変動する処理」では、Cellsを使うケースが多くなります。
例えば、nextRowへ追加する場合は以下のような考え方になります。
Cells(nextRow, 1)
これは「nextRow行のA列」を意味します。
シート指定を省略すると誤動作しやすい
VBA初心者で非常に多いのが、シート指定忘れです。
例えば以下のようなコードです。
Cells(nextRow, 1)
これだけだと、「現在アクティブなシート」が対象になります。
そのため、誤動作防止には以下のようにシート変数化する人も多いです。
- ws1 = シート1
- ws2 = シート2
管理しやすさがかなり向上します。
今回の処理でよくある流れ
今回のような入力フォーム型VBAでは、一般的に以下の流れになります。
- A3空白チェック
- シート1最終行取得
- 次行計算
- A3:H3をコピー
- 入力欄クリア
特に入力欄クリアまで作ると、フォーム的にかなり使いやすくなります。
VBA初心者が最初に覚える実務系マクロとしても非常に定番です。
初心者向けにおすすめな考え方
VBA初心者は、「まず動く最小構成」を作るのが大切です。
最初から複雑な最適化を狙うより、以下を理解するとかなり強くなります。
- 最終行取得
- Cells指定
- Range指定
- シート指定
- Value代入
今回の処理には、VBA基礎がかなり詰まっています。
そのため、このタイプのマクロを理解すると応用範囲が広がりやすいです。
まとめ
VBAで「シート2のA3:H3を、シート1の最終行へ追加する」処理では、A列を基準に最終行取得する方法が定番です。
特に Cells(Rows.Count, 1).End(xlUp).Row は、一覧表追加型マクロで非常によく使われます。
また、コピー貼り付けよりValue直接代入の方がシンプルかつ安定しやすいケースもあります。
VBA初心者にとっては、「最終行取得」「Cells」「Range」「シート指定」を学べる非常に実践的な内容なので、まずは小さく動くコードから試していくのがおすすめです。


コメント