アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは

入力した文字列の重複チェックを行うため countif を使用を使用するのですが、
表題のように 0.1 と 0.10 は同じものとして扱われてしまいます。
これを回避する(区別する)方法はないでしょうか?
(A列に値が入力されていたとして
 =countif(A:A,A1)
 と入力。2以上なら重複と判定するが、0.1 と 0.10 がある場合は重複とみなされる)

今のところ、作業セルを設けて ~&"-" などして、
0.1- と 0.10- にしてから重複チェックするなどしています。

バージョンには左右されないと思いますが、Excel 2010 使用。
よろしくお願いいたします。

質問者からの補足コメント

  • 補足です。
    1. 入力している値は 文字列 として入力しています。
     (シングルクォーテーションで始めるか、書式を 文字列 にしてから入力)
    2. 実際のデータでは見出し列として x.1、x.2~x.10、x.11(xは任意の数字)
     といった具合に値が入力されています。
     重複している場合には実際の重複箇所のデータを確認して、
     いづれのデータを使用するのか、個別判定します。
     見た目としては x.1 と x.10 は別ものとして存在します。

      補足日時:2016/09/07 23:29
  • HAPPY

    SUMPRODUCT vs COUNTIFS で再計算時間を比較したところ、
    SUMPRODUCT 100秒前後
    COUNTIFS 13秒
     (対象:3500セル)
    となりました。
    よって 銀鱗 さんのご回答をベストアンサーとさせていただきます。

    皆さまありがとうございました。

      補足日時:2016/09/08 23:09

A 回答 (6件)

COUNTIF関数ではなく、


COUNTIFS関数で。

=COUNTIFS(A1:A3,A1 , A1:A3,REPT("?",LEN(A1)) )
とか。
A1セルの文字数をカウントして、それと同じ長さの文字列という条件を加えてみました。

※COUNTIFS関数は、Excel2007以降で有効です。
    • good
    • 0
この回答へのお礼

素晴らしい!希望通りの結果になりました!

REPT は初めて見ましたね。勉強になります。
ありがとうございました。

お礼日時:2016/09/07 23:07

>今のところ、作業セルを設けて ~&"-" などして、


・これってできますか?こちらでは同じ文字長になります。

・LEN でやっても、文字列に変えないと、0.1 も、0.10も同じです。

>表題のように 0.1 と 0.10 は同じものとして扱われてしまいます。
>これを回避する(区別する)方法はないでしょうか?

この2つの違いは、書式が違います。
それを、CELL関数で調べます。
ですから、
CELL("format",A1) を調べます。
   書式      :結果
0.1は、標準(G)か、0.0 ....G, F1
0.10 は、0.00 ....F2

補助列にこういう数式を入れて

F列の場合
=IF(ISNUMBER(SUBSTITUTE(A1&CELL("format",A1),"F2","")*1),1,0)

最後に、合計を取れば、同じものだけが出てきます。
もしくは、その数式の中の、
=A1&CELL("format",A1)
を使い、同じ文字があれば、重複になりますが、0.1と0.10は別として扱われます。

それ以外では、やはりVBAに頼らざるをえないと思います。
    • good
    • 0
この回答へのお礼

0.1、 0.10 双方とも文字列として入力します。
文字列として入力しているのに、同じものとして扱われるので難儀していました。

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

お礼日時:2016/09/07 23:08

こんにちは!



仮にA列にデータがあるとして、セルの表示形式は「文字列」だとすると
=SUMPRODUCT((A1:A100="0.1")*1)
としてみてはどうでしょうか?
これで「0.1」のセル数が表示できると思います。

※ セルの表示形式が「標準」の場合は「0」になります。m(_ _)m
    • good
    • 0
この回答へのお礼

なるほど!希望通りの結果になりました!
配列系の関数は検討しかけましたが、うまく使えなかったので、
断念してしまいました!

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

お礼日時:2016/09/07 23:08

No.3です。



>2以上なら重複と判定するが・・・
要するに重複するかどうか?の判定が必要なのですね?

仮にB列に表示する場合はB1セルに
=IF(SUMPRODUCT((A$1:A$1000<>"")*(A$1:A$1000=A1))>1,"重複","")
という数式を入れフィルハンドルで下へコピーしてみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>要するに重複するかどうか?の判定が必要なのですね?
その通りです。
こちらは空白セル無視版ですね。
参考にさせていただきます。

お礼日時:2016/09/07 23:09

> 0.1- と 0.10- にしてから重複チェックするなどしています。


それでいいと思います。負担が少ないので。

ただどういうデータなのか分かりませんが 大元で重複チェックできないので
しょうか。まさか「0.10」が手入力という訳ではないですよね。
    • good
    • 0
この回答へのお礼

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

作業セル使用は個人的に行う分には問題ないのですが、
詳しくない人が見ると意味が分からなかったり、
作業セルを非表示にすると、フィルダウンで作業セルがコピーされないので、
何とかできないかなぁといったところでした。

大元データについては補足に少し追記させていただきます。

お礼日時:2016/09/07 23:09

>セルの表示形式が「標準」の場合は「0」になります。


それは、違います。

0.1 になっている場合は、表示形式は、
G/標準か、0.0 です。

数値の0.10 と 0.1 の違いは、=CELL("format",A1) という関数なら違いが分かるというだけのこと。文字列なら、話はまるで違ってきますが、質問条件とは違います。

ちなみに、0.1の「0」の表示では、CELL("format",A1)関数なら、F0 となります。

このような状態で、数値が置かれているとします。
A1 ~A10
0.1
0.10
0.10
0.10
0.10
0.10
0.10
0.10
0.10
0.10

このA1 は、重複しているかしていないか、というのを導きだすには、補助列を仮に、B1からとするなら、
B1~B10
=A1&CELL("format",A1)
として、=COUNTIF(B1:B10,B1) とすれば、重複していないということになります。B1は、0.1G または、0.1F1 となり、重複がないことになります。
    • good
    • 0
この回答へのお礼

すみません、表題に記載して、
本文になかったので誤解を招いているようですが、
入力されている値は 文字列 で入力しています。

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

お礼日時:2016/09/07 23:20

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