Excel VBA - 如果列B包含任何值,则使用值更新列A.如果列B不包含任何值,则不要运行宏

时间:2017-08-02 16:24:30

标签: excel vba excel-vba

在我的场景中,我有四列,即A-D列。如果列B包含任何值,则必须更新列A中的匹配行以包含预定值。同样的宏应用于列C和D.我现在有代码实现了这个结果:

Sub Update_Column_Based_On_Column_Value1()
On Error Resume Next
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("B" & .Rows.Count).End(xlUp).Row

        .Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).Formula = "=If(B1<>"""",""PREDETERMINED VALUE"","""")"
        .Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value
    End With
End Sub

当B列包含值时,宏将在A列的相应单元格中写入“PREDETERMINED VALUE”。

当列根本不包含任何值时,会出现问题。会发生什么是宏会将我的新值写入整个数据集中的几乎所有空白单元格。

提前感谢您的时间!如果我的问题是noobish,我很抱歉,我对VBA仍然很新。

2 个答案:

答案 0 :(得分:0)

在评论部分中使用<script src="https://cdn.jsdelivr.net/jquery/1.12.4/jquery.min.js"></script> 来避免问题是一个很好的尝试,但可能存在例外情况,如下所述。使用各种方案(特别是使用空白范围)对其进行多次测试,以确定您是否每次都获得所需的结果。

If WorksheetFunction.CountA(ws.Range("B:B")) = 1尝试简化代码,但有时the .SpecialCells(xlCellTypeBlanks) VBA function does not work as expected in Excel

此外,声明.SpecialCells不应在切实可行的范围内使用。但如果必须,请务必尽快插入On Error Resume Next语句,因为您不想掩盖其他错误。

您可以使用On Error GoTo 0循环来避免此问题,而不是.SpecialCells。那么让我们看看它的外观:

For Each

答案 1 :(得分:0)

以下是每个人的答案!

Sub Update_Column_Based_On_Column_Value_1()
    On Error Resume Next
        Dim ws As Worksheet
        Dim lRow As Long

        Set ws = ThisWorkbook.Sheets("Sheet1")

        If WorksheetFunction.CountA(ws.Range("B:B")) = 1 Then

        Else

            With ws
                lRow = .Range("B" & .Rows.Count).End(xlUp).Row
                .Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=If(LEN(RC2),""NEW TEXT HERE"", TEXT(,))"
                .Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value
            End With
        End If
    End Sub