• ベストアンサー

エクセルで着日ごとのシートを発送日ごとに集計したいとき・・・

エクセルで着日ごとに次のようなシートをつくっています。9月なら1日から30日までの30枚のシートになってます。      店舗名  商品A 商品B 発送日   東京百貨店  10   5   9月1日  京都百貨店  15   3   9月2日  店舗によって発送日が違うので、何月何日発送でどこに何を何個送ったらいいかを把握したいと思っています。新規シートに“統合”を使って、集計した表を作り、その表を発送日の昇順で並び替え、発送日ごとの商品集計をだすというマクロを登録してみたのですが、この方法だと、発注が新たに追加された時に、データの自動更新がされないので・・・(+_+) 他に効率のいい方法はないでしょうか?      

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

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

プログラムはある時点でのデータで結果を出すだけ、が基本。 データを変化させたら、それを反映させるというのは、それに備えて、複雑な仕組みが必要。WinなどのOSはそれをはじめから、対処する機能を組み込んでいるから、そういうことができるもの。 エクセルの関数はデータが変わるごとに、使用全関数再実行という、資源の過度使用で 即時反映性を保っているようだが、本件では関数では、式が複雑になりすぎると予想。 (1)データが変化したら(Change)というイベントプロシージュアーでは動きが、重くなったりすると思うので (2)人間の操作が介在する、Clickイベントに関連づけるのはどうでしょう。 コマンドボタンをシートに1つ貼り付け、Captionはたとえば「更新」とする。 Private Sub CommandButton1_Click() End Sub の中に、今ある、「統合を使ったマクロ」のSub,End Subを除いた部分を コピペ。 (3)さらにブックのCloseイベントにも、同じものを入れておくとよいかもしれない。

ki3519
質問者

お礼

ありがとうございます。簡単なマクロぐらいしか登録したことがなく、VBAはくわしくないんですが書いてくださったようにやってみます。 ただ、発送日とかで統合をかけると、日付をシリアル値で合計してしまい、総合してでいた発送日が可笑しくなってしまうんですが、これを回避する方法ってあるんでしょうか?

その他の回答 (3)

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

#1の補足について >発送日とかで統合をかけると、日付をシリアル値で合計してしまい、総合してでいた発送日が可笑しくなってしまうんですが 下記やってみました A1:D4 発送日 店舗名 商品A 商品B 9月1日 東京百貨店 10 5 9月2日 岡山百貨店 15 3 9月2日 京都百貨店 21 8 F1:I5 発送日 店舗名 商品A 商品B 9月2日 東京百貨店 10 5 9月3日 岡山百貨店 15 3 9月5日 京都百貨店 21 8 9月5日 福岡百貨店 21 8 「統合の基準」で「左端列」を使わざるを得ないから、A、F列に発送日を移動した。(この辺が問題では) 統合結果 発送日 店舗名 商品A 商品B 2005/9/1 10 5 2005/9/2 46 16 2005/9/3 15 3 2005/9/5 42 16

  • jyamamoto
  • ベストアンサー率39% (1723/4318)
回答No.3

no.2です。 >・・・あつかう仕事の性質上、どうしても着日ごとに一枚づつシートを作成しなくてはならないんです。 「どうしても」という理由がもうひとつ理解できませんが・・・、どうしても初期入力を「着日」ごとにシート分けが避けられないのであれば、 「入力用のシート(またはブック)」と、「データ蓄積用のシート(ブック)」を分けて作成準備し、「入力用のシート」にマクロを組み込んで、毎日データ入力完了後マクロ操作で「データ蓄積用のシート」へデータを自動複写してしまうことですね。 その上で、必要な加工データは「データ蓄積用のシート」からピボットテーブルで抽出するようにしてはいかがでしょうか。 要は、データを蓄積した「データベースファイル」を中間において、「入力用ファイル」と「出力用ファイル」を別に持ってシステムを構成させる考え方です。

  • jyamamoto
  • ベストアンサー率39% (1723/4318)
回答No.2

着日ごとにシートを分けている理由は何なのでしょうか? エクセルは簡易な「データベース」ソフトでもある訳ですから、できるだけ一つのシートにデータを蓄積して、必要であれば一定条件で抽出したデータを別シートに保存するという考え方で使用される方が良いと思います。 それぞれのシートに「着日」のデータ列を挿入して、各シートの全データを移動もしくはコピーでひとつのシートに集約されることをお勧めします。 そうしておけば、「ピボットテーブル」と言う機能を利用して、「着日」でも「発送日」でも「店舗名」でも好きな条件のデータを自由自在に抽出できます。 悩んでいるより、それが一番早くて効率的な方法だと思います。

ki3519
質問者

お礼

解答いただいてありがとうございます。 店舗名もたくさんあり、そのデータを使う人間も複数で、あつかう仕事の性質上、どうしても着日ごとに一枚づつシートを作成しなくてはならないんです。 一枚で管理できたら、ピボットテーブルが使えるんですが・・・(>_<)

関連するQ&A