Excelでのデータ処理において、セル内の文字列を一定の単位で分解したい場面はよくあります。たとえば、テキストデータを解析する際や、特定の規則で文字列を整形する場合に役立ちます。
VBA(Visual Basic for Applications)を使えば、文字列を1文字ずつ、または任意の文字数ごとに簡単に分解できます。本記事では、Mid関数を活用して、文字列を前から・後ろから取り出す方法をコード付きで詳しく解説します。さらに、分解した文字列を配列やセルに格納する方法も紹介しますので、用途に応じて活用してください。
マクロではなく、関数として作りたい方は、こちらの記事を参考にしてください。

MID関数を使ってExcelで長文を分割するテクニック
以前の記事で、長い文章「ABCDEFGHIJKLMNOPQRSTUVWXYZ」を1セルに1文字ずつ分割する方法をLENとLEFTを使って紹介しました。しかし、1文字の抽出であれば、もっと便利なMID関数というものを見つけたのでMIDを使った...
結論
手っ取り早く結論が知りたい方は、次のコードをコピペして使ってみてください。
Midで分解して、arrという配列に分ける方法です。
Sub SplitStringToArray()
Dim str As String
Dim arr() As String
Dim i As Integer
str = "Hello" '分解したい文字列
ReDim arr(Len(str) - 1) '文字数に合わせて配列を準備
For i = 1 To Len(str) '文字数分forを回す
arr(i - 1) = Mid(str, i, 1) '文字列全長をi番目から1文字取り出す
Next i
For i = LBound(arr) To UBound(arr) '配列の最小から最大までforで回す
Debug.Print arr(i) 'イミディエイトウィンドウに表示
Next i
End Subちなみに、デバッグで使うイミディエイト ウィンドウは、VBAの 表示 のところにあります。

Mid関数を使って分解する方法
前から1文字ずつ
コード例
Sub SplitStringMid1()
Dim str As String
Dim i As Integer
Dim result As String
str = "Hello"
result = ""
For i = 1 To Len(str)
result = result & Mid(str, i, 1) & vbCrLf
Next i
MsgBox result
End Sub実行結果
H
e
l
l
o前から2文字ずつ
コード例
Sub SplitStringMid2()
Dim str As String
Dim i As Integer
Dim result As String
str = "Hello"
result = ""
For i = 1 To Len(str) Step 2
result = result & Mid(str, i, 2) & vbCrLf
Next i
MsgBox result
End Sub実行結果
He
ll
o後ろから1文字ずつ
コード例
Sub SplitStringMidback1()
Dim str As String
Dim i As Integer
Dim result As String
str = "Hello"
result = ""
For i = Len(str) To 1 Step -1
result = result & Mid(str, i, 1) & vbCrLf
Next i
MsgBox result
End Sub実行結果
o
l
l
e
H後ろから2文字ずつ
コード例
Sub SplitStringMidback2()
Dim str As String
Dim i As Integer
Dim result As String
str = "Hello"
result = ""
For i = Len(str) To 1 Step -2
result = result & Mid(str, i, 2) & vbCrLf
Next i
MsgBox result
End Sub実行結果
o
ll
He分解した文字を表示する方法
配列に格納する
コード例
Sub SplitStringToArray()
Dim str As String
Dim arr() As String
Dim i As Integer
str = "Hello"
ReDim arr(Len(str) - 1)
For i = 1 To Len(str)
arr(i - 1) = Mid(str, i, 1)
Next i
End Subこの方法は、1文字ずつ分解したデータを後で再利用したい場合に便利です。
セルに書き込む
コード例
Sub WriteCharactersToCells()
Dim str As String
Dim i As Integer
str = Cells(1, 1)
For i = 1 To Len(str)
Cells(2, i).Value = Mid(str, i, 1)
Next i
End Sub実行結果(ExcelのA列に表示)
A1: H
A2: e
A3: l
A4: l
A5: oExcelのセルに直接書き込めるため、データを視覚的に確認したいときに便利です。
おまけ
プライマー配列を相補鎖に変換する方法
コード例
Sub SplitStringMidback1()
Dim str As String
Dim i As Integer
Dim result As String
Dim tmp As String
str = "ATTGGGCCCC"
result = ""
For i = Len(str) To 1 Step -1
tmp = Mid(str, i, 1)
Select Case tmp
Case "A"
result = result & "T"
Case "T"
result = result & "A"
Case "G"
result = result & "C"
Case "C"
result = result & "G"
End Select
Next i
MsgBox result
End Sub実行結果
GGGGCCCAATリバースプライマーの配列があっているのか最終確認に便利です。
まとめ
VBAで文字列を数文字ずつに分解する方法として、Mid関数を使った手法を紹介しました。
- 前から1文字・2文字ずつ取り出す方法
- 後ろから1文字・2文字ずつ取り出す方法
- 配列に格納する方法
- セルに書き込む方法
用途に応じて適切なコードを活用すれば、文字列の分解や分析を効率的に行えます。実際に試して、自分の作業に合った方法を見つけてみてください!









コメント