2017-09-25 232 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%的任何值! –