![](/img/trans.png)
[英]Excel VBA if Column B contains a value then copy that value to Column A do not overwrite existing Column A data
[英]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.