• 締切済み

タブ区切りtxtファイルをCSVファイルにしたい

数値データの入ったタブ区切りのテキストファイルが約80個あり、 それらを全てCSVファイルにしたいです。 テキストファイルのデータ形式は以下のようになっています。 339.54 1091.50 339.92 1091.50 340.30 1091.50 340.68 1057.60 341.06 1028.22 これがあと数百行あります。 コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。 例えば上のデータ例であれば、 339.541091.50 のように表示されたCSVファイルになってしまいます。 339.54, 1091.50 のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか? VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。 よろしくお願い申し上げます。

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.6

「VBScript」による回答ですので、「Windows限定」です。 このプログラムは、タブ区切りの「~.txt」ファイル群が存在するフォルダにプログラムファイルを放り込んで、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。 フォルダ内のすべての「~.txt」ファイルを、一括置換で、「<Tab>」→「,」に置換して、同じフォルダ内に、同じ名前(「abc.txt」→「abc.csv」)で保存します。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 できたプログラムファイル(「~.vbs」ファイル)を、これから処理したい、「~.txt」ファイル群が存在するフォルダに放り込んで、ダブルクリックするだけです。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim a, cv, f, gf, n, so, tx Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "txt" Then n = so.GetBaseName(f.Name) Set tx = so.OpenTextFile(gf & "\" & f.Name, 1) Set cv = so.OpenTextFile(gf & "\" & n & ".csv",2, True) a = tx.ReadAll a = Replace(a, vbTab, ",") cv.Write a tx.Close cv.Close Set tx = Nothing Set cv = Nothing End If Next Set gf = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしていますが、今回は特に、「txt」や「csv」というテキストファイルを扱うのにも必要です。 Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) プログラムファイルの存在するフォルダを取得しています。 For Each f In gf.Files そのフォルダ内のすべてのファイルを1つずつ処理。 If LCase(so.GetExtensionName(f.Name)) = "txt" Then もし、拡張子が「txt」なら、 n = so.GetBaseName(f.Name) ベースネーム(「abc.txt」→「abc」)を調べています。 Set tx = so.OpenTextFile(gf & "\" & f.Name, 1) 「読み込み専用」で開いています。 Set cv = so.OpenTextFile(gf & "\" & n & ".csv",2, True) 同じフォルダ内に、同じ名前で「csv」として、「書き込み専用」で新規作成しています。 a = tx.ReadAll 一気に全部読み込んでいます。 a = Replace(a, vbTab, ",") 一括置換で、「<Tab>」を「,」に置換しています。 cv.Write a 書き込んでいます。 tx.Close cv.Close Set tx = Nothing Set cv = Nothing 両ファイルを閉じています。 End If Next を、すべてのファイルで繰り返しています。 Set gf = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

案1 >例えば上のデータ例であれば、 >339.541091.50 >のように表示されたCSVファイルになってしまいます。 この状態の時に、 対象列(A列)を選択して、データタブ、区切り位置と選ぶと 横方向に4つのセルへ分割できます。 これをcsv形式で保存する。 案2 他の方が紹介していましたが 課題ファイルをメモ帳で開き、 タブをカンマに置き換えます。 https://www.ipentec.com/document/windows-notepad-search-tab-character が参考になります。 案3 VBAでイケルなら、 次のようなコードでいかがでしょうか。 対象ファイル格納フォルダー(※)に対象ファイル全数を格納すれば、 一気に処理ができます。 Sub MySub()  Const FromDir = "D:\wk"   '対象ファイル格納フォルダー(※)  Const ToDir = "D:\NewDir"  '出力するcsvファイル格納フォルダー    Dim GetFullName As String  Dim PutFullName As String  Dim FSO As Object    GetFullName = Dir(FromDir & "\*.*")    Do   If GetFullName = "" Then Exit Sub      GetFullName = FromDir & "\" & GetFullName      Set FSO = CreateObject("Scripting.FileSystemObject")   PutFullName = ToDir & "\" & FSO.GetBaseName(GetFullName) & ".csv"      Workbooks.OpenText Filename:=GetFullName, Tab:=True   ActiveWorkbook.SaveAs Filename:=PutFullName, FileFormat:=xlCSV, _     CreateBackup:=False   ActiveWindow.Close      Set FSO = Nothing      GetFullName = Dir()    Loop End Sub

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.4

参考URLのソフトはどうでしょうか。 CSVファイルを開くときは、「囲みなし」、「タブ区切り」を指定して開き、保存する時に「囲みなし」、「カンマ区切り」で保存すると希望のことができると思います。

参考URL:
http://www.oborodukiyo.info/Soft/MakeCSV/MakeCSV
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

例データの、ドットの場所にTAB記号が入っているのか。そのことを質問に明確に書かないでどうする。テキストのファイルの「TABキー記号」を「カンマ」に変えるのは、テキストエディタ―などのソフトの置換作業で一発ではないのか? 「メモ帳」にも、操作で置換があるようだ。 VBAでやっても、簡単なコードでは?それのコードを書けというのか? >VBAの知識が少・・ その問題の場面場面でコードがどうなるか勉強しないと、その言語の文法だけかじっていても、全く役に立たない経験はないか?

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。 どのような用途に使いたいのですか? Excelで使いたいときは空白のブックを開いて「外部データの取り込み」でテキストファイルからデータを取り込めます。 また、TAB区切りのテキストファイルの拡張子をコマンドプロンプトでcsvにリネームしてもTABは無くなりません。 提示のデータ(数表)をメモ帳で確かめましたが問題ありませんでした。 >のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか? テキストエディターの置換機能で変換は可能ですが無駄な作業のような気がします。 >VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。 コーディングしてデバックすることも手間が掛かりますのでコマンドプロンプトで拡張子を書き換えた方が良いでしょう。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>339.541091.50 >>これがあと数百行あります。 意図しない表示になってるんでしょうかね。 339.54[タブ]1091.50 こういうことでしょうか? >>カンマ区切りのCSVファイルとして出力する方法はないでしょうか? 複数ファイルに対して文字列置換を行えるツールを使用し、「[タブ]⇒[カンマ]」に置換し、 完了後に、「[txt]⇒[csv]」に拡張子変換かけれるツールを使用すればいいと思いますよ。 既に、何かしらのテキストエディタを使用しているのでしたら、前者の機能は持ち合わせている場合もあるとは思います。

関連するQ&A