繁体   English   中英

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

[英]Excel VBA - If a cell in column B contains a value then column A equals “value” BUT do not overwrite existing column A data

问题的标题可能会有些混乱,但是本质上我想做的是如果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,因此请原谅我的含糊之处。

您可以使用纯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

仅当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列中值长度的任何正数与<>""相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM