2016-12-19 6 views
0

私は2つのワークブックを持っています.1つはスレーブ、もう1つはマスターです。XとXが一致する2つのワークブックの間のVBAコピーの値は?

Slave.xlsm

ID Case Size  Names 
1 1o    Michael   
2 4    Katie    
3 3    Elliot    

Master.xlsm

ID Case Size  Names 
1 1o    
2 4    
3 3 

スレーブワークブックから、私はIDとケースサイズがマスターに一致する名前]列から値をコピーしようとしています。

私はVBAを初めて使いましたので、オンラインでいくつかの例を参考にして自分のコードをコンパイルしようとしました。ここで私はこれまで持っているものです:

Sub GetTheName() 
    Dim s As String, FileName As String 

    s = "C:\Users\******\Documents\*.xlsm" 
    FileName = Dir(s) 
    Do Until FileName = "" 
     If FileName Like "Slave*" Then MsgBox FileName 

     Dim w1 As Worksheet, w2 As Worksheet 
     Dim c As Range, FR As Long 


     Application.ScreenUpdating = False 

     Set w1 = Workbooks.Open(FileName).Sheets(1) 
     Set w2 = ThisWorkbook.Sheets(1) 


     For Each c In w1.Range("C10", w1.Range("C" & Rows.Count).End(xlUp)) 
      FR = 0 
      On Error Resume Next 
      FR = Application.Match(c, w2.Columns("A"), 0) 
      On Error GoTo 0 
      If FR <> 0 Then w2.Range("R" & FR).Value = c.Offset(, 0) 
     Next c 

     Application.ScreenUpdating = True 
     FileName = Dir() 
     ActiveSheet.Range("A8").Value = Now() 
    Loop 
End Sub 

私は下の行に型不一致エラーを取得するOn Error Resume Nextを削除する場合:コードはworkbokを開きますが、コピーされません

FR = Application.Match(c, w2.Columns("R"), 0) 

何でもあります。なぜ何もコピーされていないのか分かりません。誰かが私がどこに間違っているのかを教えてもらえますか?おかげ

+0

はこれを取り出します。エラーで次の再開します。プロジェクトエクスプローラを開き、F8キーを押してコードをステップ実行します。何が起こるのですか? – User632716

+0

"tom prestonありがとう、この行を取り出すと、この行にタイプの不一致エラーが表示されます。FR = Application.Match(c、w2.Columns(" R ")、0) –

+0

@ Bing.Wong両方の列(AとB)を使用する場合は、 "Help"列Dを作成する必要があります。次に、 "Column D"の値の間にMacth関数を使用する必要があります。 –

答えて

1

は、私はあなたが欲しいものを得るために管理している...私はあなたが私の答えに興味があるだろうかどうかわからないんだけど、それはあなたが望むもの...

  1. まずどこの列を追加しませんあなたは
  2. INDEXとの一致検索スレーブページにAとBの列を連結 - 私はD列にCONCATENATE列を追加

MATCH方法を...ので、式は次のように...

だろう
=INDEX(SLAVE!C2:C4;MATCH(CONCATENATE(MASTER!A2;MASTER!B2);SLAVE!D2:D4;0)) 

そして、これはあなたのコメントで型の不一致に基づいて、VBAコード

Sub GetNames() 
' 
' GetNames Macro 
' 

' 
LastRow = Sheets("SLAVE").Cells(Rows.Count, 1).End(xlUp).Row 
Sheets("SLAVE").Activate 
Sheets("SLAVE").Range("D2").FormulaR1C1 = "=CONCATENATE(RC[-3],RC[-2])" 
Sheets("SLAVE").Range("D2").AutoFill Destination:=Range("D2:D" & LastRow & ""), Type:=xlFillDefault 


LastRow = Sheets("MASTER").Cells(Rows.Count, 1).End(xlUp).Row 
Sheets("MASTER").Activate 
Sheets("MASTER").Range("C2").FormulaR1C1 = _ 
     "=INDEX(SLAVE!RC:R[2]C,MATCH(CONCATENATE(MASTER!RC[-2],MASTER!RC[-1]),SLAVE!RC[1]:R[2]C[1],0))" 
Sheets("MASTER").Range("C2").AutoFill Destination:=Range("C2:C" & LastRow & ""), Type:=xlFillDefault 

End Sub 
0

あなたはAutoFilter()を使用することができます。

Option Explicit 

Sub main() 
    Dim cell As Range, masterRng As Range 

    With Sheets("Master") '<--| reference your "Master" sheet 
     Set masterRng = .Range("A2", .Cells(.Rows.count, 1).End(xlUp)) '<--| reference its columns A cells from row 2 down to last not empty row 
    End With 

    With Sheets("Slave") '<--| reference your "Slave" sheet 
     With .Range("B1", .Cells(.Rows.count, 1).End(xlUp)) '<--| reference its columns A and B from row 1 (headers) down to column A last not empty row 
      For Each cell In masterRng '<--| loop through "Master" sheet column A ID Size" 
       .AutoFilter field:=1, Criteria1:=cell.Value '<--| filter it on its 2nd column (i.e. column B) with current cell offset 1 column value (i.e. current "Master" sheet "Case Size") 
       .AutoFilter field:=2, Criteria1:=cell.Offset(, 1).Value '<--| filter it on its 2nd column (i.e. column B) with current cell offset 1 column value (i.e. current "Master" sheet "Case Size") 
       If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any cell filtered other than headers 
        cell.Offset(, 2) = .Resize(.Rows.count - 1, 1).Offset(1, 2).SpecialCells(xlCellTypeVisible).Cells(1, 1) '<--|write first filtered 3rd column cell value in current cell offset 2 columns value (i.e. current "Master" sheet "Names") 
       End If 
      Next cell 
     End With 
     .AutoFilterMode = False 
    End With 
End Sub 
+0

@Bing – user3598756

+0

@ Bing.Wong、あなたに助けを求める人々にフィードバックを与えてくれてうれしいです – user3598756

+0

@ Princess.Bell、私はあなたが助けを求めているのを見ています。フィードバックもあります。ありがとうございます! – user3598756

関連する問題