[[20180115161008]] 『同じ値なのにFALSEになる』(run) ページの最後に飛ぶ

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

 

『同じ値なのにFALSEになる』(run)

A列とD列にデータが入力されています。
値が同じかを見るため、EXACTを使用しています。
どう見ても同じ値なのですが、違うとでてしまいます。
数字が微妙に違うのかな?と思ったのですが、
半角のカタカナ 又 漢字でも同じ結果になってしまいます。
IFなどを使っても同じです。
よい方法はないでしょうか。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 ゴミデータがついているのかも。後、スペースが入っているとか。

 その2つのデータをここに貼り付けることはできますか?
 もしくは、CLEAN関数を使ってからチェックするとか?
(コナミ) 2018/01/15(月) 16:16

コナミさんもコメントしてますが、ユーザーには見えない文字が付いてる可能性もあります (スペース、改行コードなど。。。)

まず、LEN関数で文字数をチェックしてみるとか、MID関数で1文字ずつ取り出して比較してみるとか、地道に検証するしかないのでは。。。
(もこな2) 2018/01/15(月) 16:19


コナミ様
1:010002
2:010002

CLEANを使ってからチェックすればいけました。
しかし、毎回しないといけないので、2:を1:に合わせておきたいです

もこな2様
RIGHTで右から6文字分だしてしたのですが、だめでした
(run) 2018/01/15(月) 16:25


1番は、コロンと0の間に、見えないコードが含まれているようですよ? どうやってこの文字列をセルに代入しているのか、そこを改善する必要がありそうです。
(???) 2018/01/15(月) 16:31

 >

 すごい、これなんだろう。Excelに貼り付けたら見えなくなりますね。

 ???さんも書かれてますが、これはどこから持ってきているデータなんでしょう?
 CLEAN関数をあらかじめ入れた作業列を作って置いてこのデータは列ごと他の列に貼り付けて
 CLEAN関数を入れたセルと2の列を比較するとかではダメですか?
(コナミ) 2018/01/15(月) 16:39

見えないコードですか…
2:は過去のエクセルファイルからコピーしたもの
1:は毎日のデータ処理ソフトのデータをエクセルで出力し、エクセルに貼り付けたもの
になります。
(run) 2018/01/15(月) 16:42

 別のアプリからのデータにそういった見えないコードの文字がついていることは
 よくある(?)ことです。

 どうせEXACTで比較するんですから、その時に、

 =EXACT(CLEAN(A1),D1) ←どっちがどっちかわかりませんが

 とかにできないんですか?

(コナミ) 2018/01/15(月) 16:46


コードは、&H1F(chr(31))ですね。ユニット区切り記号であり、表示されないコードの1つです。

絶対入るなら、2文字目以降を抜き出す数式にすれば良いし、入ったり入らなかったりならば1文字目のコードを調べて、これだったならば2文字目以降を使う式にすれば対応できますが、こういう見えないコードを入れない運用がベストでしょう。例えば、こんな式。

 =IF(LEFT(A1,1)=CHAR(31),MID(A1,2,99),A1)

元アプリは、他の人が作ったとか、他社に依頼して作ったとかならば、症状を説明して、不具合対応してもらえば良いです。 見えないのだから、Excelシートに貼る文字列に、こんなコードは入れちゃいけないです。
(???) 2018/01/15(月) 16:55


コナミ様  ???様

有難うございました。
教えていただいた分を試してみましたが、やはりうまくいきませんでした。
元ソフトは、業務システムのソフト?を作っている会社のものです。
一年ほど前に変えたところで、不具合が多々ありますが、平社員なので何とも言えません。。。

毎月する作業なので、元のエクセルの値をソフトで取り出したものに合わせられたら、いちいち関数を使って合わせて…としなくて、手間が省けるかな?と思い質問させていただきました。
もう少し探ってみます。
ありがとございました。
(run) 2018/01/17(水) 09:39


問題のコードが先頭の1文字だけなら、右から6文字でも、コナミさんの式でも、私の式でも対応できたはずですが、末尾にも付いているのですかねぇ?

市販のアプリなら、使い方の問題かと思いますが、専用で依頼して作成したアプリならば、作った本人も気づかなかったバグの可能性があります。(使い方を間違えている可能性もあります)上長に現象を説明して、対応を相談すると良いでしょう。 私の感覚では、見えない文字だったので、バグに気づかなかったのではないかと思います。

なお、問題のセル(説明に使った1番と2番)を範囲コピーし、ワードパッド等のエディタに貼りつけると、見えない文字があるのが判るでしょう。ノートパッドでは、見えない文字が詰まってしまうので、駄目です。 そして、何らかのバイナリエディタに文字列として貼りつけると、具体的な文字コードが判ります。

または、たとえばA1セルに問題の文字列があるとして、=LEN(A1) で文字数を調べ、=CODE(MID(A1,1,1)) で文字コードを調べる事もできますので、詳しく調べてみてください。(例示の場合は 1: が付いているので、=CODE(MID(A1,3,1))になります)
(???) 2018/01/17(水) 10:16


