web-dev-qa-db-ja.com

= countifは「0001234」が「0001234」と等しくないと言っていますcountifに文字列を数字ではなくテキストとして扱うように強制するにはどうすればよいですか?

スプレッドシートに保存されている製品コードがいくつかあります。そのうちのいくつかは先行ゼロの数字です。

関数と等しくないCOUNTIFに依存するいくつかの操作を行っています(コメントの詳細ですが、質問には関係ありません)。先行ゼロの数値を含む文字列を処理すると、Countifが壊れるようです。

簡単なデモンストレーション用

たとえば、A1に「foo」が含まれている場合:

_=COUNTIF(A1,"<>"&A1)
_

0を返します。つまり、A1と等しくないセルはA1にありません(もちろん)。

ただし、A1にテキストとして「0001234」が含まれている場合は、1が返されます。つまり、A1 IS NOT EQUAL TO A1

詳細情報:=countif(A1:"<>"&"1234")は0を返すため、問題はExcelが文字列 "0001234"を数値1234に自動的に変換することですが、基準であり、範囲にない場合は、「0001234」=/= 1234が見つかります。

回避策:すべてのコードにジャンクテキスト文字が追加されたヘルパー列を作成します。現在、すべてのリストに= "@"&X1を含むヘルパー列を追加していますが、これは洗練されたソリューションではありません。

3
Some_Guy

[〜#〜] edit [〜#〜]NULの追加から追加*を基準に。

ブール値でも同様の動作が見られます。変換を行わないようにCOUNTIFを「強制」する方法のひとつは、criteria引数に*を追加(またはプリペンディング)することです。例えば:

=COUNTIF(A1,"<>" & A1 & "*" )

a1の文字列0でも0001234を返します

「*」は、COUNTIFにA1をcriteria引数のテキストとして処理するように強制します。もちろん、A1に数値が含まれている場合、これは失敗します。だからあなたはそれをテストする必要があるかもしれません

=COUNTIF(A1,"<>" &  A1 & IF(ISNUMBER(A1),"","*"))

コメントに投稿したデータを使用したスクリーンショットは次のとおりです。

enter image description here

このようにCOUNTIFを使用することは完全に防弾ではないため、EXACT関数を検討することもできます。

=N(NOT(EXACT(A2,B2)))

または、もっと簡単に言えば、大文字と小文字の区別が問題にならない場合:

=A2<>B2

基準にワイルドカードを使用してCOUNTIFと同じ結果を返し、テスト対象の範囲が基準内に表示される可能性を排除することもできます。

enter image description here

上記のコメントに投稿したCOUNTIFSの式を理解していれば、次の式で同等の結果が得られる可能性がありますが、期待される結果のデータを確認したいと思います。

=SUMPRODUCT((A:A=A2)*(B:B<>B2))<1

また、列全体の参照を列全体よりも少なくするように制限できれば、数式ははるかに効率的に(すばやく)機能します。

2
Ron Rosenfeld