セルに文字を入力したら自動で行が追加される方法【Excel VBA】

目次

はじめに

Excelで重複データを処理していると、「下の方の値を優先して取得したい」と思う場面があります。
私も以前、MATCH関数INDEX関数を使って値を取得していましたが、どちらも上にある値が優先されてしまうため、意図したデータを取得できませんでした。

調べていくと、下の値を優先する方法は関数だけでは難しいようでした。
そこで発想を転換し、「それなら、上に新しい行をどんどん追加してしまえばよいのでは?」という考えに至り、VBAで対応してみました。


実現したいこと

  • セルA2に文字を入力したら、自動的に2行目に空行(新しい行)を挿入する
  • 常に最新の入力が上に来るようにする

使用するVBAコード

以下が、実際に使用したVBAコードです。Sheet1に直接記述します。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Range("A2") = "" Then
        Exit Sub
    Else
        Rows(2).Insert
    End If

End Sub

手順と設定方法

1. Visual Basicエディタを開く

Excel上部メニューから「開発」タブ →「Visual Basic」を選択します。

2. 対象のシートを選択

左側の「Microsoft Excel Objects」の中から「Sheet1(または対象のシート)」をダブルクリックします。

3. 上記のVBAコードをそのまま貼り付けます

入力後、保存すれば設定は完了です。


コードの詳細解説

  • Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     → この行は「セルが変更されたときに実行されるイベントハンドラー」です。定型文としてそのまま使います。
  • If Range("A2") = "" Then
     → セルA2が空白なら何もしないで終了します。
  • Rows(2).Insert
     → 上から2行目に新しい空行を挿入します。既存のデータがすべて1行下にずれます。

実行結果

このコードを有効にしておくと、セルA2に文字を入力した瞬間に新しい行が2行目に追加されます。
以後、次に入力されたデータも再び2行目に行が挿入されるため、新しいデータが常に上に積み重なるような構成になります。


応用のヒント

  • A2だけでなく他のセルをトリガーにしたい場合は、Range("A2")の部分を変更してください。
  • 条件を追加すれば、特定の値が入力されたときのみ行追加することも可能です。
  • データログのように「最新の情報を常に一番上に表示したい」場合にも応用できます。

まとめ

Excelでは関数だけでは限界がある処理も、VBAを使えば柔軟に対応可能です。
今回のように「セルに入力があったら自動で行を追加する」といった処理も、数行のコードで簡単に実装できます。

手作業での挿入を自動化したい方、データを常に最新順に並べたい方には非常に便利な手法です。
ぜひ試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次