• ベストアンサー

Excel 2つ以上の異なる列で異なる条件が一致する個数

たとえばA列のバックでC列の未着が一致する行数をカウントする方法がわかりません。 Excelに詳しい方誰か教えていただけないでしょうか? =SUMPRODUCT((A1:A10="バック")*(FIND("未着",C1:C10))) この関数を指定してみたのですが、#VALUEでエラーを返してきます。 サンプルデータ バック 1001 到着 箱 1002 タグ未着 箱 1003 タグ未着 キャリア 1004 現在調査中 バック 1005 転送中 箱 1006 未着不明 バック 1007 到着 箱 1008 到着 キャリア 1009 到着 バック 1010 到着

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

  • ベストアンサー
回答No.9

これでどうですか? <バック:未着> =SUMPRODUCT(($A$1:$A$65536=$E2)*ISNUMBER(FIND($F$1,$C$1:$C$65536))) <箱:未着> =SUMPRODUCT(($A$1:$A$65536=$E3)*ISNUMBER(FIND($F$1,$C$1:$C$65536))) <キャリア:未着> =SUMPRODUCT(($A$1:$A$65536=$E4)*ISNUMBER(FIND($F$1,$C$1:$C$65536))) <バック:到着> =SUMPRODUCT(($A$1:$A$65536=$E2)*ISNUMBER(FIND($G$1,$C$1:$C$65536))) <箱:到着> =SUMPRODUCT(($A$1:$A$65536=$E3)*ISNUMBER(FIND($G$1,$C$1:$C$65536))) <キャリア:到着> =SUMPRODUCT(($A$1:$A$65536=$E4)*ISNUMBER(FIND($G$1,$C$1:$C$65536)))

Kohta01
質問者

お礼

ありがとうございました。簡単な表を作成して使用して動作確認後、実際のデータに置き換えたところうまく動作しましました。 ありがとうございます。 関数の奥深さを感じました。

その他の回答 (8)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.8

No5 merlionXXです。 > 部分一致の項目がうまくカウントされませんでした。 No5で回答した式 =SUMPRODUCT((A1:A10="バック")*NOT(ISERROR(FIND("未着",C1:C10)))) は、そのままコピペしていただけば部分一致でもカウントするはずです。(「Shift」+「Ctrl」+「Enter」を押す必要はありません。) No5に画像を添付しておきましたが式の部分が切れましたので、再度貼ります。 ただし、質問で提示のデータには「バック」で「未着」がなかったので2番目と6番目の「箱」を「バック」に変えてあります。

Kohta01
質問者

お礼

なぜかゼロになる私のExcel。 コピペしてみたのですが・・・・・ もう一度チャレンジしてみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

こんばんは! 色々回答が出ていますが・・・ 確かにNo.2のasapinya様の回答でもちゃんと動作しますね! 他の方法の一例ですが・・・ ひと手間かかりますけど、作業列を使うやり方です。 ↓の画像のようにD列挿入して D1セルに=COUNTIF(C2:C2,"*未着*") と入力してオートフィルで下へコピーします。 次に「品名」がバック・「状態」が未着を含んでいる物を表示させたいセルに =SUMPRODUCT((A2:A11=A2)*(D2:D11=1)) としてみてはどうでしょうか? 考え方としては判り易いと思います。 以上、参考になれば幸いですが、 的外れの回答なら読み流してください。m(__)m

Kohta01
質問者

お礼

Counfifでフラグを立てて、その数をSUMPRODUCTで計算するのはわかりやすいですね。 これでちょっとチャレンジしてみます。 別のシートにデータを引っ張り出して、そこで計算かけてみます。 ありがとうございました。

  • asapinya
  • ベストアンサー率36% (40/109)
回答No.6

