VBA初心者の方が直面しやすい問題として、行削除後にC列が空欄になる現象があります。今回は、行削除後でもC列が空欄にならないようにする方法について解説します。
1. VBAコードの問題点
あなたのコードでは、行削除時にC列の内容が消える原因は、変更を検知する「Worksheet_Change」イベントが正しく機能しないためです。行削除後、変更が検知されない場合があります。これを解決するためには、行削除後にC列を更新する方法を追加する必要があります。
コードに追加するロジックで、行削除時にもC列を適切に維持できます。
2. 解決策:行削除後のC列を維持する方法
行削除後にC列を空欄にしないための方法として、まず「Worksheet_Change」イベントの処理後、行削除時にもう一度C列を更新する方法を追加します。これにより、行削除後もC列に入力されていたデータを保持することができます。
以下は修正例です。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim no1 As Range
Set no1 = Me.Range("B2:B10")
If Not Intersect(Target, no1) Is Nothing Then
If IsDate(Target.Value) Then
Cells(Target.Row, 3) = Format(Target.Value - 5, "mm/dd")
Else
Cells(Target.Row, 3) = ""
End If
End If
' 行削除後の処理
If Target.Address = Range("B2:B10").Address Then
Call UpdateColumnC
End If
End Sub
Sub UpdateColumnC()
Dim r As Integer
For r = 2 To 10
If IsDate(Cells(r, 2).Value) Then
Cells(r, 3) = Format(Cells(r, 2).Value - 5, "mm/dd")
Else
Cells(r, 3) = ""
End If
Next r
End Sub
この修正を加えることで、行削除後にC列が再度適切に更新されます。
3. コードのポイント
コードのポイントは、行削除時にC列を手動で更新するサブプロシージャ「UpdateColumnC」を作成し、適切にC列の内容を設定することです。この方法で、行削除後もC列の内容を維持できます。
また、エラーハンドリング(On Error Resume Next)を使用して、コードが途中でエラーを起こしても続行できるようにしています。これにより、変更を確実に反映させることができます。
4. まとめ
VBAで行削除後にC列が空欄にならないようにするためには、行削除後にC列を再更新する処理を追加することが必要です。今回は、行削除後にC列を正しく更新する方法を紹介しました。この方法を参考にして、VBAでの作業をスムーズに進めましょう。
これで、行削除後にC列のデータを保持し、より使いやすいExcelシートを作成することができます。
コメント