#11_2 文字列の変換
大文字と小文字の変換
LCase関数は「大文字→小文字」、UCase関数は「小文字→大文字」にアルファベットを変換する関数です。
使い方も非常に簡単なのですが、ただ注意しなければならないのは「セル範囲に対して使うことができない」という点です。セル範囲に対して使いたい時には「For...Next」や「Do...Loop」などの繰り返しによって処理をする必要があります。
文字列の書式を変換する
文字列を変換する際に、最も便利なのがStrConv関数です。これはLCase、UCase関数の性質も持っていますし、半角を全角にしたり、ひらがなをカタカナに変換することもできます。
StrConv(文字列, 変換方法 〔, LCID〕)
という構文で用います。文字列には変換したい文字列を入力しますが、変換方法に入れる定数の一覧を下に示しておきます。
これを用いることで、様々な文字変換を自在に操ることができます。
定数 | 値 | 意味 |
---|---|---|
vbUpperCase | 1 | 大文字に変換する |
vbLowerCase | 2 | 小文字に変換する |
vbProperCase | 3 | 各単語の先頭文字を大文字に変換する |
vbWide | 4 | 半角を全角に変換する |
vbNarrow | 8 | 全角を半角に変換する |
vbKatakana | 16 | ひらがなをカタカナに変換 |
vbHiragana | 32 | カタカナをひらがなに変換 |
vbUnicode | 64 | ANSIからUnicodeに変換 |
vbFromUnicode | 128 | UnicodeからANSIに変換 |
この関数を利用したマクロを下に示します。特にvbProperCaseは、「各単語の先頭文字を大文字に変換する」という機能なのでかなり便利です。
Chr関数で文字コードに対応する文字列を返す
ちょっと慣れないかもしれませんが、ASCIIコードに対応する文字列を返すChr関数というものがあります。「0」や「V」などの文字にももちろんコードは割り当てられているのですが、「タブ」や「ラインフィード」といった制御文字にもコードが割り当てられており、それらを利用することで、InputBox関数などで文字列の中にタブや改行を含めることが可能になります。
ちなみにタブの文字コードは「9」、ラインフィードは「10」、キャリッジリターンは「13」ですので、文字列中に例えば改行したい時には「Chr(13)」と記述すれば改行されます。
また、VBAにおいて制御文字には次の組み込み定数が割り当てられており、これらで代用することもできます。
定数 | 値 | 意味 |
---|---|---|
vbLf | Chr(10) | ラインフィード |
vbCr | Chr(13) | キャリッジリターン |
vbCrLf | Chr(13)+Char(10) | キャリッジリターン+ラインフィード |
Asc関数で文字列に対応する文字コードを返す
こちらはChr関数の真逆で、任意の文字列から文字コードを取得するための関数です。ただし、文字コードを返すのは指定した文字列の先頭文字に関してのみです。
なので、すべての文字の文字コードを取得したい場合には、1文字ずつ繰り返し処理を行う必要があります。
スペースを削除する関数
文字列変換の関数は多くて覚えるのは大変ですが、業務の処理などで文字列中のスペースを削除したいという状況になることは意外に多いものです。
VBAには文字列先頭のスペースを削除するLTrim関数、末尾のスペースを削除するRTrim関数、さらに両方のスペースを削除するTrim関数があります。
(重要)文字列を置換するReplace関数
VBA関数の例としてあげたReplace関数ですが、この章の中で最も使用頻度が高く、重要な関数になります。構文をもう一度書くと、次のようになります。例のごとく省略可能な引数は特に覚えなくて結構です。
Replace(文字列, 検索文字列, 置換文字列〔, 開始位置〔, 置換数〔, 比較モード〕〕〕)
この構文の意味は「文字列」の中にある「検索文字列」を「置換文字列」で置き換えるという意味になります。
以下に例を示しておきます。ちなみにスペースを削除することもできてしまいます。