• 締切済み

複数ブックを参照し、1つのシートに纏める方法を教えてください。

おはようございます。 下記にブックとシートの関係を書きますのでよろしくお願いします。 出張.xls(Sheet名:出張) (番)  (氏名)     (出張場所) 1  東京太郎      北海道 2  青森花子      青森 3  東京太郎 東京  :    :       : 精算マスタ.xls(Sheet名:精算マスタ) (コード)(場所)  (金額) 30001  青森   5000 30002  新潟   3000 30003  北海道 15000 30004  長崎   10000 30005  東京   3000  :   :    : 個人マスタ.xls(sheets名:個人マスタ) (氏名)    (担当者コード) 青森太郎   50001 青森花子   50002 東京太郎   50003  :      : 印刷用シート.xls(sheets名:管理用シート) (担当者コード) (氏名)   出張金額  50001       青森太郎   18000                    ↑出張費用は「北海道」と「東京」の合計  50002       青森花子    5000 出張マスタの氏名と出張場所を取得し、それぞれ氏名で個人マスタより担当者コードを取得し、出張場所で出張金額を取得します。 また、出張.xlsに同一氏名が複数存在する場合には、精算マスタを場所で検索し、その合計を求めたいのです。 印刷用シート.xlsにマクロを組みたいのでよろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

マクロでなくても出来ました。 ブックが別は、テストデータが作りにくいので、別シートにしました。お許しあれ。もともと別ブックにしないで別シートにしたほうが良い。 データ例については、私の例の方がわかりやすいと思う。作成に時間ががかるが。 ーーー VBAでやる場合にガラット、ロジックを変えてコードを変える手もあるが、VLOOKUP、SUMIF関数、フィルタオプションもそのままVBAに置き換えられると思う。 例 Sheet4でSUMIFの例 Sub test01() Dim sh2 As Worksheet Set sh2 = Worksheets("Sheet2") Worksheets("Sheet4").Activate For i = 1 To 6 Cells(i, "D") = WorksheetFunction.SumIf(sh2.Range("A2:A10"), Cells(i, "B"), sh2.Range("C2:C10")) Next i End Sub 結果D列に 31000 12000 10000 9000 14000 これはC列と一致する。 ーー 例データ Sheet2 A列   B列   C列(関数の結果) 職員名 出張先 費用 山田太郎 北海道 15000 鈴木花子 青森 5000 山田太郎 東京 3000 田中歌子 盛岡 10000 近藤誠 山形 9000 山田太郎 仙台 8000 鈴木花子 福島 7000 鈴木茂 函館 14000 山田太郎 青森 5000 ーーー Sheet3 入力データ A列   B列 氏名 職員コード 山田太郎 50001 鈴木花子 50002 東京太郎 50003 田中歌子 50004 小島三郎 50005 野田健 50006 小森雄二 50007 鈴木茂 50008 近藤誠 50009 ーーー Sheet5 入力データ A列  B列   C列 コード 主張先 費用 30001 青森 5000 30002 新潟 3000 30003 北海道 15000 30004 長崎 10000 30005 東京 3000 30006 盛岡 10000 30007 山形 9000 30008 仙台 8000 30009 福島 7000 30010 函館 14000 --- Sheet4 A,C列は関数の結果 A列  B列  C列 職員番号 職員名 出張費計 50001 山田太郎 31000 50002 鈴木花子 12000 50004 田中歌子 10000 50009 近藤誠 9000 50008 鈴木茂 14000 ーー Sheet4のA,B列は Sheet4のA1:A10を範囲指定 データーフィルターフィルタオプションの設定 エラーが出てもOK 指定範囲 リスト範囲指定の斜め↑をクリック Sheet2!A1:A11を指定。 抽出範囲 Sheet4の$a$1:$A$13を指定 重複するレコードは無視する。 OK これでSheet4のB列が出来る。 A列は=VLOOKUP(B2,Sheet3!$A$2:$B$10,2,FALSE) の式を下方向に式を複写。 C列は =SUMIF(Sheet2!$A$2:$A$10,B2,Sheet2!$C$2:$C$10) と入れて下方向に式を複写する。 ーーー その前にSheet2のC列C2には =VLOOKUP(B2,Sheet5!$B$2:$C$15,2,FALSE) と入れて、下方向に式を複写する。 ーーー この質問はどうも丸投げの質問ですね。

  • YSNR-HRN
  • ベストアンサー率36% (40/111)
回答No.1

1、出張.xlsの(出張場所)の右にSUMIFまたはVLOOKUPで(金額)を表示。 2、印刷用シート.xlsの(氏名)に出張.xlsの(氏名)をフィルタオプションで重複しないように表示。 3、印刷用シート.xlsの(担当者コード)に個人マスタ.xlsの(担当者コード)をVLOOKUPで表示。 4、印刷用シート.xlsの出張金額に出張.xlsの(金額)をSUMIFで表示。 5、以上の操作を印刷用シート.xlsにマクロ記録で記録。 6、不必要なコードを削除。 7、マクロを動かしてみておかしいところを修正