- 締切済み
エクセルのVBAで、ファイルの読込・出力をしたい。
エクセル2003 VBAで、得意先コードを基準に(質問1)(質問2)を行いたいです。 申し訳ありませんが、教えて下さい。 (質問1) VBAで得意先コードが一致するものを読みたいです。 [表A.xls]に[表B.xls]の前月残高を読み込ませたい。 [表A.xls] 得意先コード | 氏名 | 前月残高 | ----------------------------------------------- 11121234 | 山川太郎 | 2000 | 131235432 | 山川次郎 | 500 | 113456789 | 山川三郎 | 0 | 12214321 | 山川四郎 | 20000 | 12119876 | 山川五郎 | 1500 | 137896543 | 山川六郎 | 0 | [表B.xls] 得意先コード | 前月残高 | ----------------------------- 11121234 | 10000 | 131235432 | 0 | 113456789 | 25000 | 12214321 | 0 | 12119876 | 5620 | 137896543 | 800 | [表A.xls]の前月残高をクリアして、 [表B.xls]の前月残高を読み込みたい。 【読み込み結果】 得意先コード | 氏名 | 前月残高 | ----------------------------------------------- 11121234 | 山川太郎 | 10000 | 131235432 | 山川次郎 | 0 | 113456789 | 山川三郎 | 25000 | 12214321 | 山川四郎 | 0 | 12119876 | 山川五郎 | 5620 | 137896543 | 山川六郎 | 800 | (質問2) その後、VBAで得意先コードの先頭2文字を指定して、 [表A.xls]から[表C.xls]を出力したい。 得意先コードは、8桁や9桁があります。 【得意先コードの先頭2文字を、例えば11と指定して出力した結果】 [表C.xls] 意先コード | 氏名 | 前月残高 | ----------------------------------------------- 11121234 | 山川太郎 | 10000 | 113456789 | 山川三郎 | 25000 |
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mitarashi
- ベストアンサー率59% (574/965)
Vlookupで試しにやってみました。 'マクロをA.xlsに記述し、B.xlsも開いているとします。 'データは共にSheet1にあるとします。 '両ブックのSheet1のA列を文字列に変換し、後始末していません。 Sub test() Dim targetRange As Range, refRange As Range Dim wbk As Workbook Application.ScreenUpdating = False With Workbooks("B.xls").Sheets("Sheet1") Set refRange = .Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp)) 'vlookupや、オートフィルタで誤動作するので、A列を文字列に変換 change2str refRange.Columns(1) End With With ThisWorkbook.Sheets("Sheet1") Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)).Resize(, 3) change2str targetRange.Columns(1) targetRange.Columns(3).FormulaR1C1 = "=VLOOKUP(RC[-2],B.xls!" & refRange.Address(ReferenceStyle:=xlR1C1) & ",2,FALSE)" targetRange.Columns(3).Value = targetRange.Columns(3).Value End With targetRange.AutoFilter Field:=1, Criteria1:="=11*" Set wbk = Workbooks.Add targetRange.CurrentRegion.Copy wbk.Sheets("Sheet1").Paste wbk.SaveAs Filename:="C:\c.xls" Call wbk.Close(savechanges:=False) targetRange.AutoFilter Application.ScreenUpdating = True End Sub 'セル範囲を文字列に変換 Private Sub change2str(targetRange As Range) Dim myCell As Range For Each myCell In targetRange.Cells myCell.Value = CStr(myCell.Value) Next myCell End Sub