这个问题的标题可能有点令人困惑,但本质上我试图做的是,如果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的新手,所以请原谅我的帖子中的任何含糊之处。
发布于 2017-08-01 03:42:12
仅当第一个空格为A1时,此公式才有效。
.Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).Formula = "=If(B1<>"""",""NEW VALUE"","""")"
.SpecialCells(xlCellTypeBlanks)
可能是不连续的区域范围,可能从第1行开始,也可能不从行1开始。您需要将其转换为xlR1C1样式公式,才能正确识别第一个空白行。
.Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=If(LEN(RC2),""NEW VALUE"", TEXT(,))"
TEXT(,)
与""
相同,您不必在带引号的字符串中将双引号括起来;类似地,B列中表示值长度的任何正数都与<>""
相同。
发布于 2017-08-01 03:16:27
您可以使用纯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
https://stackoverflow.com/questions/45423518
复制相似问题