- ベストアンサー
エクセル:シートを参照して別のシートをコピーしてくる
様々な組み合わせで販売する商品について、エクセルで表をまとめています。 ある完成品のシートに記載された部品の品番を参照して、その部品のシートを完成品のファイルにコピーしてくるという作業(各完成品のファイルを作り、完成品の1シートとその部品の複数シートをそこにまとめる)をしたいと思っているのですが、データが大量で手作業が大変です。 完成品ファイルおよび部品ファイルには、1シートあたり1完成品 or 1部品の情報が記載されています。 完成品ファイルおよび部品ファイルの、セルB1およびシート名にはその完成品または部品の品番がタイトルとして書かれています。 完成品のシートのA列(A4から下)に部品の品番が記載されているのですが、完成品によって使用する部品の数は異なるため行数は様々です(最大20行くらい)。 以上の説明で足りるか分かりませんが、どなたか頭の良い方、作業を簡単にする方法をご存知でしたら教えていただけ無いでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
エクセルでもマクロを使えばそう難しい処理でもないです。 以下 ・コードは部品ファイル側に設置する ・完成品ファイルがアクティブな状態で起動する ・完成品ファイルには、当初、品番が記載されているシートのみ存在する。 ・品番が記載されている部分は"A4:A30" ・品番が記載されている部分は、空白であることはあっても、品番以外の情報が記載されることはない。 ・部品ファイルに、記載された品番のシートが必ず存在する。 とします。 動作の概要 現在アクティブなブックの、最初のシートの、A4:A30の範囲の値それぞれについて、 コードが記載されているブックの、同名のシートを、 現在アクティブなブックの最後尾にコピーする。 Sub Sample() Application.ScreenUpdating = False Set 完成品ファイル = ActiveWorkbook Set 部品ファイル = ThisWorkbook Set 構成シート = 完成品ファイル.Sheets(1) Set 構成表 = 構成シート.Range("A4:A30") For Each 品番セル In 構成表 If 品番セル.Value <> "" Then 部品ファイル.Sheets(品番セル.Value).Copy _ after:=完成品ファイル.Sheets(完成品ファイル.Sheets.Count) End If Next 品番セル 構成シート.Select 構成シート.Range("A1").Select Application.ScreenUpdating = True End Sub やっつけ気味ですが、Excel2003で一応動作確認済 サンプルなので変数の定義を端折ったり日本語変数使ったりしてます。
その他の回答 (1)
- shinkami
- ベストアンサー率43% (179/411)
これはExcelの世界ではありません。Accessを試されては ACCESSでは3個のマスターテーブルと1個のデータテーブルを作成してテーブル間の関連付けをして基本的なシステムは完成です マスターテーブル 1.完成品テーブル:完成品ファイル 2.部品テーブル:部品ファイル 3・組み立てテーブル:完成品シートの明細行(部品名と各所要数量) データテーブル 1.生産計画テーブル
お礼
ありがとうございます。 ただ今回は完成品のみで10,000件くらいあるので、Accessでの関連付けが大変そうでした。明細行を1つずつ指定するのに時間が掛かってしまいそうです。もう少し作業が単純で人間の判断がいらないものであれば自動化出来るのですが... またPCにAccessをインストールしなければならず、ちょっと面倒な様でした(会社のPCなので、電算部にインストールの手続きをしなければなりません…せっかく回答して戴いたのにこちらの事情ですみません)
お礼
ありがとうございます。 自分が期待していた方法に近いです。VBAやマクロが出来る人がうらやましいです。 特定ファイルをアクティブにしてマクロを実行し、それを繰り返していく作業であれば自動化できると思うので、欲しい資料が完成させられそうです(以前に別の質問でキーボードマクロを教えていただいたので)。