先般からSUMPRODUCT関数について質問させていただいている者です。
今度の質問は、Excel2013を使い、以下の集計シートの○の部分を集計したいです。
<集計シート>
A列 B列 C列 D列
日付 1件 2件 3件以上
12/1 ○件 ○件 ○件 → 2件 3件 1件
12/2 ○件 ○件 ○件 → 1件 2件 0件
12/3 ○件 ○件 ○件
12/4 ○件 ○件 ○件
12/5 ○件 ○件 ○件
12/6 ○件 ○件 ○件
<データシート>
A列 B列 C列 D列 E列
日付 支店1 支店2 支店3 支店4
12/1 新宿支店 東京支店 品川支店 新橋支店
12/1 東京支店 上野支店
12/1 上野支店 新宿支店
12/1 新宿支店
12/1 品川支店
12/1 新橋支店 品川支店
12/2 新橋支店 品川支店
12/2 東京支店
上記のようなデータシートがあり、集計シートに件数を入れていきたいのですが、
毎度ながら手こずっています。
それぞれ、どのような数式が当てはまるか、ヒントをいただければ幸いです。
B2=
C2=
D2=
当方では、
D2=SUMPRODUCT((('データシート'!$A$2:$A$10000)=A2)*(('データシート'!$B$2:$B$10000<>"")+('データシート'!$C$2:$C$10000<>"")+('データシート'!$D$2:$D$10000<>"")+('データシート'!$E$2:$E$10000<>"")>=3)))
としてみましたが、うまく表示できません。
SUMPRODUCT関数について応用ができず、不甲斐ないのですが、ご教授のほど、よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
No3です
タイトルに「SUMPRODUCT関数で」とあったので、SUMPRODUCTでの回答例が良かったのかも知れませんね。
・・・ということで、作り直してみました。
No3とほぼ同じ内容ですが、SUMPRODUCT関数で書き直せば、こんな感じになると思います。
同じく、B2セルに
=SUMPRODUCT((データシート!$A$2:$A$10=$A2)*(COUNTIF(OFFSET(データシート!$B$2:$F$2,ROW(A$2:A$10)-2,0),"<>")=COLUMN(A1)))
※ ひとまず、範囲は2~10行目までの小さなものにしてあります。
検証に時間がかかってしまい御礼が遅れ失礼しました。
皆さんのご厚意に感謝しています。
ベストアンサーは悩んだのですが、こちらにさせていただきます。
有り難うございました。
No.6
- 回答日時:
使う関数を限定するなんて無意味なこだわりですね。
「1件」の数なら
=SUM(N(MMULT((データシート!$A$2:$A$10=$A2)*(データシート!$B$2:$E$10<>""),{1;1;1;1})=1))
最後の「=1」のところを変えれば 他の件数も出るでしょう。
個人的には そもそもこれを数式だけで計算しようとすること自体が
どうかと思います。クエリで「支店1」~「支店4」をアンピボット
してから日付ごとにグループ化してカウントすれば 何てことのない
計算です。
d-q-t-pさま
コメントいただき、有り難うございました。
特別SUMPRODUCT関数を使用することに拘ったつもりはなく、
私自身がこの関数を使用すれば、この数式だけで完結すると思い込んでいましたので、
タイトルに書かせていただいただけです。
仰る通り、段階を踏んで計算すればできることでした。
No.5
- 回答日時:
No.2です。
>データシートのX列に"完了"または"予定"のフラグがあり、"完了"のみを抽出した場合・・・
今回も一気にやるのではなく、作業用の列を使う方法です。
↓の画像のように作業用の列をY列にしてみました。
作業列Y2セルに
=IF(X2="完了",A2&"_"&COUNTA(B2:E2),"")
という数式を入れています。
そして、「集計シート」のB2セルの数式も少し変わります(作業列が変わったため)
=COUNTIF(データシート!$Y:$Y,$A2&"_"&COLUMN(A1))
として隣りのC2セルまでフィル&コピー!
D2セルの数式が大幅に変わります。
D2セルは
=COUNTIFS(データシート!A:A,A2,データシート!X:X,"完了")-(B2+C2)
という数式になります。
前回同様、B2~D2セルを範囲指定 → D2セルのフィルハンドルで下へコピー!
これで画像のような感じになります。
※ SUMPRODUCT関数にこだわるのであれば、D2セルに使えます。
D2セルは
=SUMPRODUCT((データシート!A$2:A$1000=A2)*(データシート!X$2:X$1000="完了"))-(B2+C2)
といった感じでしょうか。
※ SUMPRODUCT関数は配列数式になりますので、極端に広い範囲を指定するのはおススメしません。
計算速度が大幅に落ちてしまいます。
とりあえず1000行程度の範囲にしていますが、5000行位ならストレスは感じないと思います。m(_ _)m
tomo04さんのご回答が、関数初心者の私としては一番わかりやすく、実用的な方法をご提示いただきました。
有り難うございました。
No.3
- 回答日時:
こんにちは
すでに指摘が出ていますが、SUMPRODUCT関数だけでなく関数を組み合わせる場合に、それぞれの部分で何を計算しているかをきちんと把握していないと望む結果にはなりません。
特に、配列計算の場合は1セルで複雑な結果を求められるというメリットはあるものの、式がそれ相応に複雑になるのと、内部的には無駄な計算を行うために負荷が大きくなるというデメリットがあります。
さらに、関数を組み合わせる場合、配列計算に対応している関数とそうでないものがあるので、結局、各々を確認しながら式を組まなければなりません。
例えば、下に例として挙げた式のうちCOUNTIFで計算している内容はCOUNTA関数で十分なはずの内容ですが、COUNTAだと配列計算をしてくれないので、敢えてCOUNTIFにしてあるといったようなことが起こります。
この計算の過程をそのまま作業列を利用して計算する方法を考えてみれば、一例として、No2様の回答のような方法が考えられます。
ご質問を見ると、No1様がご指摘のように式の内容を十分に理解することなく、関係のあるセル範囲を組み合させているように思われますが、一気に結果を求めようとせずに、まずは、結果を算出するまでの過程を分解して、作業列等を利用しながら順次算出してゆく方法をとることをお勧めします。
この考え方のメリットは、計算式が圧倒的にわかりやすくなることや、無駄な計算を減らすことができ負荷を軽減できることなどが挙げられます。
(作業列は非表示にするなどで、見た目は直接算出した場合と同じにすることもできます)
最後に、ご参考までに、ご質問内容に近い計算式を・・・
集計シートのB2セルに
=SUM(INDEX((データシート!$A$2:$A$10=$A2)*(COUNTIF(OFFSET(データシート!$B$2:$F$2,ROW(A$2:A$10)-2,0),"<>")=COLUMN(A1)),,))
の式を入れて、オートフィルします。
ただし、上式のままだと、B列には1件の、C列には2件の、D列には3件の・・・と順に数がカウントされます。
少し修正すれば、ご質問の内容になりますが、ヒントとしてここまでとしておきます。
fujillinさん
毎度お世話になっております。ご丁寧なコメント、本当に有り難うございます。
その通り、一気に結果を求めようとしていました。
「結果を算出するまでの過程を分解して、作業列等を利用しながら順次算出してゆく方法」
これが、一見回りくどいようですが近道なのだと理解しました。
当方、締め切りが迫っており、焦りもございましたので。。。これは言い訳です。
あと、ご参考としてご提示いただいた計算式では、OFFSETやCOLUMNといった
使用したことがない関数が並べられており、一度に理解不能でした。
これも、過程を分解していく中で得られるものなのでしょうね。
すぐに使いこなせるとは思えませんが、「これが理解できれば一歩進める」という気持ちになれました。
頑張ります!
まずは御礼申し上げます。
No.2
- 回答日時:
こんばんは!
質問文だと「集計シート」の12/2のC列(2件の列)は「1」ですよね?
一例です。
↓の画像のように作業用の列を設けてみました。
尚、「データシート」のB~E列には最低1つ以上のデータが入る!という前提です。
(A列にシリアル値があり、B~E列すべてが空白だとお望みの結果になりません)
「データシート」のF列を作業列とし、F2セルに
=IF(A2="","",A2&"_"&COUNTA(B2:E2))
という数式を入れ下へフィル&コピー!
「集計シート」のB2セルに
=COUNTIF(データシート!$F:$F,$A2&"_"&COLUMN(A1))
という数式を入れ、隣りのC2セルまでフィル&コピー!
D2セルには
=COUNTIF(データシート!A:A,A2)-(B2+C2)
という数式を入れ、B2~D2セルを範囲指定 → D2セルのフィルハンドルで下へコピーすると
画像のような感じになります。
※ 細かいエラー処理はしていません。m(_ _)m
tom04さん
コメント有り難うございました。
No.3の方がご指摘いただいておりますが、作業列を作成するなどして、過程を分解していくことが大事だと認識しました。
また、私のようなものに、わざわざ作業シートを作成されてご教授くださいまして恐縮です。
ぜひ参考にさせていただければと存じます。
なお、一点ついでながら質問させていただけますでしょうか。
私が提示したデータシートですが、こちらは抽出後のデータとなっていまして、たとえばデータシートのX列に"完了"または"予定"のフラグがあり、"完了"のみを抽出した場合のデータ集計を行いたい、というのが前提でした。
そういった事もあり、SUMPRODUCT関数を利用した方が良いのかな、と思ったのですがなかなか難しいですね。
No.1
- 回答日時:
そもそもSUMPRODUCT関数がどのようなことをするための関数かご存じないような質問ですね。
商品名 単価(円) 個数
バナナ 130 10
リンゴ 200 20
イチゴ 150 30
ミカン 120 15
のような表の合計の値段を求めるようなことをする関数です。
130×10
200×20
150×30
✚120×15
 ̄ ̄ ̄ ̄ ̄
