Excel:如果列B或C中的单元格为空,则清除列A单元格中的内容

时间:2017-01-27 08:42:05

标签: excel vba excel-vba if-statement

我想在excel office 2010中创建宏或公式。

如果B列或C列中的单元格为空,则清除A列中的内容。如果B列或C列中的单元格不为空,则不清除A中的内容。

我有一个范围从A1到C10的表,我想检查单元格B1的值:B10和C1:C10。

我找到了公式:=IF(ISBLANK(B1);"";"YOUR VALUE HERE")

但是当我尝试使用它时,我遇到了这个问题:当错误时,A1中的内容更改为0.

1 个答案:

答案 0 :(得分:3)

第一次使用此代码更正所有数据(它是您无法恢复的col A中的擦除数据),您只需将SheetName更改为工作表的名称:< / p>

Sub testMR()
    Dim i As Long
    Dim LastRow As Long
    Dim wS As Worksheet

    Set wS = ThisWorkbook.Sheets("SheetName")
    LastRow = LastRow_1(wS)

    For i = 1 To LastRow
        With wS
            If .Cells(i, 2) <> vbNullString Or .Cells(i, 3) <> vbNullString Then
            Else
                'B and C empty
                .Cells(i, 1) = vbNullString
            End If
        End With 'wS
    Next i
End Sub


Public Function LastRow_1(wS As Worksheet) As Double
    With wS
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            LastRow_1 = .Cells.Find(What:="*", _
                                After:=.Range("A1"), _
                                Lookat:=xlPart, _
                                LookIn:=xlFormulas, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False).Row
        Else
            LastRow_1 = 1
        End If
    End With
End Function

将其放在您希望自动执行该行为的工作表模块中:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Rows.Count > 1 Then Exit Sub
    If Application.Intersect(Target, Me.Range("B:C")) Is Nothing Then Exit Sub

    With Me
        If .Cells(Target.Row, 2) <> vbNullString _
           Or .Cells(Target.Row, 3) <> vbNullString Then
        Else
            'B and C empty
            .Cells(Target.Row, 1) = vbNullString
        End If
    End With 'Me
End Sub