• ベストアンサー

EXCELでの表のコピーについて

現在 各営業所からの日報(メールでやり取り)を、本部報告用に再度1枚の用紙に転記して報告しています。各営業所の営業実績を関数を使って自動的に1枚の用紙にコピーしたいのですが無理なのでしょうか?  上手く説明できないのですが例えば   (営業所名)(担当者名)(販売商品名)(金額) 1枚は(渋谷) (山田)  (○○商品) (5)                        1枚は(青山) (鈴木)  (××商品) (7)                         を10ヶ所の営業所からそれぞれ送ってもらって 1枚の用紙に自動的に転記する方法です。 実績がない場合は報告が無く、集計用の用紙には早く報告して来た先から報告書の上から埋めて行きたいのですが・・(-_-;)  初心者ですので意味が判って頂けるか心配です。

質問者が選んだベストアンサー

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

#3です。 #3の(1)に当たる部分のVBA・マクロを上げます。 Sub Macro1() fn = Array("", "aa3.xls", "aaa.xls") sn = Array("", "渋谷", "青山") Application.DisplayAlerts = False For i = 1 To UBound(fn) Workbooks.Open Filename:="C:\My Documents\" & fn(i) Range("A1:C9").Select Application.CutCopyMode = False Selection.Copy Windows("aa2.xls").Activate Sheets(sn(i)).Select Range("A1").Select ActiveSheet.Paste Windows(fn(i)).Activate ActiveWindow.Close Next i Application.DisplayAlerts = True End Sub 本番に合わせて、補正が必要ですが、VBAの知識が 少し必要ですので、旨く本番で動くまで行けるか心配ですが。 (1)sn=(・・・)の行の()内に営業所名(漢字で可)をあるだけ"と"で囲んで、カンマで区切って追加すること。 上記は渋谷、青山2営業所だけの例になっています。 (2)営業所の順番に「必ず対応して」、fn=(・・・)のかっこ内は、営業所と対応した順番位置に、添付されて送られてきたブック名を"と"で囲んで追加し増やすこと。それぞれ半角で「.xls」を添えること。上記はたまたま私がテストで使ったブック名で必ず変える必要があります。 (3)"aa2.xls"の所は、総括ブックのブック名で置き替えること。半角で「.xls」を添えること。 (4)総括ブックの中には、(1)で(・・)内に入れた 営業所名と同じシート名のシートを用意しておくこと。 (5)Range("A1:C9").Selectの部分は、データの入っている最大限(各営業所、各報告日を通して最もデータが多いと予想される範囲)の範囲に変えて下さい。 (6)#3と同じく、使いやすくするには、コマンドボタンを総括ブックに貼りつけ、クリックすると実行されるようにする必要があるでしょう。 (7)もしマクロの利用を諦めるなら、 他ブックよりデータを引っ張ってくるのは、総括ブックの受けるセル側で、=[aa2.xls]sheet1!A1のように入れるとデータを取れます。この応用を考えて見られては。 本件のような、ビジネス用のミニ・ミニシステムみたいなのを作ろうとすると、やはり上記ほどのものになるのは避けられないと思いますが。

その他の回答 (3)

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

補足ありがとうございました。 2段階に分けましょう。 (1)メール添付ブックのSheet1を集計ブックのシート名 渋谷、青山、神田、新橋・・と言うシート名のシートにコピーする段階。(送られてくるのはブック単位であって、シート単位ではありません。) (2)集計ブックのシート名渋谷、青山、神田、新橋・・ というシートにデータが集まって、シート名「総括」のシートにデータを寄せ集める段階。この後シート名「総括」のシートのデータを加工・集計などして、整えるのが、通常ケースですが、それは無いと言うことで。 ----- (2)を行うマクロを紹介します。下記例でテストができたので、上げます。 (総括シート) 営業所 担当者 商品 数量 (渋谷シート) 営業所 担当者 商品 数量 渋谷 大田 あ 5 渋谷 山田 う 7 渋谷 川田 え 2 (青山シート) 営業所 担当者 商品 数量 青山 大田川 さ 7 青山 山白 ふ 1 青山 川上 わ 3 (神田シート) 営業所 担当者 商品 数量 神田 大田川 だ 2 神田 山白 れ 4 (プログラム) Sub test01() Dim sh As Worksheet j = 2 For Each sh In ThisWorkbook.Worksheets ' MsgBox sh.Name If sh.Name = "総括" Then Else d = sh.Range("a1").CurrentRegion.Rows.Count ' MsgBox d sh.Activate sh.Range(Cells(2, 1), Cells(d, "j")).Copy Worksheets("総括").Activate Sheets("総括").Cells(j, 1).Select ActiveSheet.Paste j = j + d - 1 CutCopyMode = False End If Next End Sub (結果) (総括シート) 営業所 担当者 商品 数量 渋谷 大田 あ 5 渋谷 山田 う 7 渋谷 川田 え 2 神田 大田川 だ 2 神田 山白 れ 4 青山 大田川 さ 7 青山 山白 ふ 1 青山 川上 わ 3 (注意) 営業所の日報以外のシートをおかないこと。 上記VBAの実行方法については下記。 (VBA実行方法) 総括シートを開いた状態でALTキーを押しつつ「F11キー」を押す。 VBEの画面になるので、ALTキーを押しつつ、I(挿入)更にM(標準モジュール)を押す。出てきた画面に 上記を貼りつける。そしてF5(実行)キーを押す。 (総括表にボタン) 総括表にコマンドボタンを貼りつけ、クリックすると 上記VBAプログラムを務実行するようにする方法は、本で勉強するか、希望を出してください。 長くなるので、ひとまず・・。

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

