この記事では、VBA の LCase と UCase で、アルファベットの大文字・小文字の相互変換をする方法について解説します。Excel のワークシート関数には、ほぼ同等の機能をもつ LOWER 関数と UPPER 関数があります。LOWER 関数と UPPER 関数については、こちらをご覧ください。
LCase・UCase
VBA の LCase はアルファベットの大文字を小文字に変換し、UCase はアルファベットの小文字を大文字に変換する関数です。簡単なマクロで確認してみましょう。
'[VBA] 大文字から小文字に変換するプロシージャ Sub Upper_To_Lower() Dim myword1 As String Dim myword2 As String myword1 = "KOBATO" myword2 = LCase(myword1) Debug.Print myword2 End Sub '[VBA] 小文字から大文字に変換するプロシージャ Sub Lower_To_Upper() Dim myword1 As String Dim myword2 As String myword1 = "kobato" myword2 = UCase(myword1) Debug.Print myword2 End Sub
Upper_To_Lower を実行すると、myword1 という変数に入っている KOBATO という大文字を小文字に変えて kobato と表示されます。Lower_To_Upper() はその逆に、myword1 という変数に入っている kobato という小文字を大文字に変換して KOBATO と表示されます。
LCase 関数と UCase 関数は、それぞれ引数にセルを指定することもできますが、指定できるのはひとつのセルだけです。セル範囲を指定することはできません。そこで、選択したセルに入力されているアルファベットを全て大文字に変えるには、次のようなマクロを書きます。
'[VBA] 選択範囲のアルファベットを大文字に変換するプロシージャ Sub Uppercase() Dim myrange As Range For Each myrange In Selection myrange.Value = UCase(myrange) Next End Sub
オブジェクト型変数を使っているところがポイントです。
変数 myrange にはセルがそのまま入ります。
For Each myrange In Selection myrange.Value = UCase(myrange) Next
という記述は、選択した範囲内の1つ1つのセルを順に変数 myrange に入れて大文字に変えるという処理をさせます。VBA の For…Each は本当に便利ですね。まあとにかく、下の図のように大文字と小文字の入り混じったデータをまとめて選択してマクロを実行してみてください。
こんなふうに全部大文字に変わります。
コメント