Excel VBA - 过滤值

时间:2017-09-25 21:56:13

标签: excel vba excel-vba

我正在VBA中编写代码来过滤列中的数据以执行回归。下面是数据的快照。我试图过滤数据,以便我从最近的日期(1月13日)开始,然后向后试图找到变化大于10%的值。通过改变我的意思是,(绝对值(Recent_Date_Rate - Older_Date_Rate))/ Recent_Date_Rate> 10%。

我已经完成了编写一个代码,该代码可以提供所有噪音值(不良数字,蒸汽速率变化小于<10%)。它所做的只是将最新值与旧值进行比较,如果变化小于10%,则复制并粘贴R列中的值。

我的问题是,是否有办法让代码做相反的事情?因此,只有我打算用于回归的好值才会打印在R列中。我尝试将运算符(&gt;)更改为此值,但这不起作用。

任何帮助将不胜感激。非常感谢你提前。任何改进代码的提示也将受到赞赏。

Sub main6()

    Range("R:R").ClearContents

    Dim offset1 As Integer
    Dim offset2 As Integer

    For j = Range("P1").Value To 3 Step -1
        offset1 = Cells(j, "P").Row - 3
        offset2 = Range("P1").Value - Cells(j, "P").Row
        For k = 1 To offset1
            If Abs((Cells(j, "P").Value - Cells(k + 2, "P").Value)) / Cells(j, "P").Value < 0.05 Then
                Cells(k + 2, "P").Copy
                Cells(k + 2, "R").PasteSpecial Paste:=xlValues
            End If
        Next k
    Next j
End Sub

enter image description here

1 个答案:

答案 0 :(得分:0)

如果我说对了你的话,你的公式abs(x-y)/x > 0.1会直接百分比。理论上它就像x*1.1 < y OR x/1.1 > y。虽然x有可能在y的范围内但y不在x的范围内(从19.4到21.5的差异将大于10%,但相反的将小于10%)。你还在调查过去。这样,将始终显示第一个值。一种简单的方法也可以是动态执行此操作的公式。

R3: =P3
R4: =IF(COUNTIFS(P$3:P3,">"&P4/1.1,P$3:P3,"<"&P4*1.1),"",P4)

可以根据需要复制R4。

通过电话完成。可能包含错误。;)