2015-04-04 151 views
2

我有一個帶有兩個工作表的excel工作簿。工作表A中包含多個名稱,每個名稱包含在不同的列中,而工作表B包含工作表A中的相同名稱和包含日期的第二列。 例子:Excel中的VLookup宏

Worksheet A.  Worksheet B. 

Name.    Name.  Dates 
Sean    Jake  11/13/15 
Jake    Sean  10/11/14 
Tom.    Chris  12/12/15 

我所試圖做的是設置調用VLOOKUP和名稱一旦表上乙發現,通過從一個工作表的名稱列在工作表B.搜索參數名稱的宏它會返回日期。目前我有手動此數據通過硬編碼以下VLOOKUP在列中的工作表A.

=VLOOKUP(A2,'Worksheet B'!A:B,2,FALSE) 

任何建議和幫助拉是極大的讚賞。

謝謝。

+0

謝謝你們的幫助!下面的代碼很有用Jeeped唯一的問題是如果我希望返回值的單元格位於工作表的另一端,該怎麼做。在下面的代碼中,日期將在第2列中返回,但如果我希望將值返回到第14列中,該怎麼辦? – TKS 2015-04-07 03:00:41

+0

[VLOOKUP函數](https://support.office.com/en-us/article/vlookup-function-adceda66-30de-4f26-923b-7257939faa65)在返回值位於查找列右側時使用。要返回查找列左側的值,請使用[INDEX函數](https://support.office.com/zh-cn/article/index-function-0ee99cef-a811-4762-8cfb-a222dd31368a)配對[MATCH功能](https://support.office.com/en-us/article/match-function-0600e189-9f3c-4e4f-98c1-943a0eb427ca)。請參閱下面的編輯示例。 – Jeeped 2015-04-07 20:12:31

+0

再次感謝您爲我提供工作解決方案!這工作完美。 – TKS 2015-04-16 05:01:05

回答

0

您可以使用VBA中的工作表函數。這個宏通過將它們發現的值返回到適當的單元格中來利用它們。

Sub auto_VLOOKUP() 
    Dim rw As Long, wsB As Worksheet 
    Set wsB = Worksheets("Worksheet B") 
    With Worksheets("Worksheet A") 
     For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row 
      If CBool(Application.CountIf(wsB.Columns(1), .Cells(rw, 1).Value)) Then 
       ' VLOOKUP is typically used to return data from the right of the lookup column 
       .Cells(rw, 2) = Application.VLookup(.Cells(rw, 1).Value, wsB.Columns("A:B"), 2, False) 
       ' INDEX/MATCH function pairs are used to wider scope 
       .Cells(rw, 3) = Application.Index(wsB.Columns("N"), Application.Match(.Cells(rw, 1).Value, wsB.Columns("A"), 0)) 
      End If 
     Next rw 
     .Cells(2, 2).Resize(rw - 2, 1).NumberFormat = "m/d/yyyy" 
    End With 
    Set wsB = Nothing 
End Sub 

您將有編輯工作表名稱和調整是不一樣的,你在你的樣本數據提供者的任何列。

0

這不是vlookup,但它會得到你想要的結果。

Sub Button1_Click() 
    Dim ws As Worksheet, sh As Worksheet 
    Dim Rws As Long, Rng As Range 
    Dim c As Range, FndC As Range, shRng As Range 


    Set ws = Sheets("Sheet1") 
    Set sh = Sheets("Sheet2") 
    Set shRng = sh.Range("A:A").SpecialCells(xlCellTypeConstants, 23) 
    With ws 
     Rws = .Cells(Rows.Count, "A").End(xlUp).Row 
     Set Rng = .Range(.Cells(1, 1), .Cells(Rws, 1)) 
    End With 
    For Each c In Rng.Cells 

     Set FndC = shRng.Find(what:=c, lookat:=xlWhole) 

     If Not FndC Is Nothing Then 
      c.Offset(0, 1) = FndC.Offset(0, 1) 
     Else: c.Offset(0, 1) = "Not Found" 
      Exit Sub 
     End If 
    Next c 
End Sub