VBAでの行削除時にC列が空欄にならないようにする方法

Visual Basic

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シートを作成することができます。

コメント

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