こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel:文字列の比較:大文字と小文字の区別

Excel(2002)のワークシートの数式で文字列を比較するとき
半角英字の大文字と小文字が区別されないようなのですが、
区別するためにはどうしたらよいのでしょうか。

※任意のセルで ="a"="A" とすると TRUE が帰ってくる。Countif などの動作も同様。
※VBAでは次のコードを実行すると FALSE が表示される。
Sub compare()
If "a" = "A" Then
MsgBox "TRUE"
Else
MsgBox "FALSE"
End If
End Sub

カテゴリ違いかもしれません。とすれば申し訳ありません。よろしくおねがいします。

投稿日時 - 2005-12-29 14:54:49

QNo.1865710

困ってます

質問者が選んだベストアンサー

#1です。
COUNTIF じゃないけど、A1:A8に

aab
aAb
aab
Abb
AAB
AaB
AAb
aab

と入っている場合、=SUMPRODUCT((EXACT(A1:A8,"aab"))*1) で 3 が返ります。

投稿日時 - 2005-12-30 02:04:42

お礼

再度の回答ありがとうございました。
これで COUNTIF の 大文字小文字区別版が実現できるわけですね。よくわかりました。
今後ともよろしくお願いします。

投稿日時 - 2005-12-30 12:06:38

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

s_husky です。
質問者は、ソフトとプログラミング言語を混同されています。
例えば、AccessやExcel等はあくまでも一つのソフトです。こういうソフトでは、ユーザーの便宜から大文字と小文字を区別しなかったり、あるいは、オプションを設定することが可能です。
Excelの式は、Excelのソフト的性格を反映した仕様です。これに対し、VBAは'a'と'A'を区別しています。これは、VBAがプログラミング言語だからです。仮に、Excel固有の仕様にすると、AccessやWordのVBAも独自仕様ということになります。そういう事情で、ExcelVBAも一般的なプログラミング言語の仕様に準拠している訳です。

? Chr$(65) = Chr$(97)
False
? Chr$(65) & Chr$(97)
Aa

投稿日時 - 2005-12-30 10:09:52

お礼

再度の回答ありがとうございました。
>VBAが大文字と小文字を区別しないのは、そういう仕様だからです。
とあったのは、VBA -> EXCEL の間違いですね。
よくわかりました。今後ともよろしくお願いします。

投稿日時 - 2005-12-30 12:08:53

ANo.3

VBAが大文字と小文字を区別しないのは、そういう仕様だからです。
"a"と"A"は、便宜的に対応しているだけで文字コードとしては"A"と"B"みたいなものです。

If Upper("a") = "A" Then

という書き方を知りたいのでしょうか?

投稿日時 - 2005-12-29 21:24:44

補足

ご回答ありがとうございます。
私の実験ではワークシート上の式では大文字小文字が区別されず、VBAでは区別されるという結果だったのですが、VBAも区別しない仕様なのでしょうか?
その点がよくわかりませんでしたので、もしよければ再度解答いただけたらありがたいと思います。

投稿日時 - 2005-12-29 23:57:43

ANo.2

(1)Exactの使い方
例データA,B列
Aa
AA1
aA1
AaTRUE
C1は
=IF(EXACT(A1,B1),1,"")
C2はC1の式を複写
(2)>="a"="A" とすると TRUE が帰ってくる
はどういう使い方なのでしょうか?実務で、こんな使い方したことがない。
http://www.relief.jp/itnote/archives/001200.php
の程度のことは知っていますが。
="a"="A"がTRUEになる理由は、それはそれで説明が必要でしょうが、すみません、説明する知識なし。="aA"="AA"でもTRUEになる。
上記のC3は
=IF(A3=B3,1,"")と入れると、1となりました。
C4は
=A4=B4
を入れてTRUEとなりました。
=CHAR(66)=CHAR(98)でもTRUEになりました。
何かツールーオプションなどでも設定がないか調べたが、見つけられずたぶん関係ない。
(3)
Sub compare()
If "a" = "A" Then
MsgBox "TRUE"
Else
MsgBox "FALSE"
End If
End Sub
はおっしゃる通りの結果になりました。
しかし ="a"="A"
とVBAのIFのコードの部分が等価といえるのでしょうか。

投稿日時 - 2005-12-29 18:54:18

お礼

詳しく調べていただき、参考になりました
ありがとうございました。
これからEXACT関数を活用したいと思います。

投稿日時 - 2005-12-30 12:04:45

ANo.1

Excel2000だと

=EXACT("a","A") は False
=EXACT("A","A") は True

が返ります。

投稿日時 - 2005-12-29 15:45:30

補足

早速の解答ありがとうございます。
質問の補足ですが、COUNTIF関数を使って大文字小文字を区別して比較したい場合は何か方法があるでしょうか?

投稿日時 - 2005-12-29 23:51:08

あなたにオススメの質問