• 締切済み

エクセルでセルの検索2

前の質問(QNo.1122144)で説明が不十分だった為再度投稿致します。 エクセル2000で複数検索条件に当てはまるセルの個数を関数で処理したいのですが、何かいい方法はありますか? たとえば、 A列 日付(2004/12/11など) B列 状態(○or×) C列 会社名(A社など) D列 品番(123456789など数値or文字列) となっていて、 A列が「2004/12/11」でB列が「○」でC列が「A社」の条件を満たすD列の重複を削除した状態のセルの個数を知りたいなどです。 オートフィルターで絞り込んでD列の重複を削除したイメージです。この方法だとこの処理をした時のみは個数が解りますが、やりたいのは編集した時にこの処理が反映されるようにしたいのです。 宜しくお願いします。

みんなの回答

  • jindon
  • ベストアンサー率43% (50/116)
回答No.3

配列式になります。 F1:日付1 G1:日付2 H1:状態 I1:会社名 として、夫々2行目に検索条件を入力 J1:商品名個数 J2: =IF(COUNTA(F2:I2)=4,ROUND(SUM(IF((A2:A100>=F2)*(A2:A100<=G2)*(B2:B100=H2)*(C2:C100=I2),1/COUNTIF(D2:D100,D2:D100))),),"") として、Ctrl + Shift + Enter で確定します。 日付が F2 以降、且つ G2 以前 で 状態が H2 会社名が I2 の 重複した商品名を1とカウントした個数を表示 データ範囲を100行に設定しあります。 拡大する時は、式中全ての「100」を等しく拡大する必要があります。

-TOM-TOM-
質問者

補足

回答有り難う御座います。 早速試させて頂きました。 下記のデータで試した所うまく行きません。 なぜでしょう? 日付 判断 会社 品番 2004/12/11 × A社 123456789 2004/12/11 ○ A社 123456789 2004/12/11 ○ A社 987654321 2004/12/20 × A社 987654321 2004/12/12 ○ A社 123456789 2004/12/21 ○ B社 123456789 2004/12/11 ○ B社 123456789 2004/12/20 ○ B社 987654321 下記の条件で入力すると、1になってしまいます。 データ2・5行目がダブりで、3行目で答えは2になるはずなんですが・・・  日付1   日付2   状態  会社名 商品名個数 2004/12/11 2004/12/30  ○   A社    1 宜しくお願いします。

回答No.2

ワーク用のセルを使えるなら、データベース関数を使えば、出来るんじゃないかと思います。 具体的には、   A列 B列 C列 D列 1 日付 状態 会社名 品番 2 2004/1/6 ○ A社 a1234 3 2004/1/12 ○ B社 a1234 4 2004/1/12 ○ A社 a1234 5 2004/2/18 × B社 B2345 6 2004/2/19 × C社 B2345 7 2004/3/3 ○ A社 C4325 8 2004/3/3 ○ A社 C4325 9 2004/3/3 ○ B社 C4325 10 2004/3/15 ○ C社 a1234 11 2004/4/15 × C社 B2345 12 2004/4/15 × C社 B2345 というような表があるとして、 仮にF列からをワーク用のセルとして使用します。 F列 G列 H列 I列 J列 K列 1 日付 状態 会社名 品番 2 2004/1/1 ○ A社 a1234 2 1 3 2004/1/1 ○ A社 B2345 0 0 4 2004/1/1 ○ A社 C4325 2 1 F1には調べたい日付、G1には状態、H1には会社名を入力し、I列には品番を入力します。 この際、I列にはD列に入力される品番をすべて入力する必要があります(ここが難点ですが)。 それに併せて、F2、G2、H2以下も各1列目と同じデータを入力します(が、これは、F2セルを =F$1 として、あとはこの式をコピーすればいいでしょう)。 そして、I2セルには、 =DCOUNTA($A$1:$D$31,"品番",F$1:I2)-SUM(I$1:I1) と入力して、品番の数だけI3以下にコピーします。 ここで表示されるのは、重複した数です。 なので、次のJ列に =IF(I2>0,1,0) とI列が1以上なら1,0なら0を表示するようにして、最後にI列のSUMをとれば、題意の重複を削除した数が得られると思います。 また、この方法の応用として、F列とG列の間にもう1列追加して、そこを「日付」として、下のようなデータベースを作れば、特定範囲の検索も可能です。 F列 G列 H列 I列 J列 K列 L列 1 日付 日付 状態 会社名 品番 2 >2004/1/1 <2004/3/31 ○ C社 a1234 1 1 3 >2004/1/1 <2004/3/31 ○ C社 B2345 0 0 4 >2004/1/1 <2004/3/31 ○ C社 C4325 0 0 この場合は「2004/1/1」~「2004/3/31」の間で「状態」が○、「会社名」がC社の場合です。

-TOM-TOM-
質問者

お礼

回答有り難う御座います。 参考にさせて頂きます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

質問を理解したか心許ないですが(特に最後の1文の意味が取れない) (データ) 日付 記号 会社 品目 同一日同一品 2004/1/10 山本建設 a1123 0 2004/1/11 ○ 山本建設 a1113 0 2004/1/11 ○ 山本建設 a1113 1 2004/1/11 ○ 山本建設 a1114 0 2004/1/11 ○ 山本建材 b1122 0 2004/1/11 ○ 山本建設 b1123 0 2004/1/1 山本建設 b1124 0 2004/1/1 山本建設 b1124 1 2004/1/15 ○ 近藤組 c1234 0 2004/1/16 今井工事 c1235 0 2004/1/17 ○ 山本建設 c1236 0 2004/1/18 木村水道 c1237 0 2004/1/19 大川塗料 c1238 0 ------ E列を作業列として使う。同一日・同一会社名・同一品があれば1をセットする。 E2の式は =SUM(IF(($A$1:A1=A2)*($C$1:C1=C2)*($D$1:D1=D2),1,0)) といれてSHIFTとCTRLキーを押しつつ、ENTERキーを押す。 E2の式をE3以下に複写する。 ----- 件数を出したいところのセル(上記データの範囲以外のセルに =SUM(IF((DATEVALUE("2004/1/11")=A2:A14)*("○"=B2:B14)*("山本建設"=C2:C14)*(E2:E14=0),1,0)) といれてSHIFTとCTRLキーを押しつつ、ENTERキーを押す。 件数は3 1月11日の山本建設4件のうち、a1113は1件と勘定して 3件が答えです。

-TOM-TOM-
質問者

補足

回答有り難う御座いました。 説明が下手で申し訳ありません。 御陰様で何とか出来ました! また、日付を範囲(2004/1/11~2004/1/18)で計算する事は可能でしょうか?