はい。今回はタイトルにあるように、VBA で文章を1文字ずつバラバラにして配列にぽいっと放り込むマクロを作ってみようと思います。たとえば、
「こばとはエクセルが大好きです」
という文章を
「[こ][ば][と][は][エ][ク][セ][ル][が][大][好][き][で][す]」
のように分解して配列要素とするわけです。え? そんなマクロをいったい何に使うのかって? … 文章作成ソフト作ったり、文字を暗号文に変えたり(近日中に公開予定)、けっこう色々なことに応用できる … かもしれません。
【VBA】文章を1文字ずつばらして配列に入れるプロシージャ
まあとにかく、こんなかんじのプロシージャになります。
'[VBA] 文字列を1字ずつバラバラにして配列に入れるマクロ Option Base 1 Sub String_Array() Dim i As Integer Dim mylen As Integer Dim mystr As String Dim wd() As String '文章を用意します mystr = "エクセルハイマスターこばとです" '文章の文字数を数えます mylen = Len(mystr) '配列の要素数を確定します ReDim wd(mylen) '1文字ずつ配列に入れます For i = 1 To mylen wd(i) = Mid(mystr, i, 1) Debug.Print wd(i) Next i End Sub
String_Array を実行すると、配列に1文字ずつ格納されます。
Debug.Print のコードを入れてあるので、イミディエイトウィンドウに文字が縦にずらずらと表示されますが、必要なければこの部分のコードは削ってくださいな。このマクロでは動的配列(予め要素数を定めない配列)を使っているので、
mylen = Len(mystr)
というコードで文章の文字数をカウントして、
ReDim wd(mylen)
で配列の要素数を決定しています。あとは Mid 関数を使って文章から 1 つずつ文字を抜き出して配列に放り込んでいくだけです。
配列をワークシートに入力したい場合は次のコードをご使用ください。
'[VBA] 1文字ずつセルに入力するマクロ Sub String_To_Cell() Dim i As Integer Dim mylen As Integer Dim mystr As String Dim wd() As String mystr = "エクセルハイマスターこばとです" mylen = Len(mystr) ReDim wd(mylen) For i = 1 To mylen wd(i) = Mid(mystr, i, 1) Cells(1, i) = wd(i) Next i End Sub
String_To_Cell() を実行すると、「エクセルハイマスターこばとです」が分解されて、1文字ずつセルに入力されます。
≫【VBA】Split関数の使い方
今話題の ChatGPT さんにもマクロを作成してもらいましたが、大体同じようなコードになりました。
Sub SplitTextToArray() Dim inputText As String Dim outputArray() As String Dim i As Long ' 入力された文章を取得 inputText = InputBox("文章を入力してください。") ' 配列のサイズを設定 ReDim outputArray(1 To Len(inputText)) ' 文字を1文字ずつバラバラにして配列に格納 For i = 1 To Len(inputText) outputArray(i) = Mid(inputText, i, 1) Next i ' 結果を表示 For i = 1 To Len(inputText) Debug.Print outputArray(i) Next i End Sub
SplitTextToArray を実行すると、ダイアログボックスが表示され、そこに文章を入力するように求められます。文章を入力した後、マクロは文字を 1 文字ずつバラバラにして配列に格納します。最後にデバッグウィンドウにバラバラにされた文字が表示されます。
コメント