• ベストアンサー

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

Excel(2002)のワークシートの数式で文字列を比較するとき 半角英字の大文字と小文字が区別されないようなのですが、 区別するためにはどうしたらよいのでしょうか。 ※任意のセルで ="a"="A" とすると TRUE が帰ってくる。Countif などの動作も同様。 ※VBAでは次のコードを実行すると FALSE が表示される。 Sub compare() If "a" = "A" Then MsgBox "TRUE" Else MsgBox "FALSE" End If End Sub カテゴリ違いかもしれません。とすれば申し訳ありません。よろしくおねがいします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 COUNTIF じゃないけど、A1:A8に aab aAb aab Abb AAB AaB AAb aab と入っている場合、=SUMPRODUCT((EXACT(A1:A8,"aab"))*1) で 3 が返ります。

otasuke009
質問者

お礼

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

その他の回答 (4)

noname#22222
noname#22222
回答No.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

otasuke009
質問者

お礼

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

noname#22222
noname#22222
回答No.3

VBAが大文字と小文字を区別しないのは、そういう仕様だからです。 "a"と"A"は、便宜的に対応しているだけで文字コードとしては"A"と"B"みたいなものです。 If Upper("a") = "A" Then という書き方を知りたいのでしょうか?

otasuke009
質問者

補足

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

(1)Exactの使い方 例データA,B列 A a A A 1 a A 1 A a TRUE 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のコードの部分が等価といえるのでしょうか。

otasuke009
質問者

お礼

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

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

Excel2000だと =EXACT("a","A") は False =EXACT("A","A") は True が返ります。

otasuke009
質問者

補足

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

