VBAでシート2のA3:H3をシート1の最終行へ追加する方法|初心者向けにLastRow取得を解説

Visual Basic

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では、一般的に以下の流れになります。

  1. A3空白チェック
  2. シート1最終行取得
  3. 次行計算
  4. A3:H3をコピー
  5. 入力欄クリア

特に入力欄クリアまで作ると、フォーム的にかなり使いやすくなります。

VBA初心者が最初に覚える実務系マクロとしても非常に定番です。

初心者向けにおすすめな考え方

VBA初心者は、「まず動く最小構成」を作るのが大切です。

最初から複雑な最適化を狙うより、以下を理解するとかなり強くなります。

  • 最終行取得
  • Cells指定
  • Range指定
  • シート指定
  • Value代入

今回の処理には、VBA基礎がかなり詰まっています。

そのため、このタイプのマクロを理解すると応用範囲が広がりやすいです。

まとめ

VBAで「シート2のA3:H3を、シート1の最終行へ追加する」処理では、A列を基準に最終行取得する方法が定番です。

特に Cells(Rows.Count, 1).End(xlUp).Row は、一覧表追加型マクロで非常によく使われます。

また、コピー貼り付けよりValue直接代入の方がシンプルかつ安定しやすいケースもあります。

VBA初心者にとっては、「最終行取得」「Cells」「Range」「シート指定」を学べる非常に実践的な内容なので、まずは小さく動くコードから試していくのがおすすめです。

コメント

タイトルとURLをコピーしました