現在行の内容をそのまま下に挿入する方法【VBA活用】
Excelで表を扱っていると、「現在の行をそっくりそのまま下に挿入したい」という場面がよくあります。特に、同じ形式のデータを繰り返し入力する場合や、途中の行にデータを追加する場合など、この操作が効率化できれば作業スピードが大幅に向上します。
Excelには標準機能として便利なショートカット Ctrl + D(フィルダウン)があり、選択範囲の上のセルの内容を下にコピーできます。私も日常的によく使っている機能です。しかし、この標準機能には次のような制限があります。
- 選択範囲内のコピーに限定される
- 途中の行では下のセルを上書きしてしまう
- 1行まるごとの複製・挿入には対応していない
たとえば、既に入力済みのデータが下にある状態でCtrl + Dを使うと、その内容を上書きしてしまい、データが失われる危険があります。
標準操作で同等のことをしようとすると、対象行を選択して右クリックで「挿入」を実行し、さらにコピー&ペーストする…という流れになります。しかし、この方法は手順が多く、表の書式が正しく引き継がれない場合もあります。
そこで便利なのが、VBAマクロを使って「現在行を下に挿入する」機能を自動化する方法です。
VBAマクロコード
以下のマクロは、選択中のセルが属する行(または複数行)を、そのまま下に複製して挿入します。Ctrl + Dと異なり、下の行を上書きせず安全に挿入できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub 現在行を下に挿入() Dim iRow Dim iRowCount Application.ScreenUpdating = False '// 現在行位置を取得 iRow = Selection.Row '// 選択行数を取得 iRowCount = Selection.Rows.Count If (iRowCount = 1) Then iRowCount = 0 ElseIf (iRowCount > 1) Then iRowCount = iRowCount - 2 End If '// 選択セルの先頭行を選択 Range(iRow & ":" & iRow).Select '// 選択行をコピー Selection.Copy '// 行数分だけ選択 Range(iRow + 1 & ":" & iRow + 1 + iRowCount).Select '// 行数分貼り付け Selection.Insert Shift:=xlDown '// カーソル位置を調整 Range("A" & iRow + 1 + iRowCount).Select Application.ScreenUpdating = True End Sub |
コードの動作解説
- 行番号と行数を取得
Selection.Rowで現在選択している行番号を取得します。複数行選択されている場合はSelection.Rows.Countで行数を計算します。 - コピー元の行を選択・コピー
Range(iRow & “:” & iRow).Selectで現在行を選択し、Selection.Copyでコピーします。 - 下に行を挿入
コピー元のすぐ下に新しい行を挿入し、内容を貼り付けます。既存データを上書きしないため安全です。 - カーソル位置の調整
複製された行の先頭セルにカーソルを移動して処理を終了します。
使い方
使い方は以下の通りです。
- Excelで対象のブックを開く
- Alt + F11でVBAエディタを開く
- 標準モジュールを挿入し、上記コードを貼り付け
- Alt + F8でマクロを実行(またはショートカットキーを割り当て)
ただ、それよりも個人用マクロブックに登録しておくと全てのブックで使えるので便利です。詳細は「個人用マクロブック(PERSONAL.XLSB)の作成方法」をご参照ください。
活用例
- 定型的な入力行(請求書、発注書、在庫管理表など)を増やすとき
- 中間行に追加データを挿入する必要があるとき
- 書式や計算式を含む行を安全にコピーするとき
特に、既存データを保持したまま行を挿入できるため、表形式のデータ編集では非常に役立ちます。
まとめ
標準機能のCtrl + Dは便利ですが、途中の行や既存データがある場合には使いづらさがあります。このVBAマクロを使えば、現在行を下にそのまま挿入する操作がワンアクションで可能になり、作業効率が格段に向上します。
特にExcelで定型的な表を頻繁に扱う方には、ぜひ常備マクロとして登録しておくことをおすすめします。