• ベストアンサー
  • すぐに回答を!

DSUM関数について

数式の計算がかなり重くなったので、質問させていただきます。 {=SUM(IF(("日付条件"$R$6:$R$10000>=$A$148)*("日付条件"$R$6:$R$10000<=$A$149)*("検索条件1"$Q$6:$Q$10000=A151)*("検索条件2"$M$6:$M$10000>0),"合計範囲"$O$6:$O$10000,""))} 配列数式で上記のような数式が大量にセルにあります。 日付で範囲を指定し、検索条件1で合計させています。 DSUM関数で可能だと思いましたが、数式の条件をうまく指定出来ません。 A列に検索条件1のデータが30個程入力されています。 日付範囲のデータは適当なセルに入力してあります。 上記の数式をDSUM関数にした場合、どのような数式になるでしょうか? ちなみにDSUM関数で処理した場合、動作は軽くなるでしょうか? どなたかご教授ください。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数1741
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • CoalTar
  • ベストアンサー率40% (705/1742)

まず、"日付条件"、"検索条件1"、"検索条件2"、"合計範囲" となっていますが、シート名のことでしょうか? 具体例など挙げてください とりあえず回答してみます =($R$6>=$A$148)*($R$6<=$A$149)*($Q$6=A151)*($M$6>0)*$O$6:$O$10000 を6行目の作業セルに貼り付け 10000行まで下へオートフィル 合計を出す。 計算速度はぜんぜん違います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • DSUM関数について

    エクセルを使っています。 DSUMの関数で検索条件に日付を使い抽出をしようとおもっってます。 しかし、その日付は他のシートから持ってきており、なおかつ「何日以降」の抽出(不等号)をしたいのですがどうしてもいい案が浮かびません。 やはり一度日付を貼り付けて条件にするしかないのでしょうか? 宜しくお願い致します。

  • DSUM関数について。

    DSUM関数をテキストを見て勉強したのですが、この関数の定義は”複数の条件にすべて合うデータを合計する”んですよね。”複数の条件"っていったいなんの条件なんでしょう?もちろんテキストを見てその通りやっていますので結果も当然合うのですが、これを使って自分でどんなときにつかうのかさっぱりわかりません。ちなみにこれってエクセル2級くらいになると出てくるのでしょうか?

  • DSUM関数で

        T 6=DSUM($A$3:$F$3000,6,W5:Y6) T6に上記の関数が入っています。 7=DSUM($A$3:$F$3000,6,W7:Y8) 8=DSUM($A$3:$F$3000,6,W9:Y10) 9=DSUM($A$3:$F$3000,6,W11:Y12) 7行目以降の条件の部分(W7:Y8)をオートフィルしたいのですがDSUM関数の仕様上可能ですか? 可能ならば、どのようにすれば良いですか? 10行目はW13:Y14となります。

その他の回答 (3)

  • 回答No.4
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんにちは。 >DSUMの使い勝手は思ったより悪いですね。 これらの関数が出現した理由はあるのですが、近年、あまり使われなくなってしまいました。SUMPRODUCTは、この場合は、配列を引数としますから、現在の数式と同じような問題が発生するはずです。 ここでは、SUMIF を利用するのか一番かと思います。 言い換えると、DSUM 関数のクライテリアになる数式を =AND(R6>=$A$148,R6<=$A$149,Q6=$A$151,M6>0) 空いた列に、データの最後の行までコピーして、SUMIF の条件に、TRUE, FALSE の出ている列を代入して、計算してあげます。 =SUMIF(数式の範囲,TRUE,合計する範囲) とすればよいと思います。VBAのユーザー定義関数を作ったとしても、配列数式よりも、10倍ぐらい計算は遅いです。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんばんは。 ご質問の配列数式は、Excel2003でも、Excel 2007 でも、無理があります。 データがあちこちあると、数式をまとめにくくなりますが、DSUM を使うということは、フィールド行(タイトル行)が必要です。 M$6:$R$10000 これが、データの範囲なら、これに、その手前の行、つまり5行目にフィールド行を付けて、その範囲「M$5:$R$10000」を、「Database」という名前登録をしてください。 =DSUM(Database,"フィールド名",B1:B2) 'フィールド名は、任意 クライテリア部分は、1行目を空欄にするのがコツです。 クライテリア部分(B1:B2)は、 B1 は、空欄 B2 に 以下のような数式を入れます。 =AND(R6>=$A$148,R6<=$A$149,Q6=$A$151,M6>0) A151 は、絶対参照にしてください。相対参照では、正しい答えが出ないはずです。この数式は、非常に微妙な部分がありますから、規則正しく入力しないと、うまく出せません。A151 の部分が、相対参照になるという根拠があるなら、この限りではありません。 なお、この種のものは、オートフィルタやフィルタオプションを使う方法もあるかと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

