Excel VBA質問箱 IV

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

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


8749 / 13644 ツリー ←次へ | 前へ→

【31342】Replace(strTEXTDATA,",,",",")できません ごん 05/11/18(金) 0:01 質問[未読]
【31343】Re:連続したカンマを取り除きたい かみちゃん 05/11/18(金) 0:16 回答[未読]
【31344】Re:Replace(strTEXTDATA,",,",&... ichinose 05/11/18(金) 7:50 発言[未読]
【31409】Re:Replace(strTEXTDATA,",,"... ごん 05/11/19(土) 0:15 お礼[未読]

【31342】Replace(strTEXTDATA,",,",&q...
質問  ごん E-MAIL  - 05/11/18(金) 0:01 -

引用なし
パスワード
   はじめまして、教えてください

エクセルで文字列"AA,BB,RR,,,,AA,BB,CC,DD,,,QQ,DD,FF”のデータ
があるとしてこれの余分なカンマをとって、CSVとして扱いたいのですが

strTEXTDATA=Replace(strTEXTDATA,",,",",")

ではできないようです。他の方法ありますか?

【31343】Re:連続したカンマを取り除きたい
回答  かみちゃん  - 05/11/18(金) 0:16 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>エクセルで文字列"AA,BB,RR,,,,AA,BB,CC,DD,,,QQ,DD,FF”のデータ
>があるとしてこれの余分なカンマをとって、CSVとして扱いたいのですが
>
>strTEXTDATA=Replace(strTEXTDATA,",,",",")
>
>ではできないようです。他の方法ありますか?

",,"を","に変えるのはできるのですが、このままでは、
",,,"という文字列だった場合、変換後が",,"になってしまいます。

そこで、以下のようにすれば、できると思います。

Sub Macro1()
 Dim strTEXTDATA As String, strTEXTDATANEW As String
 Dim i As Long
 
 strTEXTDATA = "AA,BB,RR,,,,AA,BB,CC,DD,,,QQ,DD,FF"
 strTEXTDATANEW = ""
 For i = 0 To UBound(Split(strTEXTDATA, ","))
  If Split(strTEXTDATA, ",")(i) <> "" Then
   If strTEXTDATANEW = "" Then
    strTEXTDATANEW = Split(strTEXTDATA, ",")(i)
   Else
    strTEXTDATANEW = strTEXTDATANEW & "," & Split(strTEXTDATA, ",")(i)
   End If
  End If
 Next
 MsgBox "旧  " & strTEXTDATA & vbCrLf & _
     "新  " & strTEXTDATANEW & vbCrLf & _
     "参考 " & Replace(strTEXTDATA, ",,", ",")
End Sub

【31344】Re:Replace(strTEXTDATA,",,"...
発言  ichinose  - 05/11/18(金) 7:50 -

引用なし
パスワード
   ▼ごん さん、かみちゃんさん、おはようございます。
>エクセルで文字列"AA,BB,RR,,,,AA,BB,CC,DD,,,QQ,DD,FF”のデータ
>があるとしてこれの余分なカンマをとって、CSVとして扱いたいのですが
>
>strTEXTDATA=Replace(strTEXTDATA,",,",",")

正規表現を使った別解です。
'=================================================
Sub test()
  Dim cnvstr As String
  cnvstr = "AA,BB,RR,,,,AA,BB,CC,DD,,,QQ,DD,FF"
  MsgBox cnvstr & vbCrLf & Space(Len(cnvstr) / 2) & "↓" & _
     vbCrLf & repeat_Reduct(cnvstr, ",")
End Sub
'=====================================================================
Function repeat_Reduct(f_str As String, r_str As String) As String
  Dim regEx
  Set regEx = CreateObject("VBScript.RegExp")
  regEx.Pattern = r_str & "+"
  regEx.IgnoreCase = True
  regEx.Global = True
  repeat_Reduct = regEx.Replace(f_str, r_str)
  Set regEx = Nothing
End Function

確認してみて下さい。

【31409】Re:Replace(strTEXTDATA,",,"...
お礼  ごん E-MAIL  - 05/11/19(土) 0:15 -

引用なし
パスワード
   ▼ichinose さん & かみちゃんさん大変ありがとうございました。

まだまだエクセル勉強中です。
ずっと悩んでいたことを、解決していただきありがとうございました。

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