如果下面的行有一个包含括号的数字"(2)"和另一个包含单词" Adult"。
的单元格它是这样的:
Sub BUBFindAdults2()
lastRow = Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
For x = 3 To lastRow
If InStr(1, Sheets("Sheet1").Cells(x, 3), "(2)") <> 0 _
And InStr(1, Sheets("Sheet1").Cells(x, 31), "Adult") <> 0 Then
Sheets("Sheet1").Cells(x - 1, 53).Value = _
Sheets("Sheet1").Cells(x - 1, 53).Value + 1
End If
Next x
End Sub
但是,如果下面的两个行包含&#34;(3)&#34;我还需要将它添加到同一个单元格中。和#34;成人&#34;。 和如果下面的三个行包含&#34;(4)&#34;和#34;成人&#34;。等等。你看到了模式!
到目前为止,我通过重复相同的代码来解决这个问题:
Sub BUBFindAdults2()
lastRow = Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
For x = 3 To lastRow
If InStr(1, Sheets("Sheet1").Cells(x, 3), "(2)") <> 0 _
And InStr(1, Sheets("Sheet1").Cells(x, 31), "Adult") <> 0 Then
Sheets("Sheet1").Cells(x - 1, 53).Value = _
Sheets("Sheet1").Cells(x - 1, 53).Value + 1
End If
If InStr(1, Sheets("Sheet1").Cells(x, 3), "(3)") <> 0 _
And InStr(1, Sheets("Sheet1").Cells(x, 31), "Adult") <> 0 Then
Sheets("Sheet1").Cells(x - 2, 53).Value = _
Sheets("Sheet1").Cells(x - 2, 53).Value + 1
End If
If InStr(1, Sheets("Sheet1").Cells(x, 3), "(4)") <> 0 _
And InStr(1, Sheets("Sheet1").Cells(x, 31), "Adult") <> 0 Then
Sheets("Sheet1").Cells(x - 3, 53).Value = _
Sheets("Sheet1").Cells(x - 3, 53).Value + 1
End If
Next x
End Sub
你可能会说,当我处理10次以上的重复时,这开始有点傻了!我知道编写VBA的主要规则之一是避免重复代码。我已经看了一些人们循环他们的代码的例子,但是我没有运气将这些方法应用到我自己的。
非常感谢任何帮助。
答案 0 :(得分:3)
您可以先在列31
上使用过滤器,只显示出现"Adult"
的行。之后它变得更简单,肯定更快。
Sub BUBFindAdults2()
With Sheets("Sheet1").UsedRange
.AutoFilter 31, "*Adult*"
Dim r As Range, i As Integer
For Each r In .SpecialCells(xlCellTypeVisible).EntireRow
For i = 2 To 4
If r.Cells(3) Like "*(" & i & ")*" Then
With r.Offset(1 - i).Cells(53)
.Value = .Value + 1
End With
End If
Next
Next
.Parent.AutoFilterMode = False
End With
End Sub
答案 1 :(得分:2)
我无法运行您的代码,但使用嵌套for循环可以很容易地实现这一点。请参阅以下代码,该代码将根据您在问题中提供的代码执行10次重复:
Sub BUBFindAdults2()
lastRow = Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
For x = 3 To lastRow
If InStr(1, Sheets("Sheet1").Cells(x, 31), "Adult") <> 0 Then
For i = 1 To 10
If InStr(1, Sheets("Sheet1").Cells(x, 3), "(" & (i+1) & ")") <> 0 Then
Sheets("Sheet1").Cells(x - i, 53).Value = _
Sheets("Sheet1").Cells(x - i, 53).Value + 1
End If
Next i
End If
Next x
End Sub