我是excel VBA的新手,我需要完成一项使用VBA的任务。我正在寻找比较同一列中的值。我想从最后一行开始比较并向上移动。过滤的标准是,如果当前数字与最后一个数字之间的百分比差大于3%,则将值复制并粘贴到另一行。复制和粘贴值后,在检查3%的差异时,应将数据中的值与先前复制和粘贴的值进行比较。下面的例子。提前致谢。
例如,如果我的数据范围如下所示
1100
1285
1290
3005
1500
2020
2030
2040
2050
2060
2070
2080
2100
2500
3000
这应该是我的结果:
1100
1290
1500
2030
2100
2500
3000
我现在有3005的结果(3000和3005之间的差异小于3%的百分比(3005/3000),因此3005不应该在列表中),而它应该不在列表中。
1100
1290
3005
1500
2030
2100
2500
3000
这是我目前的代码。提前致谢。
Sub main2()
Dim row_a As Long
Dim row_b As Long
Dim l_2
row_b = Range("D5000").End(xlUp).Row
Cells(row_b, "d").Copy Cells(row_b, "P")
l_2 = row_b - 1
For i = row_b To 3 Step -1
a = Cells(row_b, "d").Value
For j = l_2 To 3 Step -1
If a / Cells(j, "d") <= 0.97 Or a / Cells(j, "d") >= 1.03 Then
Cells(j, "d").Copy Cells(j, "p")
a = Cells(j, "d").Value
End If
Next j
Next i
End Sub
最佳答案
@Jonathon在浏览您的代码时,发现您需要像这样在“ D”列中选择值,
如果选择了值,则没有任何选择的值接近选择值的3%
选择标准从下到上,首先按照您在(3000 a 3005问题)中的建议进行选择
并将所有选定的值粘贴到“ P”列中
如果正确,则通过以下代码满足每个问题的条件
'''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''
'代码从这里开始
Sub Filter3Per()
Dim LastRow As Integer
Dim ComVal As String
'''''''''Apply filter on columun with loop as per criteria
'Read last Row from D column
LastRow = Cells(Rows.Count, "D").End(xlUp).Row
'Clear format color of column D
Range("D:D").Interior.ColorIndex = -4142
'''Clear P column
Range("P:P").ClearContents
'Loop Goes from botttom to top 3 row
For i = LastRow - 1 To 1 Step -1
'Read compvalue
ComVal = Cells(i + 1, "D").Value
'Check for color
If Cells(i + 1, "D").Interior.ColorIndex <> 3 Then
'Loop to Check as Criteria
For j = i To 1 Step -1
'Critera
If ComVal / Cells(j, "D") <= 0.97 Or ComVal / Cells(j, "D") >= 1.03 Then
Else
Cells(j, "D").Interior.ColorIndex = 3
End If
Next
End If
Next
''''''''Apply filter on columun with loop as per criteria End here
'''''''''''''''Collect value''''''''''''''''''''
'''Clear P column
Range("P:P").ClearContents
For i = 1 To LastRow
If Cells(i, "D").Interior.ColorIndex <> 3 Then
Cells(i, "P").Value = Cells(i, "D") 'add value in p Column
End If
Next
'''''''''''Collect value end here
End Sub
'在这里结束
'''''