こんにちは、Ryoです。
VBAで文字データを読み込む際に、大文字や小文字が混在しているケースが少なくないと思いますが、これを条件分岐で「大文字」と「小文字」で別に判定させたりすると大変な労力になってしまいます。
そんな時はLCase/UCase関数を使って大文字⇔小文字変換を行うと、楽に処理出来ますので、その方法について書いてみたいと思います。
1.変換するには?
冒頭にも書きました通りLCase関数/UCase関数を使いますが、構文は至って簡単で
LCase(文字)・・・指定した文字を小文字に変換
UCase(文字)・・・指定した文字を大文字に変換
このような形ですから覚えやすいので、直ぐに使えますね。
2.使用例サンプル
サンプルとして、表の中の品番を検索して数量を加算していき、メッセージボックスにTotal数量を表示させたいと思います。
但し、品番を人が入力する際に特に決め事は無かったので大文字や小文字が混在している状態になっている為、LCase関数を使って検索上は「小文字に統一」し同一品番であることを判定させる簡易的なサンプルプログラムを書いてみます。
また、表の右側にLCase/UCaseを使った際の文字がどうなるかを表示させています。
◆サンプルコード
Sub Sample1() Dim SearchStr As String Dim i, Cnt As Integer SearchStr = LCase(Cells(3, 2)) Cells(7, 1).Select For i = 1 To 6 'ここで検索文字列と表内の文字が同じかどうか判定 If SearchStr = LCase(ActiveCell) Then Cnt = Cnt + ActiveCell.Offset(0, 1) ActiveCell.Offset(0, 3) = LCase(ActiveCell) ActiveCell.Offset(0, 4) = UCase(ActiveCell) ActiveCell.Offset(1, 0).Select Else ActiveCell.Offset(0, 3) = LCase(ActiveCell) ActiveCell.Offset(0, 4) = UCase(ActiveCell) ActiveCell.Offset(1, 0).Select End If Next i MsgBox "検索品番のTotal出荷数は" & Cnt & "です", vbInformation End Sub
余談ですが、昨日書いた記事でActiveCell.Offsetを説明してたのもあって、敢えてサンプル内に羅列してみました(笑)今回はLCase/UCaseの動作が主なのでコード記述は特に考えず簡易的に書いてます。
このサンプル実行前後の画面は以下になります。
≪実行前≫
≪実行後≫
この通り小文字に変換させて判定させてますので、対象となる品番のTotal数量をカウントしてメッセージボックスに表示しています。
またD列/E列に示すようにLCase/UCaseを使うことで大文字⇔小文字となることがわかっていただけるかと思います。
◆参考
例えば、アルファベットの最初の文字だけを大文字にしたい場合は以下の記述で出来ます。
サンプルとして先程実行したセルD7の文字に対し、先頭だけを大文字にしてみます。
Sub Sample2() MsgBox Application.WorksheetFunction.Proper(Cells(7, 4)) & _ vbCrLf & "先頭文字だけが大文字になってます" End Sub
この通り!Properメソッドを使うと先頭の文字を大文字に出来ますので、覚えておくと使える場面があるかもしれま……末尾が大文字になってますが、これはアルファベットの間に数字などが混在してるので、末尾のwも先頭文字と認識する為です。
例えるとmicrosoftexcelだったらMicrosoftexcelに、microsoft excelだったら、
Microsoft Excelになるということです。
3.まとめ
古い資料等は特に大文字や小文字が混在してることも多いですから、簡単に変換できるLCase/UCaseを覚えておくと便利なのでお薦めです。
全角と半角を変換する方法なんかもありますが、そこはまたいずれ書いてみようと思います。
以上、アルファベットの大文字⇔小文字変換する内容についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo