[[20170706173242]] 『countif で、特定の『文字列として扱っている数字』(きゅうり婦人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『countif で、特定の『文字列として扱っている数字』以外を数えたい』(きゅうり婦人)

想定して組んだ関数が、期待通りの効力を発揮しなかったので、ここで確認したく書込みさせていただきます。

COUNTIFでは、特定の文字列を数えたくないとき、『<>文字列』という風に条件指定すると思います。
純粋な文字列は、これで想定通りの動きをしてくれました。

しかし、「文字列として扱っている数字」に対しては、どうもうまく動かずに苦慮しています。
(セルの値を文字列として扱っているセルに入力した数字や、頭にアポストロフィをつけた数字など)

例えば下記のような表があったとします。

      A

1    90(文字列扱い)
2    91(文字列扱い)
3    92(文字列扱い)

このとき、

 =countif(A1:A3,"<>91")

と入力すると、答えはなにが返ってくるでしょうか。
私の感覚としては「2」が返ってくるはずなのですが、「3」が返ってきます。

なにか、指定のしかたがまずいのでしょうか。
どなたか、一緒にお考えいただけないでしょうか。
よろしくお願いいたします。

なお・・・本当に使いたいのは COUNTIFS なのですが、扱い方は基本的に同じと考えてよいですよね?

< 使用 Excel:Excel2010、使用 OS:Windows7 >


ほほー、面白いですね。確かに答えは2ではなく、3になってしまいました。
ちなみに、=COUNTIF(A1:A3,91) ならば1になるので、無条件カウントからこれを引けば、2を求められます。("91"でもOK)
(???) 2017/07/06(木) 18:14

 追記。
 =COUNTIF(A1:A3,"<>*91") にすると2が得られますね。 =COUNTIF(A1:A3,"<>91*") でも2。でもこの条件だと、391とか912とかまで該当してしまい、都合が悪いです。
 そのくせ、=COUNTIF(A1:A4,"=??") で3が得られるので、文字長は2と判定されている感じ。 =COUNTIF(A1:A4,"=?1") だと、ちゃんと1件だけ該当します。
(???) 2017/07/06(木) 18:28

 素直に
 =SUMPRODUCT(--(A1:A3<>"91"))
 で逃げる手もありますね

 >本当に使いたいのは COUNTIFS
 って事は
 =SUMPRODUCT((A1:A3<>"91")*(A1:A3<>"92")*(A1:A3<>"93")*・・・・・・・・)
 みたくなるのかな

(白茶) 2017/07/06(木) 19:23


私の場合ですが、
文字列の扱いになっている数値がある場合、
空いている列に =A1*1 などで文字列から数値に変換してから
COUNTIF などをします。

=COUNTIF(A1:A3,"<>91")

私の感覚では、返ってくる値は3です。
A1:A3に入っているものは、文字列なので。。。

そんなわけで、=COUNTIF(A1:A3, 91) で 1が返ってくることに違和感を感じます。

(K) 2017/07/06(木) 23:54


おはようございます。

皆さん、ありがとうございます!
こんなにたくさんのご意見を頂けるとは思っていませんでした。

今回私がやりたいことは、排除したいものが一つであるため、???様の
無条件カウントから条件カウントを差し引く形で達成したいと思います。
(一番考えるのが簡単だからです)

その他のご意見も、全て自分で試してみます。
本当にありがとうございます!!

ちなみに、余談なのですが・・・
白茶様がおっしゃるように、sumproduct もネットで検索したときに出てきたのですが、私はこの関数の使い方がよく分かりませんでした。
もしお手数でなければ、どのような使い方をする関数なのか、どなたか簡単にでいいので教えていただけないでしょうか?
(きゅうり婦人) 2017/07/07(金) 08:11


K様

個別のご返信、失礼いたします。

今回の件を考えているうちに私の中で疑問になったことなのですが、
countif で指定した数字の並び(「91」など)が、単純に数字をさしているのか、それとも文字列をさしているのか、エクセルはどう判断しているのでしょうか。

 =countif(A1:A3,"<>91") だと、どうやら数字だと判断しているらしい・・・

という認識は得たのですが、
じゃあ「91(文字列扱い)」を指定するにはどうしたらいいんだろう?という問いへの答えを、自分では出し切れませんでした。

これは、今回のように排除の場合(<>)だけの話ではなく、純粋に「91」という文字列を数えたい場合にも必要な考え方になる気がするのですが・・・
例えば、

 =countif(A1:A3,"=91")

という関数を組んだら、数字である「91」も、文字列扱いである「91」も、同様に集計してしまうと思います。
このとき、「数えてほしいのは数字の91だけだよ」とエクセルに教えてあげる方法はあるのでしょうか。
皆さんのご意見を伺うに、それは無理なのでしょうか・・・
(きゅうり婦人) 2017/07/07(金) 08:20


式が =COUNTIF(A1:A3,"<>91") だと、数字と比較しているから3なのは妥当。これは納得できます。
(ちなみに、数字の91と文字の91が混在の場合は、この式で正しい答えが得られます)
しかし、=COUNTIF(A1:A3,"<>""91""") というように文字列を条件としても、答えは3なのですよ。
(数字の91と文字の91が混在の場合、この式は異なる答えになります)

それに、<> は駄目ですが、= なら数字でも文字でも思った通りの答えになるというのも、一貫性がありません。
(あー、2016でどうなるか試しておけば良かった…)

おそらく、Excelの自動型変換がなにか悪さをしているのではないかと思いますが、該当しそうな情報を見つけることができませんでした。91以外の数字でも同じなので、2進数誤差は無関係と思われます。 深く考えず、逃げの数式で対処しておくのがベストでしょうね。
(???) 2017/07/07(金) 09:17


???様

お早いご返信ありがとうございます。

そうですか・・・分かりました。
エクセルに精通しているわけではないため、細かいロジックのようなものはピンと来ませんが、
ダブルクォーテーションで囲うと文字列扱いができる、というのは
旧バージョンでは可能な対応だったのでしょうか。

ですが、皆さんにお知恵を拝借することができましたので、解決いたしました。

改めて、皆さんありがとうございました!
(きゅうり婦人) 2017/07/07(金) 10:19


(きゅうり婦人)さん

私の知識では、COUNTIFだけで数値の「91」と文字列の「91」と個別にカウントする方法を知りません。
他の関数と組み合わせればカウントできますが、、、

Excelでは、セルに入っているものが、数値か文字列かなどを情報して持っています。
単に =A1="91" と入力すると TRUE =A1=91 と入力すると FALSE になります。
セルに入っている「91」が数値か文字列かを調べる関数として、TYPEがあります。
=TYPE(A1) とすれば、数値は1、文字列は2のように表示されます。

もし、数値の「91」と文字列の「91」と別にカウントする場合、
TYPE(A1)などで型を調べた情報と組み合わせてカウントする。
COUNTIFを使用する場合、こんな感じになるのかな・・・と

結局、数値と文字列が混在していて個別にカウントしたい場合、
=SUMPRODUCT((A1:A3="91")*1) と =SUMPRODUCT((A1:A3=91)*1) のようにしそうですが・・・
(K) 2017/07/07(金) 10:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.