2013-10-04 68 views
1

嘿,我花了大半天的時間試圖弄清楚這一點 - 我覺得我非常接近。基本前提是我有4列數據。它們是複製並粘貼在一起的兩個單獨的名字/姓氏列。現在我想要做的是在姓氏上運行一個匹配,如果他們是平等的,在名字上運行匹配。列範圍是動態的,這就是運行CONCATENATE和VLOOKUP公式的原因,但如果我可以減少涉及的東西,它會很棒。在Excel VBA中運行一個嵌套的If/Match

Here's a sample data table 
    A  B  C  D  E 
1 Last First Last2 First2 
2 Sharma Abhi Smith Kevin 
3 Philip Matt Smith GEORGIA 
4 Franc Pete John Bon Jovi 
5 Arnold Susan Jack White 
6 Mallo Chad Sharma Katie 
7 Daigle Steve Sharma Abhi 

而且我的想法是,在E2單元格開始就應該返回匹配或不匹配(在這種情況下,只有第2行應返回匹配目前它返回匹配每次 - 這是DEF不對的。我覺得我缺少的幫助小東西?謝謝。

這是我到目前爲止

Sub matchFunction() 

On Error Resume Next 

Dim BW_Row As Long 
Dim BW_Clm As Long 
    Table1 = Sheet2.Range("F11:F16") ' Range of all appointments last name 
    Table2 = Sheet2.Range("$G$11:$G$16") ' Range of all appointments first name 
    Table3 = Sheet2.Range("$H$11:$H$16") ' Range of leads 
    BW_Row = Sheet2.Range("J11").Row ' Change E column if it's a match 
    BW_Clm = Sheet2.Range("J11").Column 

     For Each c In Table1 

      For Each d In Table2 

       If Application.Match(c, Table3, 0) <> "" Then 

        If Application.Match(d, Table3, 0) <> "" Then 

          Sheet2.Cells(BW_Row, BW_Clm) = "It's a Match!" 

         Else 

          Sheet2.Cells(BW_Row, BW_Clm) = "Sorry, it's not a match" 


        End If 

       End If 


     BW_Row = BW_Row + 1 

     Next d 

    Next c 

MsgBox "Matching Finished" 

End Sub 
+3

'運行一個CONCATENATE和VLOOKUP公式可行,但如果我可以得到一些較少的參與'然後你是使用完整的殺死VBA將運行較慢,更有可能失敗?如果沒有損壞,請不要修復它。無論如何,我在C列的A列中看不到任何匹配,但你說第2排是匹配?如果第2行與第3行相匹配,爲什麼第6行和第7行不匹配? – user2140261

+0

絕對同意 - 我不太瞭解速度和VBA,因此如果要花費相同的時間來完成Concatenate和Vlookup,那麼可能不值得搞清楚。第2行(A列,B列)與第7列(列C,D)相匹配 – Abhiously

回答

0

+1書面@ user2140261的評論...的VBA將會代碼比你的公式慢,但是,如果你使用VBA,插入這個,而不是你[R For Each C循環:

i = 11 
For Each c In Table1 
    If c = Cells(i, 8) Then 
     If Cells(i, 7) = Cells(i, 9) Then sheet2.Cells(i, BW_Clm) = "It's a Match!" 
    End If 
    sheet2.Cells(i, BW_Clm) = "Sorry, it's not a match" 
    i = i + 1 
Next c 

測試

這將檢查F11H11。如果匹配,則它檢查G11I11,如果返回匹配,則"It's a match!"寫入J11。如果不匹配,"Sorry, it's not a match"寫入J11。然後它開始循環第12行。

0

使用VBA對此似乎沒有必要。你可以只扔在E2這個數組公式(按Ctrl + Shift + Enter鍵):如果兩個條件都爲TRUE和值爲1,如果FALSE

=CHOOSE(MAX(IF(($C$2:$C$7=$A2)*($D$2:$D$7=$B2),2,1)),"Sorry, it's not a match","It's a Match!")

IF函數分配值2。 MAX將從值數組中找到最高值。 CHOOSE將根據該值返回短語。 1 =「不匹配」,2 =「匹配」。

+0

是這樣做的。這非常有幫助 - 我查了一下Choose和Max的操作來幫助我弄清楚這到底是怎麼回事。謝謝! – Abhiously

+0

很高興幫助! – 2013-10-10 04:07:51