我需要一些相对简单的宏的帮助。我需要检查列i中的值是否大于列N中的值,如果是,则检查它是否低于列O中的值,打印出列k中相应的列P的数量。我写了一个我认为会起作用的宏,但是当它运行时,没有任何反应。有什么想法吗?
ActiveRecord::Base.default_timezone = 'Eastern Time (US & Canada)'
ENV['TZ'] = 'EST'
答案 0 :(得分:2)
请记住在设置单元格值时使用Value属性。我假设您将列J视为目标列,在该列中将值粘贴到P列中(这是您代码中的内容)。 对于每行 x ,列I和 x 中的单元格值与列N和O中的所有值对相比,这应该可以工作并进行比较。如果是I的值 x 位于N和O列中的至少一对值之间,它将J x 的值复制到P x
Sub CountP()
Dim ws As Worksheet
Dim i As Integer, j As Integer
Set ws = Sheets("Bulk Add")
For i=2 To 2377
For j=2 To 2377
If ws.Range("I" & i) > ws.Range("N" & j).Value _
And ws.Range("I" & i).Value < ws.Range("O" & j).Value Then
ws.Range("J" & i).Value = ws.Range("P" & i).Value
' Once you've found one pair of N and O that satisfies the condition,
'you move on to the next row, by forcing the j loop to end.
Exit For
End If
Next j
Next i
End Sub
答案 1 :(得分:1)
据我所知,问题描述代码不需要循环n * n次。只需在查找表(N1:O49)
中找到包含正在调查的值的一对
Sub CountP()
Dim cell As Range
Dim ws As Worksheet
Dim i As Integer
Dim x
Set ws = Sheets(1)
With ws
For Each cell In .Range("I2:I2377")
x = cell.Value
For i = 2 To 49
If x > .Range("N" & i) And x <= .Range("O" & i) Then
.Range("J" & cell.Row) = .Range("P" & i)
Exit For
End If
Next i
Next cell
End With
End Sub
结果:值落在其中的范围编号旁边的值打印在第J列中 仔细观察间隔是如何测试的:值需要大于下限和上限。这与您的样本数据不一致。