簡體   English   中英

Excel VBA-如果列B包含任何值,則使用值更新列A。 如果列B不包含任何值,則不要運行宏

[英]Excel VBA - Update column A with a value if column B contains any value. If column B contains no values then do not run the macro

在我的場景中,我有四個列,即AD列。 如果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”。

當列完全不包含任何值時,就會發生問題。 發生的是宏將把我的新值寫入整個數據集中幾乎所有的空白單元格。

預先感謝您的寶貴時間! 我很抱歉,如果我的問題有點笨拙,那么我對VBA還是很陌生。

在注釋部分中使用If WorksheetFunction.CountA(ws.Range("B:B")) = 1來避免該問題是一個很好的嘗試,但是可能會有如下所述的異常。 使用各種方案(尤其是使用空白范圍)對它進行多次測試,以查看您是否每次都獲得期望的結果。

.SpecialCells嘗試簡化代碼,但是有時.SpecialCells(xlCellTypeBlanks) VBA函數無法按預期在Excel中工作

另外,不應盡可能使用On Error Resume Next語句。 但是,如果必須,請確保盡快插入On Error GoTo 0語句,因為您不想掩蓋其他錯誤。

可以使用For Each循環代替.SpecialCells來避免此問題。 因此,讓我們看一下它的外觀:

Sub Update_Column_Based_On_Column_Value1()
    Dim ws As Worksheet, lRow As Long, r As Range
    Set ws = ThisWorkbook.Sheets("Sheet1")
    With ws
        lRow = .Range("B" & .Rows.Count).End(xlUp).Row
        For Each r In .Range("A1:A" & lRow)
            If IsEmpty(r) Then
                r.Formula = "=If(B" & r.Row & "<>"""",""PREDETERMINED VALUE"","""")"
                r = r.Value
            End If
        Next
    End With
End Sub

這是大家的答案!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM