[VBA] 文字列を空白文字で区切る ~ Mid, InStr

昔からあるシンプルな関数を使って、文字列を操作してみましょう。
使う関数は、以下の4つです(Lenは使っていませんでした・・・)
黒板の図3
  • Len(s) = 文字列sの文字数を返す
  • Left(s, n) = 文字列sの左からn文字目までの部分文字列を返す
  • Mid(s, n, m) = 文字列sの左からn文字目からm文字分の部分文字列を返す
    ※mが省略された場合は、n文字目から最後までの部分文字列を返す
  • InStr(s, t) = 文字列sの中に文字tが何番目にあるか返す

使い方

まずは、簡単な使い方を見て見ましょう
Sub haiku_asobi()
   Dim haiku As String
   haiku = "冬籠り また寄りそはん この柱"
   
   Dim s As String
   s = haiku
   range("a1").Activate
   
   ActiveCell.value = "元の文字列"
   ActiveCell.offset(0,1).value = s
   ActiveCell.offset(1).Activate
   
   ActiveCell.value = "文字数の長さ(Length)"
   ActiveCell.offset(0,1).value = Len(s)
   ActiveCell.offset(1).Activate
   
   ActiveCell.value = "左から1文字"
   ActiveCell.offset(0,1).value = Left(s, 1)
   ActiveCell.offset(1).Activate
   
   ActiveCell.value = "2文字目から後ろの部分"
   ActiveCell.offset(0,1).value = Mid(s, 2)
   ActiveCell.offset(1).Activate

   ActiveCell.value = """ ""の位置は何番目か?"
   ActiveCell.offset(0,1).value = InStr(s, " ")
   ActiveCell.offset(1).Activate
   
   ActiveCell.value = "空白文字より左部分"
   ActiveCell.offset(0,1).value = Left(s, InStr(s, " "))
   ActiveCell.offset(1).Activate
End Sub

空白文字で区切る

次に、空白文字で区切られた俳句を3つに切り分けて見ましょう
Sub haiku_asobi2()
   Dim haiku As String
   haiku = "冬籠り また寄りそはん この柱"
   
   Dim s As String
   s = haiku
   range("a1").Activate
   Dim n As Integer, m As Integer
   Dim t As String
   
   n = InStr(haiku, " ")
   s = Left(haiku, n - 1)
   
   ActiveCell.value = "初句"
   ActiveCell.offset(0,1).value = s
   ActiveCell.offset(1).Activate

   n = InStr(haiku, " ")
   t = Mid(haiku, n + 1)

   ActiveCell.value = "残り"
   ActiveCell.offset(0,1).value = t
   ActiveCell.offset(1).Activate

   n = InStr(t, " ")
   s = Left(t, n - 1)

   ActiveCell.value = "二句"
   ActiveCell.offset(0,1).value = s
   ActiveCell.offset(1).Activate

   s = Mid(t, n+1)

   ActiveCell.value = "三句"
   ActiveCell.offset(0,1).value = s
   ActiveCell.offset(1).Activate
End Sub
ちなみに、結果をアクティブセルを動かしながら表示しています。

この例では、Split関数を使う方がよい気もしますが・・・