2011-10-25 18 views
0

我有一個Excel工作表,在列A的名字和B列於表1。匹配名稱,然後從片材1複製到片材2旁邊的匹配名字

量我有一個是與另一SHEET2片A中的名稱就像表1和B中的名稱一樣空白。

如何檢查工作表1名稱與工作表2檢查名稱,如果它們匹配,然後將數量放在工作表1上的該名稱旁邊,並將數量複製到名稱旁邊工作表2上的匹配名稱旁邊的單元格中?工作表1上的名稱每天都會更改。

我試過這個,什麼也沒得到。

Sub Macro1() 
' 
' Macro1 Macro 
' 
    Dim RowIndex As Integer 
    Sheets("Sheet1").Select 
    RowIndex = Cells.Row 
    While DoOne(RowIndex) 
     RowIndex = RowIndex + 3 
    Wend 
End Sub 


Function DoOne(RowIndex As Integer) As Boolean 
    Dim Key 
    Dim Target 
    Dim Success 
    Success = False 
    If Not IsEmpty(Cells(RowIndex, 1).Value) Then 
     Key = Cells(RowIndex, 1).Value 

     Sheets("sheet2").Select 

     Set Target = Columns(2).Find(Key, LookIn:=xlValues) 

     If Not Target Is Nothing Then 
      Rows(Target.Row).Select 
      Selection.Copy 
      Sheets("Sheet1").Select 
      Rows(RowIndex + 1).Select 
      Selection.Insert Shift:=xlDown 
      Rows(RowIndex + 2).Select 
      Application.CutCopyMode = False 
      Success = True 
     End If 

    End If 
    DoOne = Success 
End Function 

表1:

A         B 

A One Preservation   $16.00 

A&D Recovery, Inc.   $8,108.46 

A&S Field Services, Inc.  $4,941.56 

A&T Jax Inc     $1,842.48 

第2頁:

A          B - blank cell 

A One Preservation - Calvin & Renee 

A&D Recovery, Inc. - Drew & Adam  

A&S Field Services, Inc. - Aaron  

A&T Jax Inc - Tyson 
+0

此代碼似乎試圖複製整個行。你想複製B值嗎? – brettdj

+0

是的,只是B值 – user1013478

回答

1

此代碼使用索引/匹配解決方案從sheet2中的sheet1複製匹配的B值。該代碼將與可變片名工作

  1. 空白單元格被忽略的第二片
  2. 非比賽被標記爲「不匹配」。
  3. 該代碼通過用值僅

    更新更新去除塔B在第二片式:如果第二片材的名稱是相同的工作表Sheet,但有一個「 - 一些文本」到右,然後使用代碼

    With rng1.Offset(0, 1) 
        .FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISERROR(MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0)),""no match""),"""")" 
        .Value = .Value 
    End With 
    

    原來的這個更新部分

    Sub QuickUpdate() 
        Dim ws1 As Worksheet 
        Dim ws2 As Worksheet 
        Dim rng1 As Range 
        Set ws1 = Sheets(1) 
        Set ws2 = Sheets(2) 
        Set rng1 = ws2.Range(ws2.[a1], ws2.Cells(Rows.Count, "A").End(xlUp)) 
        With rng1.Offset(0, 1) 
         .FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISNA(MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0)),""no match""),"""")" 
         .Value = .Value 
        End With 
    End Sub 
    
+0

謝謝,但它只適用於兩個單元完全匹配。有沒有辦法通過關鍵詞來匹配? – user1013478

+0

好的,鑑於哪個表單中包含應該在另一個表單中部分匹配的文本?還是比這更復雜?例子會有所幫助。歡呼聲 – brettdj

+0

工作表1看起來像這樣:一個保存\t $ 16.00 A&D Recovery,Inc. \t $ 8,108.46 A&S Field Services,Inc. \t $ 4,941。56 A&T的Jax公司\t $ 1,842.48片材2是這樣的:A一路保鮮 - 卡爾文&蕾妮\t A&d恢復公司 - 德魯&亞當\t A&S現場服務,公司 - 亞倫\t A&T的Jax公司 - 泰森\t,工作表2有一些單元格突出顯示藍色,一些名稱用紅色表示,格式與表格1不同 – user1013478

0

爲什麼不使用VLOOKUP函數?

Sheet1中有你在A列名和值在列B Sheet2中在A列的查找名稱,並在B列,你把:

=VLOOKUP(A1,Sheet1!$A$1:$B$n,2,FALSE) 

其中「N」是多少Sheet1表中的行。

唯一的問題是,如果在Sheet1中找不到名稱,它將放置#N/A。有可能有一種方法可以使用條件輸入備用條目。

+0

這些名字每天都在變化,名字的數量也在每天都在變化。 – user1013478