もひとつ注意する点なぞ。

今は余計なコードが付いているので、セルに貼ると文字列として扱われますが、これを外すと数値になるので、前ゼロが消えてしまうでしょう。対策としては、比較先も比較元も、セルの書式は文字列にしましょう。(数式で代入しているなら、TEXT関数を通すとか)
(???) 2018/01/17(水) 10:21


 >毎月する作業なので、元のエクセルの値をソフトで取り出したものに合わせられたら、
 >いちいち関数を使って合わせて…としなくて、手間が省けるかな?と思い質問させていただきました。
他のソフトに合わせて入力する方がよほど難しいくないですか?
数式でどうにかなるなら、それでやる方がよいかなぁーと思います。

ただ、「見えない文字」と言っても半角スペースに見えて、その文字は選択できますよね?
なので逆に元の文字列の、その文字だけをコピーして、
置換機能の検索文字に貼りつけ、置換後の文字列は「'(シングルクォーテーション)」にして、
置き換えてしまうのはいかがでしょうか?(文字列が数値になってしまう予防です)

(まっつわん) 2018/01/17(水) 10:44


>=LEN(A1) で文字数を調べ、=CODE(MID(A1,1,1)) で文字コードを調べる

調べましたら7文字で、CODEの方は31と出ました。
500件くらいあるのですが、全て同じのようです。
(run) 2018/01/17(水) 11:05


 このコードExcelに貼り付けると選択できないんですよね…困ったことに。

 =SUBSTITUTE(A1,CHAR(31),"")

 で置換するとか?数式なら置換後も文字列のままでいけるかな?
 でも最初にCLEAN関数ならできたって書いてませんでしたっけ?
(コナミ) 2018/01/17(水) 11:35

=SUBSTITUTE(A1,CHAR(31),"")でしたら、TRUEになりました。
ですが、元データは一年間変更することがないので、できれば元データを合わせられたらなぁと・・・
(run) 2018/01/17(水) 12:48

 =EXACT(A1,CHAR(31)&D1)
こんな式でも良さそうですが、見えない文字だし…。
D列の先頭にCHAR(31)を追加するマクロを作るのは簡単ですが、後から見た人が絶対何かやらかしそう。A列側に変なコードを入れないようにすべきかと思いますよ。
(???) 2018/01/17(水) 12:58

毎月新しいブック?で作成してしまうので、マクロも登録し直しなどがありますよね?
そして、私以外、私以上にエクセルは皆無の方たちなので、できない!といわれそうです・・笑
(run) 2018/01/17(水) 14:08

=EXACT(A1,CHAR(31)&D1)だとうまくいきません・・・
(run) 2018/01/17(水) 14:16

 すごく根本的なことなんですが、runさんの書かれている元データがどっちのことなのかとか
 A列・D列にどっちが入っているのかとかを明確にしないとうまくいかないと思いますよ。
 多分はっきりと書いている記述はないですよね?

(コナミ) 2018/01/17(水) 14:27


元データをD←一年間同じ
ソフトから引き出したのをA←毎月取得

になります。すみません。
(run) 2018/01/17(水) 14:29


前のサンプルの1番が毎月取得で、問題のコード入り、2番が元データでコードなし、ですよね? こちらで試すと、思った通りに判定するのですが…。
A列とD列、共にセルの書式設定を文字列にしてみるとどうでしょう?
(???) 2018/01/17(水) 17:53

文字列にしたらいけました!
ありがとうございます。
別で質問していたのですが、削除や挿入をして結果が#REF!になった場合は、自分でオートフィルかけないと変わらないのですよね?
(run) 2018/01/18(木) 13:51

#REFになってしまったら、自分で直すしかないですね。CTRL+SHIFT+@ で、数式表示に変わるので、これで探すと便利かも?
または、削除・挿入後にボタンでも押すと、マクロで範囲指定して新しい式で上書きしてしまう、というのも良いかと思いますよ。
(???) 2018/01/18(木) 14:03

>削除や挿入をして結果が#REF!になった場合は、自分でオートフィルかけないと変わらないのですよね?
ってどういう意味だろう・・・
#REF!になっているところを探したいってことでしょうか?

そのとおりだったら、以下をお試しください、
(1)ctrl と G を同時押し
(2)「ジャンプ」ダイアログの左下「セル選択」をクリック
(3)数式のオプションボタンをクリックして、数値、文字、論理値のチェックを外す。
(4)OKを押すと、エラー値になってるセルが選択されます。
(5)あとは消すなり色付けるなりお好きに加工して下さい。

(もこな2) 2018/01/18(木) 14:31


 その別質問に回答を書きましたが、希望に合わない回答だったのでしょうか?
(bi) 2018/01/18(木) 14:34

???様
自分でなおすしかないのですね!
ありがとうございます。

もこな2様
場所が知りたいのではなく、自動再計算の件です。

bi様
すみません、見落としておりました。
(run) 2018/01/22(月) 14:39


コメント返信:

[ 一覧(最新更新順) ]


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