こんな事をするために
SUMPRODUCT(単価の範囲,個数の範囲)
とするのです。
「単価」に相当する範囲に項目の有無を示す「1」か「0」、
「個数」に相当する範囲に何らかの条件の結果として「1」か「0」を入れれば、
”あり” ”なし” の判断ができ、”あり” の数だけを数えることができる、
…と、応用しているだけですね。
・・・
自分ならD2セルには、
(全体の数)-(「B2」+「C2」)
とするかな。
銀鱗さん
コメント、有り難うございました。
今回、初めてSUMPRODUCT関数に出会い、配列数式の難しい概念に頭を悩ませていました。
しかしご指摘のように私自身の基礎ができておらず、ご迷惑をおかけしております。
ネットで調べてみてはトライアンドエラーを繰り返し、この質問板で皆さんのお力をお借りしながら、
少しずつですが前進してきました。
今後ともよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 文字を増やしたい。
-
エクセルの計算
-
セルの内容表示が邪魔になる
-
Excel
-
Microsoft365に変えたのですが...
-
エクセル:一覧表に存在する文...
-
エクセルで日付を数字+アルフ...
-
エクセルでの作業計算方法について
-
エクセルで年休を管理する方法...
-
はがきについて。
-
【マクロ】その時、その時で変...
-
excelの不要な行の削除ができな...
-
Microsoft1Officeの互換ソフト...
-
エクセル関数を教えてください
-
Excel ピボットテーブルで日付...
-
【マクロ】読取専用のファイル...
-
【関数】適切な文字数の数字を...
-
時間によってファイル名が変わ...
-
ある列、或いは、ある行のセル...
-
UNIQUE関数が使えないバージョ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報