2度目の書き込みです。 一通り目を通させていただきましたが、いずれの回答も問題なく動きますよ。 それでも「うまくカウントされない」とのお答えですが、配列数式はどのように入力されていますか? 「関数の挿入」は使わないでくださいね。基本的にすべて「手」入力です。 確定に「Enter」を押していませんか?もし押していたらそれは間違いです。 何度もお答えがあるように、式を入力し終えたら「Shift」と「Ctrl」を同時に押したまま「Enter」で数式を確定してください。 それでのダメな場合、元の表に問題があるかもしれませんね。 シンプルなデータを入力した表を使い、まずは試してみてください。

Kohta01
質問者

補足

おはようございます。 手打ちで[Ctrl]+[Shift]+[Enter]を押ってしながら、配列数式にしたのですが、カウント数が0となってカウントされていないようなのですが、表をチェックしてみます。 コピーして貼り付けてやっても見たのですが、やっぱり0になります。 実際のデータを計算すると14件あるはずなのですが・・・・ 簡単な表を作成して、もう一度トライしてみます。ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

Find関数を使っているということは完全一致ではなく、「未着」を含むものを検索したいのですよね? ならばこれでいかがでしょう? =SUMPRODUCT((A1:A10="バック")*NOT(ISERROR(FIND("未着",C1:C10)))) でもバッグじゃなくバックなんですね、ご提示の例をバッグでやって0になり、あせりました(笑)

Kohta01
質問者

補足

ありがとうございます。上記の条件でやってみましたが、うまくカウントされませんでした。 部分一致の項目がうまくカウントされませんでした。 "が付いていたので、バッグに見えてしまいましたね。すみません。

noname#204879
noname#204879
回答No.4

》 =SUMPRODUCT((A1:A10="バック")*(FIND("未着",C1:C10))) 》 この関数を指定してみたのですが、#VALUEでエラーを返してきます。 貴方の気持ちは分かりますが、「(FIND("未着",C1:C10))」の部分が間違ってます。「未着」を含まないセルが #VALUE を返すので、上式もそうなるのです。 =SUMPRODUCT((A1:A10="バック")*NOT(LEN(C1:C10)=LEN(SUBSTITUTE(C1:C10,"未着","")))) ただし、この式は 0 を返します。なぜなら、お示しの「サンプルデータ」では未着のバッグは存在しないから。

Kohta01
質問者

補足

ご指摘の通りバックで未着がないですね。すみません。サンプルデータを取得するときにそこまで気が回っていませんでした。 関数が難しすぎて、意味を理解するのが大変ですね。 関数使いこなせるとほんといろいろなことができるんですね。

回答No.3

=SUMPRODUCT(($A$2:$A$65536="バック")*($C$2:$C$65536="到着")) 上記の式の結果は「3」となりますが、こういう意味でよろしいのでしょうか?

Kohta01
質問者

補足

最終的にA列とC列に記載されている文言の部分一致するものの行数を確認したいと思っています。 文言は、関数に直接入力ではなくできればセルの内容を参照したいと考えています。("*"&I4&"*")のようにできればうれしいのですが・・・・

  • asapinya
  • ベストアンサー率36% (40/109)
回答No.2

配列ならこんなんでいかがでしょう? {=SUM(IF((A1:A10="バック")*(C1:C10="未着"),1,0))} 普通には入力できないので =SUM(IF((A1:A10="バック")*(C1:C10="未着"),1,0)) を入力したあと[CTRL]+[SHIFT]+[ENTER]です。 他の方法としては、オートフィルタを使って「SUBTOTAL」関数で表示項目をカウントするのも良いかと思います。 =SUBTOTAL(3,A1:A10) とかですかね。 この方法のほうが商品が変わっても使えるし良いかも。

Kohta01
質問者

補足

ありがとうございます。このやり方でもうまくカウントできないんですよ。 やっぱりフィルター使うほうが便利ですかね。 できればフィルターを使わない方法を考えているのですが・・・・

回答No.1

配列数式ですか? であれば「Shift」+「Ctrl」+「Enter」押しましたか? ちょっと方法は違いますが、フィルタを設定し「A列 箱」と「C列 未着を含む」で抽出して その数は範囲選択して数える というのをマクロ記録しておいて、ボタンに登録するという方法はいかがでしょうか? 普段はフィルタを設定しなくても そこからマクロを記録しておけば 勝手にフィルタを設定する所から始めてくれるし、その方が良いのでは?

