问题的标题可能有点令人困惑,但基本上我要做的是如果列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相当新,所以请在我的帖子中原谅任何含糊不清的内容。
答案 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列中值的长度的任何正数与<>""
相同。