最初のファイルを開きます。その後、次のトピックが
この記事モジュール
使用を作成し、ステップ3までそれに従う示してモジュールを作成する - モジュールを作成:https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/
は定数
は、コードを書く作成しますファイル名とシート名の定数を宣言します。
Const FIRST_FILE_NAME As String = "Book1.xlsx" ' This current file
Const SECOND_FILE_NAME As String = "Book2.xlsx"
Const RESULTANT_FILE_NAME As String = "Result.xlsx"
Const wstFirst As String = "Sheet1" ' Sheet name of first file
Const wstSecond As String = "Sheet1"
Const wstResultant As String = "Sheet1"
書き込み定数宣言コード
' Check if a workbook is open; if inexistant, create one
Function Isworkbookopen(FileName As String)
Dim ff As Long, ErrNo As Long
Dim wkb As Workbook
Dim nam As String
wbname = FileName
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: Isworkbookopen = False
Case 70: Isworkbookopen = True
Case 53:
Workbooks.Add
ActiveWorkbook.SaveAs FileName:=RESULTANT_FILE_NAME
Isworkbookopen = False
Case Else: Error ErrNo
End Select
End Function
ファイルが存在しない場合には、以下のこのコードは、新しいファイルを作成し、ブックが開いているかどうかをチェックするコードを作成します。ファイルが開いていないことを報告します。私はちょうどVBA macro to copy data from one excel file to another答えでダンワグナーのコードを使用しています。コードの残りの部分はDanのコードも変更されています。
は、本
を開くコードを作成し、コードのあなたの残りの部分の下に次のコードを記述します。このコードは、ファイル名と参照変数を取ります。ワークブックが開いていない場合は、ワークブックを開いて参照変数に割り当てます。 ByRef
あなた自身でいくつかの読書を行う必要があります。
' Open a workbook and pass the reference back
Private Sub OpenBook(FileName As String, ByRef wkb As Workbook)
ret = Isworkbookopen(FileName)
If ret = False Then
Set wkb = Workbooks.Open(FileName)
Else
Set wkb = Workbooks(FileName)
End If
End Sub
結果のファイルでループしませんし、データを挿入するコードを作成します
は、あなたの現在のコードの下部に、このコードを記述します。このコードでは、3冊の本(第1冊、第2冊、データが貼り付けられる書籍)がすべて開かれます。最初のファイルは行単位で読み込まれます(第1ファイルと第2ファイルの共通フィールドとみなして第1セルのみが読み込まれます)。その後、ファイル1
Sub copydata()
Dim wkbFirst As Workbook
Dim wkbSecond As Workbook
Dim wkbResultant As Workbook
' open all 3 files
OpenBook FIRST_FILE_NAME, wkbFirst
OpenBook SECOND_FILE_NAME, wkbSecond
OpenBook RESULTANT_FILE_NAME, wkbResultant
Dim First_File_Counter As Integer, Second_File_Counter As Integer, Resultant_File_Counter As Integer
Dim First_Value As String, Second_Value As String
Resultant_File_Counter = 1
' loop from row 1 to a large number for file #1
For First_File_Counter = 1 To 10000
' get value of A1, then A2 and so on during each loop
' if that cell does not have a value, assume that there're no more rows of data
First_Value = wkbFirst.Worksheets(wstFirst).Range("A" & First_File_Counter).Value
If IsNull(First_Value) Or Len(Trim(First_Value)) = 0 Then Exit For
' loop from row 1 to a large number for file #2
' and look up information obtained from file #1 in file #2
For Second_File_Counter = 1 To 10000
Second_Value = wkbSecond.Worksheets(wstSecond).Range("A" & Second_File_Counter).Value
If IsNull(Second_Value) Or Len(Trim(Second_Value)) = 0 Then Exit For
' if first file's A1 matches any of the rows in this second file
' copy the row from first file into the resultant file
If First_Value = Second_Value Then
wkbFirst.Worksheets(wstFirst).Rows(First_File_Counter).EntireRow.Copy
wkbResultant.Worksheets(wstResultant).Rows(Resultant_File_Counter).Select
wkbResultant.Worksheets(wstResultant).Paste
Resultant_File_Counter = Resultant_File_Counter + 1
Exit For
End If
Next
Next
End Sub
例
私はBook1.xlsxを作成しました。その中で私が持っている:私はコピーコードの任意の行をクリックするとF5
押すと
A B
----- --------
1 UID Name
2 1 John
3 2 Matt
4 3 Katie
Book2.xlsxは
A B
----- --------
1 UID Address
2 1 100 2nd St, Chicago
3 3 Lukas Tower, Houston
を持って、コピーコードサブルーチンが実行されます。これは、コードを通過し、その後結果ファイルには、次のようになります。ファイル1からのデータは3ファイルに行ってきましたが、ファイル2のUIDに一致した行だけがやったことを A B
----- --------
1 UID Name
2 1 John
3 3 Katie
注意。ファイル2はUID 2を持っていないので、ファイル1のMattの行は結果ファイルには移動しませんでした。
うまくいけば、それがあなたの言いたいことがあります。
2つの別々のExcelファイルで、 'file#1'で行を探して' file#2'で一致するファイルを探していますか?一度一致するものが見つかると、 'file#1'でその行を取り出し、新しいExcelファイル' file#3 'に入れたいのですか? – zedfoxus
私はいくつかの仮定をした後、あなた自身の問題を解決するためのアイデアを与えるかもしれない答えを書いた。ご質問がある場合は、数日で返信することができます。 – zedfoxus