皆さんは、VBAで大文字と小文字を意識して処理を組んだことがありますか?
IF文などの条件式で「A = a」のようにしてしまった場合、結果がTrueにならず、意図した結果にならないケースがよくあります。
そこで今回は、
・VBAで大文字⇔小文字変換する方法
・大文字・小文字を指定して文字判定する方法
といった基礎的なことから、
・大文字・小文字を区別せず文字判定する方法
・【補足】合わせて覚えると便利な文字を判定する方法
といった応用的な方法まで、徹底的に解説します!
VBAで大文字⇔小文字変換する方法
はじめに、大文字⇔小文字変換方法について解説します。
変換方法が2つあるので、それぞれ解説しますね。
UCase関数・LCase関数を使う
まず、UCase関数・LCase関数を使う方法についてです。
それぞれ以下のように変換できる関数です。
・UCase関数:小文字から大文字に変換
・LCase関数:大文字から小文字に変換
使い方も簡単で、「関数名(文字列)」のように書くことで、上記のように大文字⇔小文字を変換することができます。
UCase関数・LCase関数を使ったサンプルコードを用意しました。
サンプルコード:
Sub Test() Dim str1 As String Dim str2 As String str1 = "abc" str2 = "EFG" Debug.Print "------------UCase関数を使った場合------------" Debug.Print "元の値:" & str1 Debug.Print "変換した値:" & UCase(str1) Debug.Print "------------LCase関数を使った場合------------" Debug.Print "元の値:" & str2 Debug.Print "変換した値:" & LCase(str2) End Sub
実行結果:
------------UCase関数を使った場合------------ 元の値:abc 変換した値:ABC ------------LCase関数を使った場合------------ 元の値:EFG 変換した値:efg
このように、簡単に大文字⇔小文字を変換することができます。
StrConv関数を使う
次に、StrConv関数を使う方法について解説します。
StrConv関数は、大文字小文字以外にも様々な文字を変換することができる、便利な関数です。
たとえば、以下のように様々な変換ができます。
使い方:
StrConv(文字列 , 変換方法)
変換方法一覧:
No | 値 | 意味 |
---|---|---|
1 | vbUpperCase | 大文字に変換 |
2 | vbLowerCase | 小文字に変換 |
3 | vbProperCase | 各単語の先頭の文字を大文字に変換 |
4 | vbWide | 半角文字を全角文字に変換 |
5 | vbNarrow | 全角文字を半角文字に変換 |
6 | vbKatakana | ひらがなをカタカナに変換 |
7 | vbHiragana | カタカナをひらがなに変換 |
8 | vbUnicode | 文字列をUnicodeに変換 |
大文字に変換する場合は「vbUpperCase」を変換方法に指定し、小文字に変換する場合は「vbLowerCase」を変換方法に指定することで、大文字・小文字にそれぞれ変換できます。
先ほどのコードを、StrConv関数に書き換えたサンプルを用意しました。
サンプルコード:
Sub Test1() Dim str1 As String Dim str2 As String str1 = "abc" str2 = "EFG" Debug.Print "------------変換方法に「vbUpperCase」を使った場合------------" Debug.Print "元の値:" & str1 Debug.Print "変換した値:" & StrConv(str1, vbUpperCase) Debug.Print "------------変換方法に「vbLowerCase」を使った場合------------" Debug.Print "元の値:" & str2 Debug.Print "変換した値:" & StrConv(str2, vbLowerCase) End Sub
実行結果:
------------変換方法に「vbUpperCase」を使った場合------------ 元の値:abc 変換した値:ABC ------------変換方法に「vbLowerCase」を使った場合------------ 元の値:EFG 変換した値:efg
結果はさきほどとおなじですが、StrConv関数で大文字・小文字を変換することができましたね。
このように、簡単に変換することができます。
UCase関数・LCase関数とStrConv関数どちらを使えばいいの?
素朴な疑問として、「じゃあ、どちらを使えばいいの?」と思った方もいるのではないでしょうか。
結論から言うと、どちらを使ってもOKです。
ただし、UCase関数・LCase関数はそれぞれ小文字→大文字、大文字→小文字の機能しか持っていないため、誤った変換をする心配がありません。
その点StrConv関数は変換方法を間違えると意図した結果にならないので、UCase関数・LCase関数の方がミスは減るかもしれませんね。
ミスをするリスクを減らして機能を絞るか、機能の豊富さ(他の変換もできる)を重視するかの違いだけなので、覚えやすい方を使うのがおすすめです!
条件式で大文字・小文字の判定を使う方法
次に、条件式で大文字・小文字判定をする方法について解説します。
大文字・小文字を指定して文字判定するケース
まずは、大文字・小文字を指定して文字判定するケースについてです。
「対象の文字列が小文字のときに、〇〇の処理をする」というような条件を作りたいときに使います。
UCase関数・LCase関数を使って判定することができます。
先ほど詳しくは解説しませんでしたが、UCase関数(小文字→大文字変換)をする文字列があらかじめ大文字だった場合は、結果も大文字のままになるという特性を利用して、「対象の文字」と「対象の文字をUCase関数で変換した文字」を比較することで、文字列が大文字かどうか判定することができます。
対象文字が大文字になっているか確認するサンプルコードを用意しました。
サンプルコード:
Sub Test2() Dim str1 As String str1 = "abc" If str1 = UCase(str1) Then Debug.Print str1 & "は大文字です" Else Debug.Print str1 & "は大文字ではありません。" End If End Sub
実行結果:
abcは大文字ではありません。
「If str1 = UCase(str1) Then」で大文字かどうか判定を行い、結果を出力するサンプルです。
「str1 = “abc”」が元のデータのため、結果が「abcは大文字ではありません。」になっていますよね。
このように、大文字・小文字を指定して処理を作っていくことができます。
大文字・小文字を区別せず文字判定するケース
次に、大文字・小文字を区別せずに文字判定するケースについてです。
大文字・小文字関係なく文字が同じだったときに処理をしたい場合は、IF文の条件に使う左・右のどちらの値にもUCase関数を使うことで、どちらも大文字に変換してから判定するのがおすすめです!
サンプルコードを用意しました。
サンプルコード:
Sub Test3() Dim str1 As String Dim str2 As String str1 = "abc" str2 = "ABC" If UCase(str1) = UCase(str2) Then Debug.Print str1 & "と" & str2 & "は同じ文字列です" Else Debug.Print str1 & "と" & str2 & "は違う文字列です" End If End Sub
実行結果:
abcとABCは同じ文字列です
先ほどの応用ですが、どちらも大文字にしてから判定しているため、同じ文字として認識できていますよね。
ちょっとした応用をするだけで、大文字・小文字の判定ができるので、それぞれ方法を覚えておくのがおすすめです!
【補足】合わせて覚えると便利な文字を判定する方法
ここまでは対象の値が文字であることを前提に処理を書いてきましたが・・・数値が入って来るケースもありますよね。
そのため、TypeName関数を使って、数値・文字列判定する方法を覚えておくのがおすすめです!
以下で詳しく解説しているので、気になる方はみてみてくださいね!
まとめ
今回は、VBAで大文字・小文字を変換・判定する方法を解説しました。
大文字・小文字のちょっとしたミスでもバグにつながるので、覚えておくと便利です。
どれも使い方は簡単なので、ぜひ使ってみてくださいね!