Excel VBA - 如果B列中的单元格包含值,则A列等于“value”但不覆盖现有的A列数据

时间:2017-07-31 19:07:03

标签: excel vba excel-vba

问题的标题可能有点令人困惑,但基本上我要做的是如果列B不为空,则将值写入A列。这必须在C到Q中重复。如果B列中有值,我现在的代码现在产生所需的结果。但是,如果B没有值,那么我的替换文本将填充A1:A目标范围之外的所有类型的空白单元格。这是我的代码:

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")

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

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

我对VBA相当新,所以请在我的帖子中原谅任何含糊不清的内容。

2 个答案:

答案 0 :(得分:0)

您可以使用纯VBA执行相同的逻辑,而不是之后插入公式并获取其值:

Sub Update_Column_Based_On_Column_Value_1()
Dim ws As Worksheet
Dim lRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
    lRow = .Range("B" & .Rows.Count).End(xlUp).Row
    For i = 1 To lRow
        If .Cells(i, 2) <> "" Then
            .Cells(i, 1) = "NEW VALUE"
        End If
    Next i
End With
End Sub

答案 1 :(得分:0)

此公式仅在A1为第一个空白时有效。

.Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).Formula = "=If(B1<>"""",""NEW VALUE"","""")"

.SpecialCells(xlCellTypeBlanks)可能是一个不连续的区域,可能会或可能不会从第1行开始。您需要将其转换为xlR1C1样式公式,以便正确识别第一个空白行。

.Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=If(LEN(RC2),""NEW VALUE"", TEXT(,))"

TEXT(,)""相同,您不必在引用的字符串中加倍引号;类似地,表示B列中值的长度的任何正数与<>""相同。