2016-02-25 35 views
3

我想知道是否可以在找到相反符號值的列中創建匹配的宏。這是我堆疊:VBA在列中匹配符號值

Sub matching() 

Dim i As Integer 
Dim myVar, myFunc As Variant 
Dim myList As Range 

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 1 

myVar = Cells(i, "J") 
myList = Range(Cells(2, "J"), Cells(Cells(Rows.Count, 1).End(xlUp).Row, "J")) 
myFunc = Application.WorksheetFunction.VLookup(myVar, myList, 1, False) 

If myVar - myFunc = 0 Then 
Cells(i, "G") = "Match" 
Else 
Cells(i, "G") = "No Match" 

End If 
Next 

End Sub 
+0

你不需要每次都定義在循環列表作爲小費。我認爲myVar = Cells(i,「J」)需要是myVar = 0-Cells(i,「J」),那麼如果vlookup返回找到的,如果不是,則不需要calc部分。不是100%壽。我認爲你正在編寫公式= if(isna(vlookup(myval,mylist,1,0)),「no match」,「match」) –

+0

不確定你的意思是相反的符號值。請使它更具描述性。 – Sixthsense

+0

我有一個包含大量數據的列表。 「J」列的值爲1000,2000,-1000等。此列表包含基本上具有借方貸方部分(+ 1000,-1000值)的會計數據。我需要通過找到這些對來縮小現有的列表。找到的配對總和必須爲0.謝謝 – Chris

回答

1

除了一些語法錯誤,我認爲你的代碼是不是做你希望它是什麼。

myVar將指向myList範圍的某個單元格。這將有「VLOOKUP」始終「抓住」 myVar細胞和myFunc的返回myVar價值,從而導致If myVar - myFunc = 0支票總是返回True

,你應該更好地設置你的目標,你可以在下面的代碼適應您的需求

Sub matching2() 

Dim myList As Range 
Dim mySht As Worksheet 

Set mySht = ThisWorkbook.Worksheets("SheetTest") '<== change "SheetTest" to actual name of your sheet 

With mySht 
    Set myList = .Range("J2:J" & .Cells(.Rows.Count, 1).End(xlUp).row) 
    With .Cells(2, "G") 
     .Formula = "=if(vlookup($J2," & "J2:J$" & myList.Rows.Count + 1 & ",1,0) - $J2 = 0,""match"",""no match"") " 
     .Copy .Resize(myList.Rows.Count) 
    End With 
End With 


End Sub 

,不需要環路