エクセルのマクロ作成(集計)をお願いします。

複数のシート(表の仕様は異なる)から複数の条件に当てはまる項目の金額を月毎に集計シートに取り込むものです。
今回必要に迫られて作ることになったため、マクロをつかうのは初めてです。
詳しく説明など入れてくださると助かります。
そのまま使える回答をしていただいた回答者の方には500ポイント差し上げます。よろしくお願いします。
文字制限があるようなので似たような質問(1213974755)との違いを記載します。(詳細は回答へのコメントで)

~集計シート
      月     月       月(不連続の場合あり)    ・・・・・・
シート①「金額」を集計「金額」を集計 「金額」を集計・・・・
シート②   〃       〃      〃
シート③  〃       〃      〃
 ・
 ・
月が不連続の場合があることと項目を条件により変えて項目ごとの集計を取りたいため、集計シートに記載された項目(題名)、月を参照して、それと一致するものの金額の合計を他のシートより取り出せるようにしたいです。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/09/26 18:50:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:kzmmtsd No.1

回答回数12ベストアンサー獲得回数0

ポイント23pt

二つ方法があります。DGET関数を使用する方法、Vlookup関数を使用する方法です。

DEGT関数は(題名)、月のように複数の検索条件があるときに有効です。しかし、この場合は複数の該当データがある場合はエラーとなります。

Vlookup関数は一つの検索条件しかできませんが、複数の該当データがある場合一番最初のものが表示されます。

一つの検索条件しかできないので、題名と月を結合したセルを一つ作る必要があります。

<DEGT関数の方法>

<検索条件>

項目、月、金額

旅費、3 

<複数のシート>

旅費 1 1000

旅費 2 2000

旅費 3 3000

<集計シート>

=DGET("検索条件","金額", "データーベースの範囲")

DGET関数の説明

さはら組で算数の90点以上は誰?:エクセルの関数らくだ〜


<vlookup関数の方法>

1列目が旅費 かつ 2列目が月 という条件を1つにまとめるために、1列目と2列目を結合した1つの検索条件を作成し、それをVLOOKUPの条件にすれば、結果的に2つの条件で検索ができます。

一つの検索条件にまとめる方法は&を使用します。A1とB1をC1にまとめたいなら

C1にA1&B1としてまとめます。

それをvlookupの検索条件にすればよいのです。

=VLOOKUP(C1,"データーベースの範囲",列数,FALSE)

id:boolin

回答ありがとうございます。

条件に一致するデータの金額を合計して集計シートにまとめたいのですが、

回答して頂いた関数では、1つもしくは最初のものを見つけることしかできないのでしょうか?

2008/09/21 19:21:32
id:airplant No.2

回答回数220ベストアンサー獲得回数49

ポイント23pt

以前回答した者ですが、イメージが良くわかりません。


具体的な元データの仕様と、希望する出力結果を掲載しないと、中々答えることは難しいと思います。

特に「入力の表の仕様は異なる、複数の異なる条件」というのは、具体的にどのようなことになりますか?


コメントがオープンされていないようなので、先ずは回答に記載しました(質問文上はオープンしているように書いてありますが・・・)。

id:boolin

回答ありがとうございます。今回検索してこのサイトに辿りついたため、まだ使い方がよくわかってないので申し訳ありません。

表の仕様が異なるのはレイアウトが異なると言えばいいでしょうか?

たとえば表の一番上の見出しが

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関数でも試しているのですが、うまくいきませんでした。

2008/09/21 20:20:37
id:airplant No.3

回答回数220ベストアンサー獲得回数49

ポイント22pt

配列数式を使うことでできます。


まず、仕様はコメントを優先させて回答を記載します(質問とコメントの内容が違うみたいですので)。

●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のデータの集計が自動的に行われます。

id:boolin

回答有難うございます。また書き方が悪かったようです。集計シートは質問通り下記のようになります。

~集計シート

仕事111

      月     月       月(不連続の場合あり)    ・・・・・・

シート①「金額」を集計「金額」を集計 「金額」を集計・・・・

シート②   〃       〃      〃

シート③  〃       〃      〃

シート③

(条件を満たす物)

 :

 :

Sheet1・・・の表はairplant の書いてもらったとおりです。

集計シートにはD、E、Fなどは必要ありません。

シート①~・・・は取引先の業種別で集計シートでは行項目(シート①、シート②)で区別しています。

集計シートの列項目で月、行項目で業種別・さらに細かな分類(シートの中でさらに条件で絞ったりします。)となります。

そして、集計シートの仕事の部分と月の部分を書き換えた時にそれに対応した結果で出るようにしたいです。

2008/09/24 21:17:04
id:airplant No.4

回答回数220ベストアンサー獲得回数49

ポイント22pt

要望事項は、集計シートの次のように変更すれば、表示されます。

基本は、配列数式でいいので、前回とやり方そのものは変わっていません(足し算していたところをばらした。複数の月で表示されるようにした)。

配列数式が理解してもらえたかどうかが不安です。


  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,""))}
  • id:kzmmtsd
    回答したものです。ピントはずれの回答でした。すみません。
    ところで、DSUMでもうまくいかなかった理由はなんですか?これが分かれば回答しやすいと思います。
  • id:boolin
    回答有難うございます。
    DSUM関数ではうまく条件を絞った結果が出力されませんでした。
    ためしに別の簡単な表をやったときにDSUM関数を使えたのでやり方は間違ってないとは思うのですが・・・
  • id:airplant
    結局うまくいかなかったということでしょうか?
    お役に立てなくてすみませんでした。
  • id:boolin
    コメント遅くなり、すみません。airplantさんのおかげでうまくいきそうです。
    今、複雑な条件のもので苦戦しているので、ここで引き続き質問しようと思っていたのですが、時間切れのためか
    質問が終了してしまいました。
    約束通り500ポイント差し上げたいのですが、初めてなのでどうやるのかわかりません。
    お手数おかけしますが、そちらも教えていただけますでしょうか?
  • id:airplant
    うまくいきそうとのこと、良かったですね。
    質問は、コメント欄で引き続きいいですよ。

    ポイントのほう、別に結構です。もし、贈ってもらえるのであれば、自分のはてなのポイント管理へ行って、右上の「ポイント送信」から、送信できます。

    http://www.hatena.ne.jp/point
    (ログインして操作します)
  • id:airplant
    多くのポイントありがとうございました。
    うまくいかない点、書き込んでいただければ、引き続き回答します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません