はじめに
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を使えば柔軟に対応可能です。
今回のように「セルに入力があったら自動で行を追加する」といった処理も、数行のコードで簡単に実装できます。
手作業での挿入を自動化したい方、データを常に最新順に並べたい方には非常に便利な手法です。
ぜひ試してみてください。