Wendy02さん ご回答ありがとうございます。 ご指摘の通り作成して、動作確認できました。 DSUMの使い勝手は思ったより悪いですね。 SUMIFとSUMPRODUCTの計算スピード(使い方にもよると思いますが) あまり変わらないものなのでしょうか?

  • 回答No.2
  • CoalTar
  • ベストアンサー率40% (705/1742)

No.1です ちょっと修正 =($R$6>=$A$148)*($R$6<=$A$149)*($Q$6=A151)*($M$6>0)*$O$6 >上記のような数式が大量にセルにあります。 どのくらいあるのでしょう?

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答ありがとうございます。 数式がわかりづらくてすみません。 sheet2にある数式でsheet1を参照しています。 "日付条件"、"検索条件1"、"検索条件2"、"合計範囲" は検索条件です。 {=SUM(IF((sheet1!$R$6:$R$10000>=$A$148)*(sheet1!$R$6:$R$10000<=$A$149)*(sheet1!$Q$6:$Q$10000=A151)*(sheet1!$M$6:$M$10000>0),sheet1!$O$6:$O$10000,""))} 数式はこのような状態です。

関連するQ&A

  • EXCELのDSUM関数で集計条件に日付を入れると数字が消える

        B列      C列     D列   E列      F列      G列 1行  日付      区分    金額   集計する条件 2   2000/1/1   A社   1000    区分     日付      日付 3   2000/1/10    B社    500   A社    >=2000/1/1  <2000/2/1 4   2000/1/15    A社    300    5   2000/2/5   A社     200    集計結果 6                        =DSUM(B1:D5,3,E2:G3) 上記のような表をEXCELで作成しました そのうちA社の1/1~1/31の金額をDSUM関数を利用して集計したく 上記のようにDSUM関数に引数を入力しました しかし集計条件が区分のみ(E2:E3)だとA社の2/5までの合計額1500が反映するのですが、日付を入れた途端に0になってしまうのです ちなみに、一例として日付→商品区分に直して日付の代わりに 「機械」「部品」といった文字を入力してみると ちゃんと条件通りの集計をしてくれます 日付の入力のしかたに間違いがあるのでしょうか? テキスト見ながらちゃんとやってると思いこんでるだけで 落とし穴にはまってるのだと思います 是非良きアドバイスをお願いします  

  • DSUM条件範囲の指定について

    DSUMの条件範囲の指定について、通常は、シートのどこかに、条件となる表(みたいなもの)を入力して、DSUM関数内の条件範囲の入力欄には、条件を入力した場所の範囲指定をしますが、直接、式の中に条件を書き込むことにより、シートには、条件になるような表(みたいなもの)を入力しないような方法はありますか? 例えば、家計簿のうち科目が雑費に該当するものの合計を知りたいときに、 DSUM(家計簿の表,"科目",xxx)において、xxxの部分に直接、「科目が雑費であることを示す条件式」のようなものを入力してしまうことにより、雑費の合計を出す方法です。表のどこかに条件を示す表(みたいなもの)を入力するのは、表の体裁上よくないからです。知っている方、教えてください。ないかもしれませんが。

  • エクセルのDSUM関数について

    =dsum(データーベース、フィールド、条件) の条件のところにいれたが反応せず、ただ”フィールド”の列を合計したものがかえってきてしまうのですが。 =DSUM(C59:E90,E90,C114:E115) C59 D59 E90 分類 媒体 金額 行の90までデーターが入っています。 C114 D114 E114 分類 媒体 金額 行の114まで条件が入力できるようになっています。 分類・媒体・金額の部分はセルを2行結合しているのですが、条件の部分もセルを結合しています。 フィールド名が結合したセルだとDSUMはつかえないのでしょうか?

  • 関数 DSUMについて

    簡単にわかりそうなことなんですが、いろいろ考えてみてもわからないので教えてください。 DSUMで空白セルの行を検索して他の列の数字を合計したいのですが、どのようにすればいいのでしょううか?

  • 関数内のセルの範囲を他のセルから取得する方法

    教えてください。 関数内のセル名を他のセルから取得することはできるのでしょうか? 例えば、B列の合計を求めるSUM関数であれば A1セルに関数を記述 =SUM($B$x:$B$y) A2セルに範囲(上記式のx)を指定  1 A3セルに範囲(上記式のy)を指定  10 これにより、B列のB1~B10の合計を求める。 といった感じです。 ※実際に使用したい関数は、SUMではありません。 よろしくお願いします。

  • DSUMの時のCriteria範囲のうまいコピー方法

    言葉だけでうまく質問できるか分かりませんが、困っているので何とか質問してみます。 DSUM等の頭にDが付く関数では、検索条件を設定する場合標題と条件とで2行を使いますので、【例】のように1行毎に別のエリアに関数を入力して結果を表示させようとすると、その1行に対して2行の検索範囲ができてしまうことになります 【例】 (1)結果表示セル1行目 ⇒ 検索条件セル1~2行目 (2)結果表示セル2行目 ⇒ 検索条件セル3~4行目 (3)結果表示セル3行目 ⇒ 検索条件セル5~6行目 この場合、結果表示セル1行目に入力した関数を2行目以降にコピーすると、2行目の検索条件セルは2~3行目となってしまいます。 ※今までは1行毎に範囲を手入力していました。。。(^^; これを【例】のような形でコピーする方法はありませんでしょうか? これができると作業がとてもはかどります。 アドバイスよろしくお願いします。

  • DSUM 関数

    お世話になります。 DSUM関数での集計がうまくいきません。  K       L        M 1 曜日    品種    人時計 2 木      89 3 金      40      12.00  木      78  火      47      4.00 火      47      17.00  水      74  木      31      11.50  木      31      18.00  木      47      3.00  木      05      7.00  木      78  金      03      3.15  金      05      14.00 上記のような1か月分のデータから曜日毎の人時を集計しようとしています。 曜日は離れた列にある日付を表示形式(aaa)にかえています。   R       S         T 1  曜日      品種     人時計 2                DSUM(K1:M110,M1,R1:S2)  と数式を入れ S2に品種のみを入力するとT2に計算しますが R2に曜日を入れるとT2は必ず0になります。 どうしてでしょうか?

  • Excel2013のDSUM関数について

    Excel2013でDSUM関数を実行したところ、結果に0と表示されて正確な値が表示されません。関数の書式、範囲指定には間違いがなく、他のブックでは正常に機能します。

  • アクセス クエリ DSum関数

    testテーブル 日付     金額 2009/04/30  1 2009/05/01  2 2009/05/02  3 2009/06/30  4 このデータを元にクエリを作成して 4/1~5/30までの合計を新フィールドに表示させたいです。 日付     金額   4,5月合計 2009/04/30  1      6 2009/05/01  2      6 2009/05/02  3      6 2009/06/30  4    (表示なし) としたいのですが 4,5月合計: DSum("[金額] ","test",[日付]>=#2009/04/01# And [日付]<=#2009/05/30#) とすると 日付     金額  4,5月合計 2009/04/30  1     10 2009/05/01  2     10 2009/05/02  3     10 2009/06/30  4   (表示なし) となってしまいます。 「2009/4/1~2009/5/30のレコードに金額の合計を表示させる」のではく、 「2009/4/1~2009/5/30の金額の合計を表示させる」 にはどうすればいいですか? 表示についてはIIF関数で対応できると思っています。 よろしくお願いします。

  • オートSUMとVLOOKUP関数の組合せについて

    エクセル初心者に毛が生えた程度の者です。半日費やしましたがどうしてもうまい方法が見つからないので質問させてください。 =SUM(セル(1):セル(2))に関して、セル(1)とセル(2)ともにVLOOKUP関数などを用いて参照セルの条件を設定し、オートSUMの範囲を条件による可変式にしたいのですが、セル(1)、セル(2)に用いる関数が分かりません。 VLOOKUP関数を用いると、[=SUM(セル(1)+セル(2))]は出来ますが[=SUM(セル(1):セル(2)]は「数式が正しくありません」となってしまいます。VLOOKUP関数は数値を引用するので、オートSUMで合計することは出来ないのは分かるのですが… ご教授のほど、よろしくお願い致します。