- 締切済み
Excel COUNTIF の仕様について
Excel の COUNTIF にて、検索対象を 0001 とし、検索範囲のセルには、 0001 および 01E0 があったとすると、このカウント結果は、2 となるのですが、何故でしょうか? 期待している結果は、1 かと思っているのですが、そうならない理由がよく解りません。 初歩的な質問で恐縮ですが、どなたかご教示の程、宜しくお願い致します。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
で、数式でやればいいのか VBAでやるのかどちらなのでしょう 数式でやるならば =SUMPRODUCT((セル範囲アドレス="対象文字列")*1) で何個あるのかがカウントできます セル範囲とは A1:A20などといったものです 対象文字列は今回の場合 0001 です VBAでやるならば dim arData as Variant, n as integer, cnt as Integer arData = Range("A1:A20").Value cnt = 0 for n = 1 to 20 if arData( n,1 ) = "0001" then cnt = cnt + 1 if cnt > 1 then ' 背景を赤に、文字色を黄色 Range("A1").Offset( n-1).interior.ColorIndex = 5 Range("A1").Offset( n-1).Font.ColorIndex = 6 end if end if next といった具合でカウントできます
- redfox63
- ベストアンサー率71% (1325/1856)
ANo4です 寝ぼけてましたね … COUNTではなく SUMPRODUCTで代用なさってみてじゃいかがでしょう =SUMPRODUCT( (A1:A8="0001")*1) といった具合で ・・・
お礼
いろいろ回答ありがとうございます。 ですが、小生には応用が利かせられない為、具体的に実現させたいことを記しますので、その上でアドバイスを頂きたく。 下記のようなデータを想定し、重複したデータの入力時には"入力規則"にて入力できないようにし、また、データを読み込んだ場合は、重複箇所の色を"条件付書式"にて変えようかと考えております。そこで必要となるのは、条件式です。 範囲内のセルに同一の文字列が複数あった場合に検出できるような条件式が必要ですので、"COUNTIF"を使おうと考えました。ですが、質問の内容の通り、誤検出!?してしまう問題がありましたので、何とかならないかといった次第です...。 COUNTIF(A1:A5,A1) → 得られる結果:3 (期待している値:2) A 1 0001 ← 重複箇所 2 01E0 3 1234 4 5678 5 0001 ← 重複箇所 (入力時にはNGに、データ読み込み時には色を赤に) : : アドバイスの程、宜しくお願い致します。
- enraku-5th
- ベストアンサー率35% (159/449)
A列に縦に16進数の文字列が並んでいるとして、 B列を =hex2dec(a1)として非表示にし、B列に対してcountifしてはいかがでしょう。原始的ですみませんが。
- redfox63
- ベストアンサー率71% (1325/1856)
COUNTで代用してみては ・・・ =COUNT(A1:A5="0001") といった具合で ・・・
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
"0001"のように数値として解釈可能な文字列を演算に使うと数値に 変換されちゃうのはExcelの仕様です。日付や時間を扱う時はまぁ、 便利ですね。で、文字列"01E0"も指数表記の数値として解釈できる ので、1かける10の0乗で1の扱いになります。
お礼
迅速な回答ありがとうございます。 理屈は解りましたが、ただ、セルの書式設定(分類)を"文字列"に指定していたのですが、それでも、文字列扱いとしては扱われないのでしょうか? 要は、COUNTIF で結果が 1 となって欲しいのですが、何か良い方法はないでしょうか...?因みに、検索対象となるセルの文字列は、""を入れるなど、加工はできません。純粋に、16進の数字が入力されている条件で考えております。要求は、入力された文字列が重複していないことがチェックできればクリアできます。 誠に勝手ながら、何か良い方法がありましたら、ご教示頂きたく。 宜しくお願い致します。
- enraku-5th
- ベストアンサー率35% (159/449)
01E0 → 01 × 10の0乗 として扱われます。 デカい数を入力すると、6.23E+20(6.23×10の20乗) などと表示されるのがそれです。 で、01×10の0乗=1 なので、COUNTIFでこれも拾ってしまうわけです。
- umach
- ベストアンサー率35% (600/1691)
01E0を指数表記として扱っているのでしょう。 http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
お礼
丁寧な回答ありがとうございます。 一応、数式を駆使してやろうかと考えております。 頂いた回答を基に、チャレンジしてみます。 本当に、ありがとうございました。