• 締切済み

エクセルの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  |

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

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

関連するQ&A

専門家に質問してみよう