私の経験知識不足もあり、詳細状況が捉え難いので、他の回答を頂けそうな方のためにも、質問させてください。 スモールなミニ・システムのような本件のような質問は、OKWEBで質問回答をやり取りするのは難しいと思うし、解決もVBA・マクロを駆使しないと難しい ように思いますが。 (1つ1つ補足してくださるとありがたいですが。 今までの中には、一部しか答えて頂けない方がいましたのでよろしく。) (1)電子メールでエクセルファイルを添付ファイルとして本社へ送って来る。 (2)本社へ到着した状態では、1つのBookの1つのSHeetに売上報告データが記録されている。 各営業所からのデータは一旦別ブックになっている。1営業所だけなら、内容は1シートに収まる内容である。 (3)それを、集計ブックの1シートに、現在はデータのある範囲を手作業でコピーしている。 または到着営業所別にデータのあるシート1枚を、集計ブックにコピーしている。 (4)各営業所から到着した報告書は同一フォーム(項目数、項目名も同じ)。 但し販売商品名数=行数は、数が多い営業所と少ない営業所とあるのか、行数は同じで、0記入されるのか。 (5)実績無しで送ってない営業所があり得る。 (6)まとめは集計ブックの1枚のシートにしたいのでしょうが、どのようにしたいのでしょうか。 各営業所から来る、販売商品名の明細は集計シートに転記したい(残したい)のでしょうか。 (7)(営業所名)(担当者名)(販売商品名)(金額)     渋谷    山田    AA商品   5      渋谷    山田    BB商品   8      渋谷    山田    CC商品   3     渋谷    山田    DD商品   4    のように続くのでしょうか。 (8)まとめた結果     (営業所名)(担当者名)(販売商品名)(金額)     渋谷    山田    AA商品   5      渋谷    山田    BB商品   8      渋谷    山田    CC商品   3     渋谷    山田    DD商品   4     青山    大田    HH商品   1     青山    大田    II商品   2     神田    小田    KK商品   3     新橋    中田    BB商品   6   ・・・・・     渋谷合計              20     青山合計               3     神田合計               3     新橋合計               6     営業所合計             87  (9)商品別合計は出すのですか。                    

pappy2002
質問者

補足

有難うございます。 (1)・・・EXCELシート1枚のみ添付されて送られてきます。(2)・・・各営業所1枚だけです。(3)・・・添付ファイルを開いて、手元の報告用EXCELシートに、コピー→貼り付けを行ってまとめています。(4)・・・各営業所から来るシートは同じもので統一しています。(本部報告シートと同じですが、別になっても構いません)形式は、(7)の様に販売できた内容を送って来るだけで、無い場合0とかはありません。(5)・・・実績が無い場合は、添付シートはありません。(また、報告が無い場合も実績無しとして本部報告しています。)(6)(7)(8)・・・(7)の様なEXCELシートを、自動的に(8)の様に1枚にしたいのです。コピー→貼り付けの作業を止めたいのです。営業所毎の集計とか商品別の合計なども必要ありません。 例えば、今、本部報告シートの3行を渋谷で使いました。次に青山から来ましたので、1行使いました。(昨日は、最初に新橋で1行使いました。次に神田で2行使いました)と言うような事を自動的に出来るようにしたいのですが、かなり難しいのでしょうか?よろしくお願いいたします。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.1

関数よりもマクロの出番のような気がしますが・・・ 改行がうまくいかなかったようですね。 また(5)と(7)の部分がちょっとわかりづらいようです。アタシの補足欄を使って書き直されたらいかがでしょ?

pappy2002
質問者

補足

早速有難うございます。 (5)と(7)は金額の項目なんです。マクロですか?(-_-;)良く判らなくてすみません。

専門家に質問してみよう