重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Excel の COUNTIF にて、検索対象を 0001 とし、検索範囲のセルには、 0001 および 01E0 があったとすると、このカウント結果は、2 となるのですが、何故でしょうか? 期待している結果は、1 かと思っているのですが、そうならない理由がよく解りません。 初歩的な質問で恐縮ですが、どなたかご教示の程、宜しくお願い致します。

A 回答 (7件)

で、数式でやればいいのか 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
といった具合でカウントできます
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。

一応、数式を駆使してやろうかと考えております。
頂いた回答を基に、チャレンジしてみます。

本当に、ありがとうございました。

お礼日時:2008/11/26 11:28

ANo4です 寝ぼけてましたね …


COUNTではなく SUMPRODUCTで代用なさってみてじゃいかがでしょう

=SUMPRODUCT( (A1:A8="0001")*1)
といった具合で ・・・
    • good
    • 0
この回答へのお礼

いろいろ回答ありがとうございます。

ですが、小生には応用が利かせられない為、具体的に実現させたいことを記しますので、その上でアドバイスを頂きたく。

下記のようなデータを想定し、重複したデータの入力時には"入力規則"にて入力できないようにし、また、データを読み込んだ場合は、重複箇所の色を"条件付書式"にて変えようかと考えております。そこで必要となるのは、条件式です。

範囲内のセルに同一の文字列が複数あった場合に検出できるような条件式が必要ですので、"COUNTIF"を使おうと考えました。ですが、質問の内容の通り、誤検出!?してしまう問題がありましたので、何とかならないかといった次第です...。

 COUNTIF(A1:A5,A1) → 得られる結果:3 (期待している値:2)

  A
1 0001 ← 重複箇所
2 01E0
3 1234
4 5678
5 0001 ← 重複箇所 (入力時にはNGに、データ読み込み時には色を赤に)
  :
  :

アドバイスの程、宜しくお願い致します。

お礼日時:2008/11/26 07:42

A列に縦に16進数の文字列が並んでいるとして、


B列を =hex2dec(a1)として非表示にし、B列に対してcountifしてはいかがでしょう。原始的ですみませんが。
    • good
    • 0

COUNTで代用してみては ・・・


=COUNT(A1:A5="0001")
といった具合で ・・・
    • good
    • 0

"0001"のように数値として解釈可能な文字列を演算に使うと数値に


変換されちゃうのはExcelの仕様です。日付や時間を扱う時はまぁ、
便利ですね。で、文字列"01E0"も指数表記の数値として解釈できる
ので、1かける10の0乗で1の扱いになります。
    • good
    • 0
この回答へのお礼

迅速な回答ありがとうございます。

理屈は解りましたが、ただ、セルの書式設定(分類)を"文字列"に指定していたのですが、それでも、文字列扱いとしては扱われないのでしょうか?
要は、COUNTIF で結果が 1 となって欲しいのですが、何か良い方法はないでしょうか...?因みに、検索対象となるセルの文字列は、""を入れるなど、加工はできません。純粋に、16進の数字が入力されている条件で考えております。要求は、入力された文字列が重複していないことがチェックできればクリアできます。

誠に勝手ながら、何か良い方法がありましたら、ご教示頂きたく。
宜しくお願い致します。

お礼日時:2008/11/25 20:10

01E0 → 01 × 10の0乗 として扱われます。


デカい数を入力すると、6.23E+20(6.23×10の20乗) などと表示されるのがそれです。
で、01×10の0乗=1 なので、COUNTIFでこれも拾ってしまうわけです。
    • good
    • 0

01E0を指数表記として扱っているのでしょう。


http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0% …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!