• 締切済み

複数ブックを参照し、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/17068)
回答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、マクロを動かしてみておかしいところを修正

関連するQ&A

  • Excel2003:開かれていない複数ブックより、検索キーを含むシートをコピーしてくる方法

    Excelのマクロについてです。全く手がつけられないのでお知恵を拝借願えませんでしょうか。 あるシートに記載された検索キーをもとに複数ブックを検索し、そのデータを含むシートを拾い出すという作業を考えています。 あるレコード(数は10~50程度)に格納された文字列を複数ブックにわたって完全一致検索し、その文字列が含まれるシートを逐一拾ってくる(コピーしてくる)というマクロを考えています。 <状態> レコードが入ったシート"C:\サンプル住所.xls"の内容: シートは一枚(シート名:検索元) セルD5 東京都港区 セルD6 青森県青森市 セルD7 東京都港区 セルD8 北海道足寄町 セルD9 福岡県北九州市 レコードはすべて文字列です。この例では5つですが、レコード数は1~多くても50くらいの間で変動し、同じ文字列が複数回出現することもあります。セル結合はありません。 検索先であるデータベース(以下"DB")は下位ディレクトリ(Prefフォルダ)に各都道府県のブックを放り込んであります: C:\Prefs\北海道.xls C:\Prefs\青森.xls C:\Prefs\宮城.xls (以下続く) これら各ブックはシート1枚のみの構成で、セル結合はありません。またデータの重複はありません。なおブックの総数は47都道府県分とは限らず、検索内容によって変動します。 <目標> "DB"内に"東京都港区"が存在するかどうかを検索し、見つかったら"C:\サンプル住所.xls"の最後に該当シートを追加。見つからなかった場合は空白シートを追加。どちらの場合もシート名は連番&検索キーとします。 これをレコードの数だけループさせ、検索されたシートがぎっしり詰まったブックを完成させます。 つまり、完成後のシートは左から以下のように並びます。 検索元 > 1_東京都港区 > 2_青森県青森市 > 3_東京都港区 > 4_北海道足寄町 > 2_大阪府大阪市 検索の導入部分としてダイアログを出しDBのディレクトリを選ぶところや、シート名をつけなおすあたりはさすがに何とかなるのですが・・・ ワークシート関数でしたらそれなりに使えるのですが、ブックをまたいだ作業はどこから手をつければいいのか皆目わからず。 ポインタやヒント、サンプル等、ご教示頂けると大変助かります。 自分でどこまで組み立てたのか?の思考の過程すら提示できずお恥ずかしい限りですが、なにとぞよろしくお願いします。

  • 別シートを参照しNoを記入で氏名を返す

    大変お世話になります。 以下の様な表が別シートで作成してあります。   No 組    氏名   1 赤    太郎   2 ピンク  花子 そこで別のシートにNo2をインプットする事により”花子”という文字を自動入力させたい。 必要理由は表が大きく都度氏名を記入するのが面倒なのでNoで記入させたいのです。 宜しくお願いします。(EXCELの関数が良く解りませんので宜しくお願いします。)

  • 複数ブックにあるシートを1つのブック束ねるマクロを汎用的に改良したい

    【質問編です。回答#1に、元コードを掲示いたいます】 以下は、1つの新規ブックに、特定フォルダにある不特定多数の ブックのSheet1を次々と束ねるマクロで、別の掲示板で教わりました。 よく使うので、大幅に汎用性をもたせたいのです。 (要望1) 束ねた際に、シート名をブック名にセットしたい。 (例:C:\temp\に、Book1.xls、Book2.xls、Book3.xls とあったら、  束ねられたシート名はBook1、Book2、Book3をシート名) (要望2)CSVやTXTを束ねる場合、8行目のxlsをcsvに書き換えなければ ならないので、ここは、その都度ダイアログで聞いて欲しい。 (規定値にxlsが入力されたInputBoxとか、XLS、CSVを選択させるラジオボタン等。) (要望3)7行目の代わりに↓のような「フォルダの参照」ダイアログを表示し、 毎回7行目を書き換えないで済むようにしたい。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_120.html その他、このような仕様ならより汎用性が高いだろうと思われるもので 多機能化いただくのはとってもうれしいです。 どうぞ、よろしくお願い致します。

  • Excelの単一セルから結合セルへのコピー方法について

    お世話になります。 今、Aのシートには、   世帯主氏名   住  所   東京太郎    東京都渋谷区 神南・・   江戸花子    東京都渋谷区 神北・・  といったように入っております。これを  Bのシートに     世帯主氏名   住所   東京太郎    東京都渋谷区           神南・・   江戸花子    東京都渋谷区           神北・・   とAシートは、全て単一セル Bシートの   氏名の部分はセルを結合しており、住所は、   事情がって、2行に分けて作成したいので   すが・・   Bのシートの氏名のところに =BシートA1と   コピーをかけて、そのまま下へとコピーしよう   としたのですが、Aシートのデータが1つ飛び   に張り付いております。結合のためと思うので   すが、これを上手く貼り付ける、方法を教えて   ください。よろしくお願いします。     

  • シートの転記??について

    今、会社全体の利用者リストから担当者別リストを抽出しようとがんばっています。 シート1に 1 利用者名 担当者 電話番号・・・ 2 東京太郎  A  1111-1111 3 新宿花子  B  2222-2222 4 杉並二郎  A  3333-3333 5 板橋良子  C  4444-4444 6 渋谷三郎  C  5555-5555 といった感じで作ったものを担当者別に次のシート以降に拾いたいのですが、なにかいい智恵はないでしょうか?? 教えてください。 よろしくお願い致します。

  • vlookup関数と文字列の足し算

    こんにちわ。 別シート(Sheet2)に住所録を作成し、作成シート(Sheet1)にVlookupで住所等をひっぱってこようと思っています。 (住所録は「データ」として名前登録しています) Sheet2 郵便番号 住所   氏名1   氏名2 999-9999 東京都~ 山田太郎 山田花子 その際、別々のセルにある氏名(2名分)を表示させる計算式として =VLOOKUP(B3,データ,3,FALSE)&"様"&" "&VLOOKUP(B3,データ,4,FALSE)&"様" として下記のような結果を出しています。 山田太郎様 山田花子様 このとき、氏名2に名前が入っていないと、 山田太郎様 様 となってしまうのですが、この「氏名2に文字列が入っていないときは”様”を表示しない」ということはできるのでしょうか? どなたかご教示ください。 よろしくお願いします。

  • エクセルで、シート1のセルをシート2にコピーしたい

    エクセルのシート別のコピーについて教えていただけますでしょうか。 シート1のA列には、下記の通り、氏名、学校、住所、電話番号の順番に、並んでいるとします。 <シート1> A1 山田太郎 A2 学校 A3 住所 A4 電話番号 A5 山田花子 A6 学校 A7 住所 A8 電話番号 A9 山田みどり A10 学校 A11 住所 A12 電話番号 その情報をシート2の A列に、氏名だけを下記の通り、入力していきたいのです。 <シート2> A1 山田太郎 A2 山田花子 A3 山田みどり シート別のコピーは、 例えば、シート2のA1に「=Sheet1!A1」 と入力すれば、「山田太郎」と出てくることは知っています。 ですが、シート1の『氏名』だけをシート2に抽出していきたい場合、 どのようにすればよろしいのでしょうか? 『4セルずつ下』の『氏名』をシート1からシート2へコピーしたいです。 どなたか方法を教えていただけますと、とてもありがたく助かる思いです。 どうぞよろしくお願いいたします!

  • 条件によって参照範囲を変えたい。参照範囲が複数ある

    添付A~Dに正しい商品名が入っていないデータがあります。 それぞれ、商品の産地によって、商品コードまたは商品番号で管理されています。 青森と山梨は商品コード、愛媛と茨城は商品番号です。 商品コードと商品番号には、それぞれ別に正しい商品名が登録されているマスタがあります。 (G~HとJ~K) そこでE列に、産地によって、参照するマスタを変えながら、 正しい商品名を表示さえたいのですが、どのような式になるでしょうか。 ご教示お願いします。

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • EXCEL 時刻起動で複数ブックを1つにまとめる

    お世話になります。 私のデスクトップの[テスト]というフォルダに[東京支店集計.xls]というブックがあります。 [テスト]フォルダの中にさらに[個人別]というフォルダがあり、この中に下記の3つのファイルが置いてあります。 東京支店_田中.xls 東京支店_鈴木.xls 東京支店_山本.xls [やりたいこと] 毎日15:00になったら自動で上記3つのファイルを[東京支店集計.xls]に全データコピー貼り付けして[東京支店集計.xls]にデータを集約したいのです。 [東京支店集計.xls]には毎回全データ上書きしたいのです。 このとき個別の"東京支店_田中.xls"ブックなどは担当者によってフィルターなどがかけられている可能性があるため、集約時にはフィルターを取り除いた形で全データを貼り付けしたいです。 [個人別]フォルダ配下のファイルを集約する時、3つにのファイル名を指定するやり方でもいいですが、ファイルの数が増える場合もありますため、できれば[個人別]フォルダ配下のファイル全てコピー貼り付けする、という動作だと助かります。 私が考えているのは[東京支店集計.xls]にVBAで上記のファイルを集約するコードを作成して、15:00に起動して動かす、という流れなのかと思っております。 初心者のためVBAコードと時刻自動のセットの方法をご教授いただけすと大変助かります。 ★東京支店集計.xlsのファイルパス C:\Users\ユーザー名\Desktop\テスト\東京支店集計.xls ★個人別ファイルのファイルパス C:\Users\ユーザー名\Desktop\テスト\個人別\東京支店_田中.xls C:\Users\ユーザー名\Desktop\テスト\個人別\東京支店_鈴木.xls C:\Users\ユーザー名\Desktop\テスト\個人別\東京支店_山本.xls お手数をおかけしますが、どなたかお知恵をお借りできますでしょうか。 よろしくお願い致します。 環境 Excel2013 Windows7

専門家に質問してみよう