【最大10000ポイント】当たる!!質問投稿キャンペーン!

いつもお世話になります。今回もよろしくお願いします。
現在1つのシートに
表A:
ロット  日付  処理数  板数…
 ab   1/4   1000   2
 ab   1/5   2800   2
表B:
日付  良品  不良1  不良2  使用機…
1/5  1000   10    15    4
1/5   900   8     5    2,3
1/6  2500   20    13    2
というようなデータが、1月~現在まで、機種ごとに数シートにわたって入力されています。(表AとBは、横並びになっています。)このデータを別シートに必要な箇所のみ日付ごとに集計し、下記のようにAとBを一つの表にまとめたいのです

日付  機種  板数  良品  不良1  不良2  使用機
1/4   101   2
1/5   101   4   1900  18    20    2,3,4
1/5   102   12  …   
1/5   103   20  …
1つネックなのが、各機種で稼働日が統一でない点です。ある機種は完全週休2日、他は日曜も稼動したりしています。
自分で考えたやり方としては、各機種ごとに集計シートを作り、表Aで一度、データ→集計(日付ごと)にして、コピーしておき、表Bで同様に集計し、コピーする。その後別シートに日付作成しておき、日付を基準としてVLOOKUPでもってこないといけないのかな?と思っています。

ですが、この時面倒なのが、使用機が同日付内に数機使った場合、重複しないように書き出したいので、結局は全てのデータを目で確認しないといけません。しかも、10機種以上あるので、今後全ての機種を毎月この作業をするのは手間がかかりすぎてしまいます。

これをなんとか簡単に、できればVBAで持っていける方法はないものでしょうか。

わかりにくいと思いますので、不明な点は補足させていただきます。お手数がよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは(^^)


少し整理させてください。まず、データベースは、機種別シートの中に表Aと表Bがある状態ですね。たとえば、Accessなどのデータベース管理ソフトでこれを作成する場合は、表Aと表Bは別テーブルで、あるフィールド(列)をキーとして、関連づけさせることになります。集計を行う場合、まず、複数のテーブル(表)の中からキーとするフィールドを決めて、集計に必要なフィールドを集め、統合した新たなテーブルやフォームを作ることになりますが、この作業はクエリーという機能を使って進めると便利でしょう。

まず、データを統合してから、ピボットテーブルで集計されるとスムーズに行くように思われます。ただ、統合がややこしいかもしれません。

新しいシートを立ち上げ、[データ]>[外部データ取り込み]>[新しいデータベースクエリ]とします。データベースタブのExcel Filesを選択>[OK]>データベース名で、ファイルを選択>[OK]
ここで、ファイル内の各Sheetがエクスプローラスタイルで表示されますので、統合するテーブル選択します。表示されない場合は表の作り方に問題がありますので、元のファイルの表を少し変更する必要があるかもしれません。ふつう、フィールド名が先頭行にきていれば認識してくれます。また、表A,Bは同一シート内にあるので、同一テーブルと見なされますね。できれば、どちらかをいったん別シートにコピーするなりして、そのシートを参照したほうがいいでしょう。
フィールド名がすべて表示されますので、統合・集計に必要なものはすべて選択して[>]>[OK]、おそらくクエリーを使って編集する旨のメッセージが出ますので、[はい]または[OK]とすると、MicrosoftQuelyが立ち上がります。(もしかするとMicrosoftQuelyは標準インストールでインストールされなかったかもしれないので、入っていなければ、追加削除で追加しておいてください。)リレーションシップウインドウに、それぞれのテーブルのフィールド名が表示されていますので、日付をキーとする場合は、”日付”をドラッグして、一方のウインドウの"日付"から他方ウインドウの"日付"に重ねてください。これで、MicrosoftQuelyを閉じると、日付をキーとする新しいテーブルができます。このテーブルを、ピボットテーブル集計にしたら良いと思われます。また、この操作はマクロに記録できます。

普段使い慣れていない機能を使うことになると思われます。他の回答でもっと良いものが出るかもしれませんが、チャレンジしてみてはいかがでしょう。説明は長文ですけど、各操作の詳細はヘルプで調べてみてください。
    • good
    • 0
この回答へのお礼

TTakさん、いつもありがとうございます。
そか、VBAにこだわる必要はないんですね!ピボットテーブルは初めて使うので時間かかるかもしれませんが、頑張ります!
わからなければ、またお願いします。
ありがとうございました。

お礼日時:2003/05/16 11:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelで日別に入力されたデータを月別に集計するにはどうしたらいいのでしょうか。

Excelで月別の集計をしたいのですが
例えば
  日付    数量
10月25日  200
10月27日  150
10月30日  120
11月 1日  200
11月 3日  150
のように、日付が飛び飛びで連続していなくい日々の数量を、上の行から順番に入力していった場合に(月が替わる行が決まっていない)月別の集計を取る方法はないでしょうか。


 

Aベストアンサー

どのように集計する月を指定するのかが書かれていませんが、例えば11月分の合計を出したいなら

1)11月までの合計から10月までの合計を引く方法
 =SUMIF(A:A,"<=11/30",B:B)-SUMIF(A:A,"<=10/31",B:B)

2)月が「11」のB列を合計する方法
 =SUMPRODUCT((MONTH(A2:A100)=11)*(B2:B100))

なども考えられます。

でもエクセルなら一番オーソドックスな方法はピボットテーブルでしょう。C列に
 =TEXT(A1,"YYYY/MM")