関連するQ&A

  • エクセルVBAでセルが数値か数式かの判断方法

    エクセル2000です。 Sub Suuchi() If IsNumeric(Range("A1")) = True Then MsgBox "数値で~す♪" Else MsgBox "数値じゃないよ!" End If End Sub とやってみたんですが、数式も数値となってしまいます。 数値、数式、文字の判断はどうやればいいんでしょうか?

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

  • select case 大文字小文字を区別しないよ

    select case 大文字小文字を区別しないようにするには? Sub test01() Dim str As String str = "A" Select Case str Case "a" MsgBox "aです" Case "A" MsgBox "aです" End Select End Sub これだと、半角全角がヒットしないのはなんとなくしょうがないかな、と思うのですが 大文字小文字がちがくてもヒットさせるにはどうすればいいですか? Sub test01() Dim str As String str = "A" Select Case str Case "a", "A" MsgBox "aです" End Select End Sub とするしかないでしょうか? 大文字小文字区別なく評価する方法があれば教えてください。よろしくお願いします。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • ACCESS 文字列の比較(完全一致)

    いつもお世話になってます。 A = "a" B = "A" IF A = B Then で文字列AとBを比較するとTrueになってしまいますね。でもここではFalseに判定して欲しいのです。 Option Compare Database を Option Compare Binary にすればFalseになるのはわかるのですが、他の箇所の比較に影響が出るのが怖いので、それはしたくありません。 文字列を完全一致で比較する方法があると思うのですが、調べてもわかりませんでした。 知っている方、どなたか教えてください。 ACCESS2000です。 よろしくお願いします。

  • 文字列の比較に関する質問

    文字列をif文で比較したいのですが、まず下記の例だと char *a a="a"; if(a=="a"){ printf("等しい"); }else{ printf("等しくない"); } 文字列は等しくなるのですが下記の例ではなりません 何故なのでしょうか。 read(s_sock,&buf,sizeof(buf)) if(a=="GET"){ printf("TRUE") }else{ printf("FALSE"); }

  • 【Excel VBA】A列の全角・半角文字をチェック

    【Excel VBA】A列の全角・半角文字をチェック Excel VBAの初心者です。 仕事で必要なため、教えていただけると助かります。 【やりたいこと】 Excel VBAで、入力が完了したExcelシートのA列(A1からA10)が、 半角のみであること、または全角が入力されていないこと、を チェックしたいです。 半角以外の文字があった場合は、メッセージを表示します。 また、半角以外のセルがあった場合は、そのセルの色を水色にします。 入力チェックの方法は、ボタンにマクロを登録して、 そのボタンを押下することで行います。 以下に、僕が試したプログラムを記します。 アドバイスをいただけると幸いです。よろしくお願いします。 Sub 入力チェック() Dim cellValue As String Dim strANSI As String Dim i As Integer For i = 0 To 10 cellValue = Cells(1, i + 1) strANSI = StrConv(cellValue, vbFromUnicode) If Len(cellValue) = LenB(strANSI) Then MsgBox "セルは半角のみ" myColor = 8 Else MsgBox "セルの内容は全角のみ" End If MsgBox "セルの内容は全角と半角があり" Next i End Sub

  • 特定のセルの文字入力を半角英字の大文字にする方法

    セルB13~BK13に文字を入力する際に、全角小文字の英字や数字、半角小文字の英字や数字、全角大文字の英字や数字で入力した場合でも、自動で半角大文字の英字と数字に自動変換して、英字と数字の間に半角で1角の空欄を自動でしてくれる様にするVBAなどの方法はありますか? この際にどの様な形式の平仮名やカタカナや‐(ハイフン)が入力された場合は「平仮名やカタカナや‐は入力できません。」とエラーメッセージを表示させたいです。 ※例えば「ggg 501(半角小文字の英字)」や「ggg 501(全角小文字の英字)」や「GGG 501(全角大文字の英字)」と入力した場合でも自動で「GGG 501(半角大文字の英字)」と自動変換され英字と数字の間に1角の半角で空白が自動で設定してくれる感じです。 ※「じーじーじ 501(平仮名が含まれる)」や「ジージージー 501(カタカナが含まれる)」や「GGG-501(ハイフンが含まれる)」など入力させたらエラーメッセージを表示させます。 ※ちなみにこのシートには ''******************************************************************************* ' セル選択によるイベント '******************************************************************************* Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'カレンダーフォームのVBA If Intersect(Target, Range("BP1")) Is Nothing Then Exit Sub If MsgBox("日付を記入するためカレンダーを表示させます、よろしいでしょうか?", vbYesNo) = vbNo Then Exit Sub Else End If ' カレンダーフォームを起動する Call ShowCalendarFromRange2(Target) Dim ans As String ans = InputBox("指定した時間(〇〇:〇〇)を入力して下さい。") If ans = "" Then Exit Sub Range("CO14").Value = ans ans = InputBox("先ほど指定した時刻からの時間間隔(例えば5分なら「5」で1時間なら「60」を入力して下さい。 ") If ans = "" Then Exit Sub For Each c In Range("CO15:CO37") c.Value = Format(c.Offset(-1).Value + TimeValue((ans \ 60) & ":" & (ans Mod 60)), "hh:mm") Next End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A3,A4,A5,A6,A7,A8,A9,A10,A11,A42,A43,A44,A45,A46,A47,A48,A49,A50,A81,A82,A83,A84,A85,A86,A87,A88,A89,A120,A121,A122,A123,A124,A125,A126,A127,A128,A159,A160,A161,A162,A163,A164,A165,A166,A167,A198,A199,A200,A201,A202,A203,A204,A205,A206,A237:A245")) Is Nothing Then Exit Sub Cancel = True With Target(1) ' If .Value = "" Then .Value = Now() .NumberFormatLocal = "h:mm" Else .Value = "" End If End With End Sub のVBAが組み込まれています。

  • 文字列比較

    お世話になります。 テキストボックスの後ろの文字を比較したいのですが text1.text = "123456789" だとして if text1.textの後ろ3文字 = "789" then msgbox "正しく入力されてます" else msgbox "きちんと入力してください" 見たいな感じにしたいのですが この後ろ3文字を調べるにはどうすればよろしいでしょうか?教えて下さい。お願いします。

  • EXCEL2007 VBA IF文について

    プログラム If Sheets("sheet1").Cells(85, 1).Value = Cells(13, 1).Value Then msgBox "true" Else msgBox"false" End If 値 Sheets("sheet1").Cells(85, 1).Value ← 0.38125 Cells(13, 1).Value ← 0.38125 上記のプログラムと値のとき、結果はtrueが表示されると思うのですが、なぜかfalseが表示されてしまいます。なぜ、falseが表示されるのか解りましたら教えてください。 値はウォッチで確認しています。

専門家に質問してみよう