プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。
VBAについて聴きたいです。プログラムの経験は全くないので、どなたか教えていただけないでしょうか?
質問は昨日とほぼ同じですが、()が二重になった場合はどうすれば良いでしょうか?以下は質問になっております。

C15セルのテキストを分析して、項目とデータのペアを作成し、D列に項目、E列にデータという形式で出力してください。
AMP=$AWR29,SISP=BBWE,BLCK=(OLD,(30,20),CLEAN,CLEAN),CNIY=(DUSDA,3),GREEN=CB,SPACE=(GLU,RED)

=の前の文字列を項目列で、
=の後の文字列(,(,))を含む、データ列にしたいです。
以上です。どうぞ宜しくお願い致します。

A 回答 (3件)

昨日の続き



Sub SeparateData2()
 Dim RegEx As Object
 Dim Ms, m
 Dim sData As String
 Dim cnt As Long, i As Long
 Dim ArBuf, buf, n
 Set RegEx = CreateObject("VBScript.RegExp")
 With RegEx
  .Global = True: .IgnoreCase = True: .MultiLine = True
  .Pattern = "(,)([A-Z]{3,}=)"  'アルファベット3文字以上 = の意味
 End With
 '------------Beginning -------
 sData = Range("C17").Value
 cnt = Len(sData) - Len(Replace(sData, "=", "")) '=の数
 ReDim Ar(cnt, 1) '格納用の配列変数
 Set Ms = RegEx.Execute(sData)
 buf = sData
 For Each m In Ms
  With m.SubMatches
   buf = Replace(buf, .Item(0) & .Item(1), ";" & .Item(1), , 1)
  End With
 Next
 ArBuf = Split(buf, ";")
 For Each n In ArBuf
  Ar(i, 0) = Split(n, "=")(0)
  Ar(i, 1) = Split(n, "=")(1)
  i = i + 1
 Next
 Range("D1").Resize(, 2).Value = Array("項目", "データ")
 Range("D2").Resize(cnt, 2).Value = Ar
End Sub
    • good
    • 0
この回答へのお礼

WindFaller様
ご回答どうもありがとうございました。参考にさせて頂きます。

お礼日時:2018/04/17 07:44

お疲れさまです。



他の方が回答いただいているので、いらないとは思いますが、ヒントだけ記載させて頂きます。

InStrRev

を使用すると、))の後ろの側の場所を取得することができます。


大変だと思いますが、頑張ってください。

マクロを記載しても良かったのですが、自分で考えてもらった方が将来役立つと思い記載しませんでした。

失礼します。
    • good
    • 0
この回答へのお礼

プログラマーもっくん様
ヒント、どうもありがとうございました。みんな様のお陰で解決できました。

お礼日時:2018/04/17 21:19

”("の数を数える変数を定義。


”("があったら数をカウントアップ。
")"があったら数をカウントダウン。
数=0になったら()終了。
    • good
    • 0
この回答へのお礼

よろずやkinchan
アドバイスどうもありがとうございました。参考にさせて頂きます。

お礼日時:2018/04/17 07:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!