2017-09-25 228 views
0

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

我已经完成了编写一个代码,该代码可以给我所有的噪音值(坏数字小于蒸汽速率的10%变化)。它所做的只是将最新值与旧值进行比较,如果变化小于10%,它会复制并粘贴R列中的值。我的问题是真的,有没有办法让代码相反吗?所以只有我打算用于我的回归的良好值被打印在列R中。我尝试将操作符(>)更改为此,但那并不奏效。

任何帮助,将不胜感激。非常感谢你提前。任何提示,以改善代码也将不胜感激。

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

+0

你说:“我试过改变操作符,但那不起作用”。发生了什么?它看起来像_should_已经工作... – Floris

+0

我得到完全相同的结果。 –

+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可以根据需要复制下来。

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

+0

输出结果将是一个列表,其值不会超过过去10%的任何值! –