複数のシート(表の仕様は異なる)から複数の条件に当てはまる項目の金額を月毎に集計シートに取り込むものです。
今回必要に迫られて作ることになったため、マクロをつかうのは初めてです。
詳しく説明など入れてくださると助かります。
そのまま使える回答をしていただいた回答者の方には500ポイント差し上げます。よろしくお願いします。
文字制限があるようなので似たような質問(1213974755)との違いを記載します。(詳細は回答へのコメントで)
~集計シート
月 月 月(不連続の場合あり) ・・・・・・
シート①「金額」を集計「金額」を集計 「金額」を集計・・・・
シート② 〃 〃 〃
シート③ 〃 〃 〃
・
・
月が不連続の場合があることと項目を条件により変えて項目ごとの集計を取りたいため、集計シートに記載された項目(題名)、月を参照して、それと一致するものの金額の合計を他のシートより取り出せるようにしたいです。
二つ方法があります。DGET関数を使用する方法、Vlookup関数を使用する方法です。
DEGT関数は(題名)、月のように複数の検索条件があるときに有効です。しかし、この場合は複数の該当データがある場合はエラーとなります。
Vlookup関数は一つの検索条件しかできませんが、複数の該当データがある場合一番最初のものが表示されます。
一つの検索条件しかできないので、題名と月を結合したセルを一つ作る必要があります。
<DEGT関数の方法>
<検索条件>
項目、月、金額
旅費、3
<複数のシート>
旅費 1 1000
旅費 2 2000
旅費 3 3000
<集計シート>
=DGET("検索条件","金額", "データーベースの範囲")
DGET関数の説明
<vlookup関数の方法>
1列目が旅費 かつ 2列目が月 という条件を1つにまとめるために、1列目と2列目を結合した1つの検索条件を作成し、それをVLOOKUPの条件にすれば、結果的に2つの条件で検索ができます。
一つの検索条件にまとめる方法は&を使用します。A1とB1をC1にまとめたいなら
C1にA1&B1としてまとめます。
それをvlookupの検索条件にすればよいのです。
=VLOOKUP(C1,"データーベースの範囲",列数,FALSE)
以前回答した者ですが、イメージが良くわかりません。
具体的な元データの仕様と、希望する出力結果を掲載しないと、中々答えることは難しいと思います。
特に「入力の表の仕様は異なる、複数の異なる条件」というのは、具体的にどのようなことになりますか?
コメントがオープンされていないようなので、先ずは回答に記載しました(質問文上はオープンしているように書いてありますが・・・)。
回答ありがとうございます。今回検索してこのサイトに辿りついたため、まだ使い方がよくわかってないので申し訳ありません。
表の仕様が異なるのはレイアウトが異なると言えばいいでしょうか?
たとえば表の一番上の見出しが
sheet1 A B C D E
sheet2 A B C F G
sheet3 A B C H I
このようになっていてABCは共通の項目であり、他はそれぞれ別の項目となります。
それで、共通の項目(Aが仕事別、Bが月別、Cが金額とすると)
表の中から仕事が111で月が1月の条件にあうものの金額を合計して集計シートに書き込むようにしたいのです。
(条件はsheetの異なる項目(D,E,F,G‥)で絞る場合もあり)
仕事別に集計シートを作りたいので、集計シートの月を記入する欄に1月、仕事欄に111と記入したときに
それを参照してデータが入れ替わるようになったらいいなと思っています。
(1月のデータがない場合は0が記入されるようにしたいです。)
airplant さんが記載されていたDSUM関数でも試しているのですが、うまくいきませんでした。
配列数式を使うことでできます。
まず、仕様はコメントを優先させて回答を記載します(質問とコメントの内容が違うみたいですので)。
●Sheet1の内容(Sheet2の内容も類似で、DEFのセルは別内容)
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 仕事別 | 月別 | 金額 | D | E | F |
2 | 111 | 1 | 100 | |||
3 | 111 | 1 | 10 | |||
4 | 110 | 2 | 20 | |||
5 | 111 | 2 | 50 | |||
6 | 111 | 2 | 60 |
●集計シート
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 仕事別 | 月別 | 金額 | D | E | F |
2 | 111 | 1 | {=SUM(IF((Sheet1!A2:A20=A2)*(Sheet1!B2:B20=B2),Sheet1!C2:C20,""))+SUM(IF((Sheet2!A2:A20=A2)*(Sheet2!B2:B20=B2),Sheet2!C2:C20,""))} |
・C2のセルでは、端の{}を除いた分「=SUM(IF・・・~""))」までを入力して、Ctrl+Shift+Enterを押します。→自動的に周りが{}で囲まれます。→ こちらを参照
例では、Sheet1とSheet2を記載していますが、分かれたシートの数分を同じように記載してください。値は2行目~20行目ということで記載していますが、適宜変更ください。
・A2とB2の条件を変更すれば、条件に合致するSheet1とSheet2のデータの集計が自動的に行われます。
回答有難うございます。また書き方が悪かったようです。集計シートは質問通り下記のようになります。
~集計シート
仕事111
月 月 月(不連続の場合あり) ・・・・・・
シート①「金額」を集計「金額」を集計 「金額」を集計・・・・
シート② 〃 〃 〃
シート③ 〃 〃 〃
シート③
(条件を満たす物)
:
:
Sheet1・・・の表はairplant の書いてもらったとおりです。
集計シートにはD、E、Fなどは必要ありません。
シート①~・・・は取引先の業種別で集計シートでは行項目(シート①、シート②)で区別しています。
集計シートの列項目で月、行項目で業種別・さらに細かな分類(シートの中でさらに条件で絞ったりします。)となります。
そして、集計シートの仕事の部分と月の部分を書き換えた時にそれに対応した結果で出るようにしたいです。
要望事項は、集計シートの次のように変更すれば、表示されます。
基本は、配列数式でいいので、前回とやり方そのものは変わっていません(足し算していたところをばらした。複数の月で表示されるようにした)。
配列数式が理解してもらえたかどうかが不安です。
A | B | C | |
---|---|---|---|
1 | 仕事別 | 111 | |
2 | 月 | 1 | 2 |
3 | Sheet1 | {=SUM(IF((Sheet1!$A$2:$A$20=$B$1)*(Sheet1!$B$2:$B$20=$B$2),Sheet1!$C$2:$C$20,""))} | {=SUM(IF((Sheet1!$A$2:$A$20=$B$1)*(Sheet1!$B$2:$B$20=$C$2),Sheet1!$C$2:$C$20,""))} |
4 | Sheet2 | {=SUM(IF((Sheet2!$A$2:$A$20=$B$1)*(Sheet2!$B$2:$B$20=$B$2),Sheet2!$C$2:$C$20,""))} | {=SUM(IF((Sheet2!$A$2:$A$20=$B$1)*(Sheet2!$B$2:$B$20=$C$2),Sheet2!$C$2:$C$20,""))} |
回答ありがとうございます。
条件に一致するデータの金額を合計して集計シートにまとめたいのですが、
回答して頂いた関数では、1つもしくは最初のものを見つけることしかできないのでしょうか?