Excel VBA質問箱 IV

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

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


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

【42372】テキストファイルの中の余計なカンマを消す方法 どらちゃん 06/9/8(金) 14:09 質問[未読]
【42374】Re:テキストファイルの中の余計なカンマを... ichinose 06/9/8(金) 19:45 発言[未読]
【42381】Re:テキストファイルの中の余計なカンマを... [名前なし] 06/9/8(金) 23:07 回答[未読]
【42424】Re:テキストファイルの中の余計なカンマを... どらちゃん 06/9/11(月) 14:26 お礼[未読]

【42372】テキストファイルの中の余計なカンマを消...
質問  どらちゃん  - 06/9/8(金) 14:09 -

引用なし
パスワード
   おそらくちゃんと説明が出来ないくらいわかっていないので
恐縮なのですが、もし教えていただけたら幸いです。

EXCEL形式の「○○.csv」というファイルをNOTEPADから開いたとき、データはカンマ区切りになりますが、このうち余分なカンマを削除したいのです。
具体的には、3行のデータがあり、2行目はそのままで一行目と3行目の右側にある余分なカンマを消したい。

H,SF02,43,20060901,110000,,,,,,,,,
7001,,,,,,,,,,,K,2,43
F,,,,,,,,,,,,,



H,SF02,43,20060901,110000
7001,,,,,,,,,,,K,2,43
F

ということをマクロでさせたいのです。
いろいろ検索してみましたが普通のEXCELのVBAと使用する単語(?)が違うのか自分で応用できそうになかったので、質問してしまいました。

どなたかどうかお願いしますm(_ _)m

【42374】Re:テキストファイルの中の余計なカンマ...
発言  ichinose  - 06/9/8(金) 19:45 -

引用なし
パスワード
   ▼どらちゃん さん:
こんばんは。

>EXCEL形式の「○○.csv」というファイルをNOTEPADから開いたとき、データはカンマ区切りになりますが、このうち余分なカンマを削除したいのです。
>具体的には、3行のデータがあり、2行目はそのままで一行目と3行目の右側にある余分なカンマを消したい。
これは、正規表現を使わなくても出来ますけど、たまにここで使わないと
忘れそうになるので・・・

標準モジュールに
'================================================================
Sub main()
  Dim flnm As Variant
  Dim fldmy As String
  Dim i_flno As Long
  Dim o_flno As Long
  flnm = Application.GetOpenFilename("CSVファイル,*.csv")
  If TypeName(flnm) <> "Boolean" Then
    On Error GoTo open_error
    i_flno = FreeFile()
    Open flnm For Input As #i_flno
    o_flno = FreeFile()
    fldmy = Replace(flnm, ".csv", ".tmp", , , vbTextCompare)
    Open fldmy For Output As #o_flno
    With CreateObject("VBScript.RegExp")
     .Pattern = ",+$"
     .IgnoreCase = True
     .Global = True
     Do Until EOF(i_flno)
       Line Input #i_flno, txt
       Print #o_flno, .Replace(txt, "")
       Loop
     End With
    Close #i_flno
    Close #o_flno
    Kill flnm
    Name fldmy As flnm
    On Error GoTo 0
    End If
  Exit Sub
open_error:
  MsgBox Err.Number & " : " & Err.Description
End Sub


でmainを実行してみてください。

ファイル選択ダイアログから対象のcsvファイルを選択してください。
OKボタンをクリックすると直ちに処理が開始されます。

処理が終了したら、対象csvファイルの中身を確認してみてください。

【42381】Re:テキストファイルの中の余計なカンマ...
回答  [名前なし]  - 06/9/8(金) 23:07 -

引用なし
パスワード
   >このうち余分なカンマを削除したいのです。
の部分だけですが。

'(1) Replace関数で、カンマをスペースに置換する。
'(2) RTrim関数で、(1)の結果の文字列の右側のスペースを全て削除する。
'(3) Len関数で、(2)の結果の文字列の長さを求める。
'(4) Left関数で、元の文字列の左から(3)で求めた長さの分だけ抜き出す。

Sub Macro1()
Dim S As String

  S = "H,SF02,43,20060901,110000,,,,,,,,," '元の文字列
  
  S = Left(S, Len(RTrim(Replace(S, ",", " ")))) '(1)〜(4)の処理
  
  MsgBox S

End Sub

【42424】Re:テキストファイルの中の余計なカンマ...
お礼  どらちゃん  - 06/9/11(月) 14:26 -

引用なし
パスワード
   ichinoseさん、名無しさん

ありがとうございます。無事解決しました!
イメージはあったのですがVBScriptが書けないので、どうすることも出来ず・・というところでした。
ichinoseさんにいただいたものをそのまま使わせていただきました。

いつも本当にありがとうございます。
また、とても勉強にもなります。少しVBScriptの本でも買って勉強してみようかな。。

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