【VBA】行や列を追加・削除する際のデータのずれに注意

VBAで行や列を追加・削除する処理はよく使われますが、操作の順番や考え方を間違えると、データがずれてしまい、正しく処理できなくなることがあります。
この記事では、行列操作時に注意すべき「データのずれ」について、具体例を交えて解説します。


1. データのずれとは?

行や列を追加・削除すると、対象より後ろのデータ位置が変わるため、次の操作が意図しないセルに対して行われてしまうことがあります。
特に、以下のような処理でよく起こります。

  • 複数行・列をループ処理しながら、削除や追加を行う場合
  • 削除・追加の後にセル位置を固定せず次の処理を続ける場合

2. 具体例と注意点

⚫️よくあるミス例(ループ中の削除)

Sub よくあるミス()
Dim i As Long
For i = 1 To 10
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
End Sub

このコードは、1列目のセルが空白なら行を削除する処理ですが、行を削除すると次の行が1つ上にずれるため、正しく判定できなくなります。


⚫️正しい書き方(逆順ループ)

Sub 正しい行削除()
Dim i As Long
For i = 10 To 1 Step -1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
End Sub

後ろから順に処理することで、削除によるずれの影響を受けずに安全に操作できます。


3. 列の追加・削除も同様の注意が必要

列を追加・削除する場合も、右側の列の位置が変わるため、ずれに注意が必要です。

例:2列目に列を追加すると

Columns(2).Insert

この処理を行うと、元の2列目が3列目にずれます。続けて処理する場合、列番号を意識しないと誤った列を操作する原因になります。


4. 対策ポイントまとめ

✅ 削除する場合は後ろから処理する(逆順ループ)
✅ 追加・削除直後に位置を特定したい場合は、再取得する
✅ できるだけセルのアドレス(Range("A1")など)で操作する
✅ 影響範囲をしっかり把握してから処理を組み立てる


5. まとめ

操作内容注意点
行の削除後ろから順に削除する(逆順ループが基本)
列の削除後ろから順に削除するのが安全
行・列の追加追加後にデータの位置がずれるので、位置再確認が必要

行や列の追加・削除は便利な反面、処理の組み方を間違えるとデータずれが発生し、思わぬミスにつながります。
安全な処理を意識して、安定したVBAコードを書けるようにしていきましょう。

コメント

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