で「2008/11」のような文字列を生成しておいてピボットテーブルで集計すれば、シート上にある全ての月の合計が一発で求められます。
ピボットテーブルの使い方はGoogleなどで検索したらたくさん見つかります
http://www.viplt.ne.jp/tomy/pibot.html

Qエクセルで特定の列にある日付データの中から、指定した日付範囲を抽出する方法を教えてください

例えばこんなデータなのですが、

2002/07/01 99 25 36
2002/07/05 55 33 25
2002/08/01 80 20 51

日付の入っている列を検索して、2002/07/01から2002/07/31
の範囲ならば、その行のデータを別のシートに抽出したいのですが、
日付の範囲は関数でどうすればよいのか分かりません。ACCESSなら
between 9999/99/99 and 9999/99/99って感じで簡単にできるの
ですが。。。エクセルの関数だとIF関数の論理式にAND関数を使って
>=2002/07/01
<=2002/07/31
と入力したので、2002/07/05ならば、いずれもTRUEなので、値を返して
くれると考えたのですが、なぜかダメでした。
(↓こういう入力をしました)
=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

Aベストアンサー

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

------------余談--------------------------
ご質問の条件例の場合特例で 2002/7でればOKなので

=IF(TEXT(Sheet2!A1,"yyyym")="20027",Sheet2!A1,"該当月ありません")

でも可能ですね!

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

--...続きを読む

Qエクセルで日別データを週別に集計したいのですが。

エクセルで日別データを週別に集計する方法を教えてください。

【日別データ】
  3/02(日) 10
  3/03(月) 20
  3/04(火) 50
  3/05(水) 50
  3/06(木) 30
  3/07(金) 10
  3/08(土) 10
  3/09(日) 20
  3/10(月) 40
  3/11(火) 20
  3/12(水) 10
  3/13(木) 30
  3/14(金) 10
  3/15(土) 40
    ↓
【週別データ】
  3/02-3/08 180
  3/09-3/15 170

行列関数を使用したのですがどうも上手くいきません。
よろしくお願いします。

Aベストアンサー

関数を使わなければいけませんか?
ピボットテーブルのグループ化の機能を使えば簡単ですよ。

(仮に日別データの列タイトルを日、数値として)
ピボットテーブルを作成します。
日を行タイトルとして、数値をデータエリアにセットすると、日別の集計表になります。
そして、ピボットテーブル日の列のどこでもいいですから
右クリックしてグループとアウトラインの設定→グループ化と選びます。
そして、開始日付を、例の場合だと3/2として、日数を7日でグループ化する設定とします。
そうすれば、自動的に週単位にグループ化された集計表が出来上がります。

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qエクセル関数で同じ日付の合計を出す関数を作りたいです。

エクセル関数で同じ日付の合計を出す関数を作りたいです。


以下のような表があります。

<Sheet1>
     A      B
1  2010.08.21  4500
2  2010.08.15  300
3  2010.08.15  -600
4  2010.08.15  -1100

これを使用して、

<Sheet2>
     A      B
1  2010.08.29   0
2  2010.08.21   4500
3  2010.08.15   -1400


という具合に、B1~B3に、Sheet1の合計を表示させたいです。

もちろん、簡単でよいなら、それぞれsheet1を見て、手打ちで該当するものに
たとえば、Sheet2のB3なら、=sum(Sheet1!b2:b4)ですむと思うですが、

転写させて、毎回自動的に結果を得られるようにしたいのです。


具体的には、
Sheet2のA列の日付をキーにして、
Sheet1のA列とマッチしたもののBの合計を求めたいです。
(説明べたでごめんなさい)

Vlookupやmatch関数などで試してみたんですが、
いまいちうまくいきませんでした。

エクセルに詳しい方、回答お待ちしております。

エクセル関数で同じ日付の合計を出す関数を作りたいです。


以下のような表があります。

<Sheet1>
     A      B
1  2010.08.21  4500
2  2010.08.15  300
3  2010.08.15  -600
4  2010.08.15  -1100

これを使用して、

<Sheet2>
     A      B
1  2010.08.29   0
2  2010.08.21   4500
3  2010.08.15   -1400


という具合に、B1~B3に、Sheet1の合計を表示させたいです。

もちろん、簡単でよいなら、それぞれsheet1を見て、手打ちで該当する...続きを読む

Aベストアンサー

こんにちは!

SUMIF関数が使えますね。

Sheet2のB1に

=SUMIF(Sheet1!A:B,Sheet2!A1,Sheet1!B:B)

と入れて、B2とB3にコピーしてください。

QSUMIF関数で、条件に日付範囲で指定するには?

SUMIF関数で、条件に日付をいれたいのですが、
10日毎の範囲で集計を取るにはどうすればいいでしょうか。

A列に日付、B列に数値で
=SUMIF(A:A,"【2013/9/1~2013/9/10】",B:B) 
こんな感じで日付の部分が問題のところです。

date関数を入れてみると例えば9/3だけなど、一日だけの計算はできたのですが…
1~10,11~20、21~末日(31日)で合計するにはどう記入すればいいでしょうか。

Aベストアンサー

こんにちは。

2013/9/10までを求めて、2013/9/1以前を引けば答えが出ます。
=SUMIF(A:A,">=2013/9/10",B:B)-SUMIF(A:A,"<2013/9/1",B:B)

どうでしょうか。


人気Q&Aランキング