Kohta01
質問者

補足

自分が質問することで、いろいろな方から配列数式など新しい単語を教えてもらえて、ほんと勉強になります。 配列数式という言葉を知らなかったのですが、調べてみたらこの方法に該当します。 マクロも考えたのですが、リアルタイムに変化する情報をいかにビジュアル化するかということで悩んでいまして・・・・ アクセスなどで管理することも考えたのですが、現場ではExcelが一番使いやすいと・・・・ もう少し悩んでみます。 ありがとうございました。

関連するQ&A

  • EXCELで2つ条件で1つが部分一致のとき

    Excelの2003バージョンです。 現在使用しているファイル名「会社」シート名「支社」のセルE12に 同じシート上のD12(同じ行ですね)と ファイル名「埼玉」シート名「データ」のA列の中の値と一致(完全一致)して なおかつ、シート名「支社」のF3の値(例・後1、後2)とシート名「データ」の C列の値(例・後1 第23号)と部分一致をした時に 使用中シート「支社」のE12に●、していない時は空白にしたいのです。 ファイル「会社」シート名「支社」 行数 --A列----B列----C列-----D列----E列----F列---- 1                             11223344  (ここに関数)  後1 ファイル「埼玉」シート名「データ」 行数 --A列----B列----C列-----D列----E列----F列---- 10   11223344         後1 第23号  11   11223344         一般会社 第44号  のような場合はE1に●になるようにしたいのです。 それ以外は空白で。 あまり詳しくないので、よろしくお願いします。

  • 期間を検索条件に含む場合の一致するセルの個数の求め方

    A列にはカレンダーの1週目なら1、2週目なら2… B列には日付(1/1, 1/2, …, 12/30, 12/31) C列には"A", "B", "C"…などの文字列 「1/1~1/31までの」「2週目の」「"OK"」とあるものはいくつか、というのを求めたいのですが、Excel2000や2002などでも編集できるようにするためSUMPRODUCT関数を使おうと思っています。この「期間」を検索条件に入れるにはどういうふうにすればいいのか教えてください。 『1/1~1/31までの2週目の"A"とあるのはいくつか?』 これを出そうと、 =SUMPRODUCT((A1:A500=1)*(C1:C500="A"))まではわかるのですが、期間の部分がわかりません。 これ以外に他に利用できそうな関数があればぜひ教えてください。

  • エクセルで文字列の個数を数える

    ある範囲のエクセルデータから決まった文字列の個数をカウントする関数の使い方が判れば教えてください。 例えば、A1からH200までのデータより、”リンゴ”という文字列が何個あるかカウントしたいのですが。 COUNTIF(A1:H200,"*リンゴ*")とすると”リンゴ”という文字列が含まれるセルの個数は出たのですが、”リンゴ”という文字列が複数含まれるセルもあるので、”リンゴ”という文字列の個数とは 一致しないようなのです。 どなたか、よろしくお願いします。

  • 列ごとの数値の一致と不一致を調べるVBAについて

    画像のように各列ごとにランダムな数値が入力されています。この時に各列ごとに同じ数値が入っているかいないかを調べたいのですが、どのようにプログラムを作ればいいかわからなく質問しました。 画像の内容としては、列Aのセル中の数値と列Bのセル中の数値は一致しないのでB15セルに"1" 列Aのセル中の数値と列Cのセル中の数値は『66』が一致するのでC15セルには何も入力せず というように D15セルは列Aと列Dの一致、不一致の結果 C16セルは列Bと列Cの一致、不一致の結果 D16セルは列Bと列Dの一致、不一致の結果 D17セルは列Cと列Dの一致、不一致の結果 を入力できるプログラムがあれば教えていただければ幸いです。よろしくお願いします。

  • 2つの条件が一致するもカウント

    D2:D1000 のセル内の "A" と、J2:J1000 のセル内に何か文字が入力されているものの2つの条件が一致するカウント値を求めたいのですが、 下記では、"*" が無視されているようで、値は 0 になってしまいます。"*" は使用できないのでしょうか? それとも、「何か文字が入力されているもの」は、"*" では表現できないのでしょうか? =SUMPRODUCT((D2:D1000="A")*(J2:J1000="*"))

  • 文字列AかBを含むセル数をSUMPRODUCT関数で求める場合

    文字列AかBを含むセル数をSUMPRODUCT関数で求める場合 エクセル2000です。 A1:A10のセル範囲だとして =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1) とすると、同一セルにA、Bの両方があった場合、重複してカウントされてしまいます。 重複を除外するために、 =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1)-SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*ISNUMBER(FIND("B",A1:A10))) と、重複してカウントされた数から両方が存在するセルの数を減じて求めましたが、以下のようなより簡素な式でも求められことがわかりました。 =SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1) この式でなぜAB両方があるセルが重複カウントされないのかどうもわかりません。 ご教示いただければ幸いです。 なお、SUMPRODUCTではなく =SUM(COUNTIF(A1:A10,{"*A*","*B*"}))-SUM(COUNTIF(A1:A10,{"*A*B*","*B*A*"})) でもできることは存じておりますが、今回はSUMPRODUCTの疑問として質問いたしました。

  • 複数の条件が一致する合計。

    複数の条件に一致する合計を求める方法には、 =SUM(IF(A1:A10="○",IF(B1:B10="○",C1:C10,0),0)) とセルに入力し、Ctrl+Shift+Enter =SUMPRODUCT((A1:A10="○")*(B1:B10="○")*(C1:C10)) があると思うのですが、このそれぞれの範囲の部分を列全体で指定したいんです。 ですが、A:Aのようにするとエラーになるし、A1:A65536にすると計算(再計算)にすごく時間がかかります。 SUMIFだと列全体を指定してもすぐ計算(再計算)されるのですが、条件が複数になったときでも列全体を指定できてすぐ再計算される方法はないですか?

  • エクセルで前方一致のVlookupはできませんか

    * すぐに回答を! エクセルで前方一致のVlookupのような関数はないでしょうか。 具体的には、A列とB列にデータがあり、A列のデータの文頭部分の文字列が B列のデータのどれかと一致した場合に、C列に一致したB列のデータを返したいです。 データの行数が非常に多い(3,4万行)であるため、できるだけ動作の軽い 関数であればなお助かります。 A          B           C zzzfewfe      dadaf         zzzf dadaf3233      a11111k        dadaf aabbbb-fefe3     zzzf         aabbbb a11111k33r3      aabbbb       a11111k 宜しく御願い致します。

  • エクセル 複数の条件に一致

    複数の条件に一致したセルの内容によって、別のセルに別の文字を自動で表示したいのですが可能でしょうか? 詳細はこのような形で、 【シート1】       A     B       C 1      0001     3/1    有 2      0002     3/1    無 3      0001     3/2    不明 【シート2】       A     B       C 1             3/1      3/2 2      0001       ○      △ 3      0002       ×     "空欄" ・シート2のB2からC3を自動で表示できるようにしたい。 ・シート1のA列とシート2のA列が一致、更にシート1のB列とシート2の1行が一致。 ・シート1のC列が「有」の場合「○」、「無」の場合「×」、「不明」の場合、「△」、「空欄」の場合、「"空欄"」と表示。 知りうる限りの関数を合わせてみましたが、できませんでした。 どなたかいい方法を教えて頂ければと思います。 環境はXPpro、エクセル2000です。 宜しくお願いします。

  • エクセル関数でセル個数検索で2つの条件が一致する行数を求める方法はあり

    エクセル関数でセル個数検索で2つの条件が一致する行数を求める方法はありますでしょうか? セル個数の場合=COUNTIF(A1:A50,"晴れ")でセル個数を求めますがB1:B50のセルに曜日が記入されているとしてA列の晴れとB列の日曜日が一致するセルが何回(何行)あるか求める関数はありますでしょうか?よろしくお願いします。ソフトはXPを使用しています。

専門家に質問してみよう