Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


504 / 13645 ツリー ←次へ | 前へ→

【80004】VBA文字列分割 はる 18/6/21(木) 10:58 質問[未読]
【80005】Re:VBA文字列分割 よろずや 18/6/21(木) 16:27 回答[未読]
【80006】Re:VBA文字列分割 はる 18/6/21(木) 17:00 お礼[未読]
【80008】Re:VBA文字列分割 hatena 18/6/22(金) 20:01 回答[未読]
【80009】Re:VBA文字列分割 γ 18/6/22(金) 22:36 発言[未読]
【80017】Re:VBA文字列分割 はる 18/6/25(月) 11:40 お礼[未読]

【80004】VBA文字列分割
質問  はる  - 18/6/21(木) 10:58 -

引用なし
パスワード
   「1=2 3=4 5=AAA 7=8 9=AA BB CC 10=11」このような文を=の右辺と左辺をセットで配列に格納したいのですが、何かいい方法はないでしょうか?
現在はSplitを使ってスペース区切りで分割していたのですが...
スペース区切りだと「9=AA BB CC」の部分が全て分かれて格納されてしまいます。
例として
TextData (1) 1=2
     (2) 3=4
     (3) 5=AAA
     (4) 7=8
     (5) 9=AA BB CC
     (6) 10=11
このように配列に入れたいです。

【80005】Re:VBA文字列分割
回答  よろずや  - 18/6/21(木) 16:27 -

引用なし
パスワード
   ベタですが。

Option Explicit

Sub test()
Const str = "1=2 3=4 5=AAA 7=8 9=AA BB CC 10=11"
Dim Cpos As Long, Spos As Long, Epos As Long
Dim TextData() As String, Count As Long
  Spos = 1
  For Cpos = 1 To Len(str)
    Select Case Mid(str, Cpos, 1)
      Case " "
        Epos = Cpos
      Case "="
        If Epos > Spos Then
          Count = Count + 1
          ReDim Preserve TextData(1 To Count)
          TextData(Count) = Mid(str, Spos, Epos - Spos)
          Spos = Epos + 1
        End If
    End Select
  Next Cpos
  If Cpos > Spos Then
    Count = Count + 1
    ReDim Preserve TextData(1 To Count)
    TextData(Count) = Mid(str, Spos, Cpos - Spos)
  End If
  Stop
End Sub

【80006】Re:VBA文字列分割
お礼  はる  - 18/6/21(木) 17:00 -

引用なし
パスワード
   よろずやさん

ありがとうございます。
参考にさせて頂いたところ上手く出来ました。
とても助かりました。

【80008】Re:VBA文字列分割
回答  hatena  - 18/6/22(金) 20:01 -

引用なし
パスワード
   解決済みですが、面白そうだったので、コード書いてみました。

Sub test2()
  Const str = "1=2 3=4 5=AAA 7=8 9=AA BB CC 10=aa bb"
  Dim TextData() As String
  Dim i As Long, Pos As Long

  TextData = Split(str, "=")
  For i = 0 To UBound(TextData) - 2
    Pos = InStrRev(TextData(i + 1), " ")
    TextData(i) = TextData(i) & "=" & Left(TextData(i + 1), Pos - 1)
    TextData(i + 1) = Mid(TextData(i + 1), Pos + 1)
  Next
  TextData(i) = TextData(i) & "=" & TextData(i + 1)
  ReDim Preserve TextData(i)

  '結果確認
  Debug.Print Join(TextData, vbCrLf)
End Sub

【80009】Re:VBA文字列分割
発言  γ  - 18/6/22(金) 22:36 -

引用なし
パスワード
   参考出品。牛刀かもしれません。

Sub test()
  Dim s As String, t As String
  Dim textData
  
  s = "1=2 3=4 5=AAA 7=8 9=AA BB CC 10=11"

  With CreateObject("VBScript.RegExp")
    .Pattern = "(\d+=)"
    .Global = True
    t = .Replace(s, ",$1")
  End With
  textData = Split(Mid(t, 2), " ,")
  '検証
  Debug.Print Join(textData, vbCrLf)
End Sub

【80017】Re:VBA文字列分割
お礼  はる  - 18/6/25(月) 11:40 -

引用なし
パスワード
   hatenaさん、yさん。

ありがとうございます。
そちらのマクロも参考にさせて頂きたいと思います。

504 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free