重复一个'如果'公式到最后一行

我有这个工作表,我有一个在VBA中的IF公式searchV9:Z9的相似值(DIST8和DIST6)。 该公式用10填充AO9。 这个公式适用于我的目的。 我想重复这个公式直到最后一行。

 Dim DIST8 As String Dim DIST6 As String DIST8 = "DIST8" ' Select cell A9, *first line of data*. Range("A9").Select ' Set Do loop to stop when an empty cell is reached. Do Until IsEmpty(ActiveCell) ' Insert your code here If Worksheets("Sheet1").Range("v9") Like "*" & "DIST8" & "*" Or Worksheets("Sheet1").Range("w9") Like "*" & "DIST8" & "*" Or Worksheets("Sheet1").Range("x9") Like "*" & "DIST8" & "*" Or Worksheets("Sheet1").Range("y9") Like "*" & "DIST8" & "*" Or Worksheets("Sheet1").Range("z9") Like "*" & "DIST8" & "*" Or Worksheets("Sheet1").Range("v9") Like "*" & "DIST6" & "*" Or Worksheets("Sheet1").Range("w9") Like "*" & "DIST6" & "*" Or Worksheets("Sheet1").Range("x9") Like "*" & "DIST6" & "*" Or Worksheets("Sheet1").Range("y9") Like "*" & "DIST6" & "*" Or Worksheets("Sheet1").Range("z9") Like "*" & "DIST6" & "*" Then Worksheets("Sheet1").Range("Ao9").Value = 1 Else Worksheets("Sheet1").Range("Ao9").Value = 0 End If ' Step down 1 row from present location. ActiveCell.Offset(1, 0).Select Loop 

不幸的是,循环工作不正常,工作表将向下滚动到最后一行,但不填充第一行之外的IF。 我想运行相同的IF公式,但改变行号例如; v9到v10,w9到w10等

什么是实现这个最好的方法?

要使用循环,需要在Range("v9")Range("Ao9")等中继续增加行号,或者只是将新值比较并写入同一个单元格中。

  Dim DIST8 As String, DIST6 As String, r As Long, lr As Long DIST6 = "DIST6" '<~~ don't forget DIST6 or the wildcards will make everything a 1. DIST8 = "DIST8" With Worksheets("Sheet1") lr = .Cells(Rows.Count, "A").End(xlUp).Row For r = 9 To lr If .Range("v" & r) Like "*" & DIST8 & "*" Or .Range("w" & r) Like "*" & DIST8 & "*" Or _ .Range("x" & r) Like "*" & DIST8 & "*" Or .Range("y" & r) Like "*" & DIST8 & "*" Or _ .Range("z" & r) Like "*" & DIST8 & "*" Or .Range("v" & r) Like "*" & DIST6 & "*" Or _ .Range("w" & r) Like "*" & DIST6 & "*" Or .Range("x" & r) Like "*" & DIST6 & "*" Or _ .Range("y" & r) Like "*" & DIST6 & "*" Or .Range("z" & r) Like "*" & DIST6 & "*" Then .Range("Ao" & r).Value = 1 Else .Range("Ao" & r).Value = 0 End If Next r End With 

你正在使用的循环对于25-500条logging是好的,但是可以通过批量加载一个公式然后恢复到这些值来加速。 如果你正在处理大于5K的logging,速度的提高将是可观的。

  Dim DIST8 As String, DIST6 As String, lr As Long DIST6 = "DIST6" '<~~ don't forget DIST6 or the wildcards will make everything a 1. DIST8 = "DIST8" With Worksheets("Sheet1") lr = .Cells(Rows.Count, "A").End(xlUp).Row With .Range(.Cells(9, "AO"), .Cells(lr, "AO")) .Formula = "=SIGN(SUM(COUNTIF(V9:Z9, {""*" & DIST6 & "*"", ""*" & DIST8 & "*""})))" .Value = .Value End With End With 

请注意,后者例程的COUNTIF函数不区分大小写,而默认情况下,您的原始模式匹配区分大小写。 如果您希望对模式匹配进行不区分大小写的比较,请在“ 声明”部分的模块表的顶部添加Option Compare Text