こんにちは、Ryoです。
VBAで処理する中で文字列に対する処理を行うことも多いですが、場合によっては文字の数を取得してループ処理につなげることで、特定文字を抽出したりすることも出来ます。この文字列の長さを取得するにはLen関数/Mid関数を使いますので、今回はその内容について書いていこうと思います。
1.サンプル概要
今回は至ってシンプルなので概要と言うほどでもないのですが、セルA1に「ExcelVBA」と記入されているとします。その文字列の長さ(文字数)を取得してメッセージボックスに表示すると共に、B列には1文字ずつ取得してセルB1から順に表示していきます。
実行結果としては以下の通りです。
2.サンプルコード
Sub Sample1() 'セルA1の文字数を取得 MsgBox Len(Cells(1, 1).Value) & "文字です" '取得した文字数分ループ処理を実行 For i = 1 To Len(Cells(1, 1).Value) 'セルA1も文字に対し、先頭から1ヶ毎取得 Cells(i, 2) = Mid(Cells(1, 1).Value, i, 1) '下のセルへ移動 ActiveCell.Offset(1, 0).Select Next i End Sub
サンプルもシンプルなだけにコードもシンプルです(笑)
◆Len関数
先ず文字数の取得にはLen関数を使用します。
Len(文字列)
Len(string)構文もこの通りシンプルですが、このLen関数は文字の半角/全角は区別しないので純粋に文字数をカウントしてくれます。他には関連するところでLenB関数という文字列をバイト数で返してくれるものがありますが、ここでは割愛します。
サンプルでLen(Cells(1, 1).Value)としていますので、メッセージボックスではセルA1から取得した文字数が表示されたということです。
◆Mid関数
次のFor~Nextでの処理ですが、ここでは先程のように取得した文字数分ループ処理を実行しています。その中で1文字毎に取得する為に使用するのがMid関数になります。
Mid(文字列,開始位置,取得する文字数)
構文Mid(string,start,length)はこの通りですが、文字列に指定した中から「開始位置」と「取得する文字数」を指定するので、Mid(Cells(1, 1).Value, i, 1)とすればセルA1文字列に対し変数i(1~8)で先頭から順に指定して1文字毎取得してくれます。
ちなみに取得する文字数(length)を省略すると文字列の最後まで取得する形になります。
後は取得した1文字をセルB1から下へ順に表示していけばサンプル結果の通りです。
3.まとめ
文字列の長さ(文字数)取得ならLen関数、文字列の中から指定した一部を取得するならMid関数を使えば上述の通り特に難しいこともなく処理できます。私の経験上ですが実際運用する場合はセットで使うことが多いように思えますので、今回一緒に書いています。
これまで書いてきた記事のサンプルコード内で度々使っている気がしますから利用頻度も利用価値も高いものと思いますから、知っておくと何かと便利なものです。
以上、文字列の長さ/指定文字(一部)を取得する方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo