「vba split 1文字づつ」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが、結構あります。
VBA(Visual Basic for Applications)で、何らかの文字列からSplit関数を使って1文字ずつの配列を取得するには、引数をどう指定すればいいのかを探していた、VBA以外の言語でのプログラミング経験のある方による検索キーワードでしょう。
JavaScriptではString.split()メソッドで一文字ずつの配列が返される
「Split」という名前の関数やメソッドで、何らかの文字列を1文字ずつの配列に分割できるプログラミング言語が、割とあります。
例えば、JavaScriptの場合、
var arr = 'XYZ'.split('')
といったコードで、「X」「Y」「Z」という1文字ずつを要素として持つ配列が作られます。
引数に空白文字列を指定すると、1文字ずつの配列を返してくれるのが、JavaScriptのString.split()メソッドです。
おそらくこのようなプログラミング言語に馴染みのある方が、
「vba split 1文字づつ」
という検索をなさっているのだろうと想像しています。
VBAではSplit関数で一文字ずつの配列にならない
VBAにも配列を返すSplit関数がありますが、JavaScriptのString.split()メソッドとは、引数に空白文字列を指定したときの動きが違います。
VBAのSplit関数は、何らかの区切り文字ごとに分割した配列を返す関数です。
JavaScriptと同じ考え方をして、VBAのSplit関数の場合に、例えば、
Dim arr() As String
arr = Split("XYZ", "")
というコードを実行した場合、「XYZ」という文字列を1つの要素として持つ配列が返されます。
一文字ずつの配列を作るサンプルマクロ
VBAで一文字ずつの配列を作るには、Split関数を利用するのではなく、以下のようにループ処理を行いましょう。
Const TXT = "XYZ"
Dim arr() As String
Dim i As Long
ReDim arr(Len(TXT) - 1)
For i = 0 To UBound(arr)
arr(i) = Mid(TXT, i + 1, 1)
Next i
End Sub
Stopステートメントの箇所で、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、下図のように1文字ずつの配列になっていることが確認できます。
VBAのMid関数の第3引数に「1」を指定すると、第1引数に指定された元の文字列から、第2引数に指定された位置の1文字だけを取得することができます。JavaScriptのString.charAt()メソッドと同じような動きをするわけです。
For~Nextループの中でこのMid関数を使うことで、1文字ずつの配列を取得することができます。
- Newer:TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile
- Older:TextRange.RunsメソッドとTextRange2.Runsプロパティ
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのSplitでは1文字ずつの配列にならない