スポンサーリンク

Excelマクロ入門!VBAで文字列を数文字ずつ分解する方法

オフィスソフト
オフィスソフト
この記事は約6分で読めます。

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: o

Excelのセルに直接書き込めるため、データを視覚的に確認したいときに便利です。

おまけ

プライマー配列を相補鎖に変換する方法

コード例

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文字ずつ取り出す方法
  • 配列に格納する方法
  • セルに書き込む方法

用途に応じて適切なコードを活用すれば、文字列の分解や分析を効率的に行えます。実際に試して、自分の作業に合った方法を見つけてみてください!

コメント

タイトルとURLをコピーしました