Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのSplitでは1文字ずつの配列にならない

VBAのSplitでは1文字ずつの配列にならない

「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では1文字ずつの配列にならない

一文字ずつの配列を作るサンプルマクロ

VBAで一文字ずつの配列を作るには、Split関数を利用するのではなく、以下のようにループ処理を行いましょう。

Sub 一文字ずつの配列にする()
 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

 Stop
End Sub

Stopステートメントの箇所で、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、下図のように1文字ずつの配列になっていることが確認できます。

VBAのSplitでは1文字ずつの配列にならない

VBAのMid関数の第3引数に「1」を指定すると、第1引数に指定された元の文字列から、第2引数に指定された位置の1文字だけを取得することができます。JavaScriptのString.charAt()メソッドと同じような動きをするわけです。

For~Nextループの中でこのMid関数を使うことで、1文字ずつの配列を取得することができます。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのSplitでは1文字ずつの配列にならない

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.