2016-08-03 14 views
1

https://postimg.org/image/laeyoj9wn/ =リストVBAエクセル/結果

enter image description here

https://postimg.org/image/ihlr4i9k7/ =マスターリスト

enter image description here

をコピー&ペーストする方法を自動的その後、一つのマスターファイルに複数のファイルを比較するには、私がしたいと思いますリストとマスターリストのシリアル番号を比較してください。類似度値は、シリアル番号である場合、シリアル番号の値が自動的にコードに1ワークブック1の設定

Sub AutoUpdate() 
Dim Dic As Object, key As Variant, oCell As Range, i& 
Dim w1 As Worksheet, w2 As Worksheet 

    Set Dic = CreateObject("Scripting.Dictionary") 
    Set w1 = Workbooks("Book1.xlsm").Sheets("Sheet1") 
    Set w2 = Workbooks.Open("C:\UsersSurvey Testing\Book2.xlsx").Sheets("Sheet1") 
    Set w3 = Workbooks.Open("C:\Users\Survey Testing\Book3.xlsx").Sheets("Sheet1") 


    i = w2.Cells.SpecialCells(xlCellTypeLastCell).Row 
    For Each oCell In w2.Range("A2:A" & i) 
     If Not Dic.exists(oCell.Value) Then 
      Dic.Add oCell.Value, oCell.Offset(, 0).Value 
     End If 

    Next 
    i = w3.Cells.SpecialCells(xlCellTypeLastCell).Row 
    For Each oCell In w3.Range("A2:A" & i) 
     If Not Dic.exists(oCell.Value) Then 
      Dic.Add oCell.Value, oCell.Offset(, 0).Value 
     End If 


    Next 
    i = w1.Cells.SpecialCells(xlCellTypeLastCell).Row 
    For Each oCell In w1.Range("A2:A" & i) 
     For Each key In Dic 
      If oCell.Value = key Then 
       oCell.Offset(, 2).Value = Dic(key) 
     End If 


     Next 
    Next 

End Sub 

代わりに3列に貼り付けになり、私が自動的に検索し、すべてのワークブックを設定したいですフォルダに入れて比較してください。比較が必要なワークブックがたくさんあるかもしれないので。

答えて

0

this questionをご覧ください。そのコードから、あなたのものは次のようになります:

Sub Compare() 
Dim Dic As Object 
Dim fso As Object 'FileSystemObject 
Dim fldStart As Object 'Folder 
Dim fl As Object 'File 
Dim Mask As String, i As Long 
Dim Wbk As Workbook 

Set fso = New FileSystemObject 
Set fld = fso.GetFolder("C:\UsersSurvey Testing") 

Set Dic = CreateObject("Scripting.Dictionary") 

Mask = "*.xlsx" 

For Each fl in fld.Files 
    If fl.Name Like Mask Then 
     Set Wbk = Workbooks.Open(fld & "\" & fl.Name).Sheets("Sheet1") 
     i = Wbk.Cells.SpecialCells(xlCellTypeLastCell).Row 
     For Each oCell In Wbk.Range("A2:A" & i) 
      If Not Dic.exists(oCell.Value) Then 
       Dic.Add oCell.Value, oCell.Offset(, 0).Value 
      End If 
     Next oCell 
    End If 
Next fl 
End Sub 

注:私はこのコードをテストしていません。何を試してみるかというアイデアを得るだけです。

+0

アレクシスの素晴らしいソリューションをありがとうございました。それは私が必要としたものです。明らかに私のVBA Excel 2007はSet fso = New FileSystemObjectを読み込みませんが、コードがthisの場合のみ実行できます。Set fso = CreateObject( "scripting.FileSystemObject")。なぜなら、とにかく助けてくれてありがとう。 –

0

概念的には、これは、Power Queryを使用して、Excel 2010と2013のための無料のMicrosoftアドインであり、Get and TransformとしてExcel 2013に組み込まれたVBAを使用することなく、完全に行うことができます。

フォルダ内のすべてのファイルを開き、追加して重複を削除し、マスターファイルとして保存します。

新しいファイルが追加されたら、クエリを更新します。

+0

これは、ファイルがフォルダに追加または削除された場合にあまり堅牢ではありません。クエリを更新することはできません。新しいファイルを追加し、古いファイルへの参照を削除する必要があります。 –

+0

間違っています。名前ではなくフォルダ内のすべてのファイルを開くだけでなく、すべてのファイルを開くことができます。 Ken Pulsにはこちらのブログがあります(http://www.excelguru.ca/blog/2015/02/25/combine-multiple-excel-workbooks-in-power-query/) – teylyn

+0

ああ、もう一度。私はフォルダからのインポートボタンを忘れていました。あなたが "フォルダ内のすべてのファイルを開く"という言い方は、私の心の中で非常にマニュアルで聞こえるようにしました。 –