在我的场景中,我有四列,即A-D列。如果列B包含任何值,则必须更新列A中的匹配行以包含预定值。同样的宏应用于列C和D.我现在有代码实现了这个结果:
Sub Update_Column_Based_On_Column_Value1()
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<>"""",""PREDETERMINED VALUE"","""")"
.Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value
End With
End Sub
当B列包含值时,宏将在A列的相应单元格中写入“PREDETERMINED VALUE”。
当列根本不包含任何值时,会出现问题。会发生什么是宏会将我的新值写入整个数据集中的几乎所有空白单元格。
提前感谢您的时间!如果我的问题是noobish,我很抱歉,我对VBA仍然很新。
答案 0 :(得分:0)
在评论部分中使用<script src="https://cdn.jsdelivr.net/jquery/1.12.4/jquery.min.js"></script>
来避免问题是一个很好的尝试,但可能存在例外情况,如下所述。使用各种方案(特别是使用空白范围)对其进行多次测试,以确定您是否每次都获得所需的结果。
If WorksheetFunction.CountA(ws.Range("B:B")) = 1
尝试简化代码,但有时the .SpecialCells(xlCellTypeBlanks)
VBA function does not work as expected in Excel。
此外,声明.SpecialCells
不应在切实可行的范围内使用。但如果必须,请务必尽快插入On Error Resume Next
语句,因为您不想掩盖其他错误。
您可以使用On Error GoTo 0
循环来避免此问题,而不是.SpecialCells
。那么让我们看看它的外观:
For Each
答案 1 :(得分:0)
以下是每个人的答案!
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")
If WorksheetFunction.CountA(ws.Range("B:B")) = 1 Then
Else
With ws
lRow = .Range("B" & .Rows.Count).End(xlUp).Row
.Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=If(LEN(RC2),""NEW TEXT HERE"", TEXT(,))"
.Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value
End With
End If
End Sub