こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

数値データの入ったタブ区切りのテキストファイルが約80個あり、
それらを全てCSVファイルにしたいです。

テキストファイルのデータ形式は以下のようになっています。

339.541091.50
339.921091.50
340.301091.50
340.681057.60
341.061028.22
これがあと数百行あります。

コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。

例えば上のデータ例であれば、
339.541091.50
のように表示されたCSVファイルになってしまいます。

339.54, 1091.50
のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか?

VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。
よろしくお願い申し上げます。

投稿日時 - 2018-03-30 14:06:14

QNo.9483353

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.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!」と表示しています。

投稿日時 - 2018-04-01 09:37:01

ANo.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

投稿日時 - 2018-03-30 20:17:12

ANo.4

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

参考URL:http://www.oborodukiyo.info/Soft/MakeCSV/MakeCSV

投稿日時 - 2018-03-30 17:05:38

ANo.3

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

投稿日時 - 2018-03-30 16:22:55

ANo.2

>コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。
どのような用途に使いたいのですか?
Excelで使いたいときは空白のブックを開いて「外部データの取り込み」でテキストファイルからデータを取り込めます。
また、TAB区切りのテキストファイルの拡張子をコマンドプロンプトでcsvにリネームしてもTABは無くなりません。
提示のデータ(数表)をメモ帳で確かめましたが問題ありませんでした。

>のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか?
テキストエディターの置換機能で変換は可能ですが無駄な作業のような気がします。

>VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。
コーディングしてデバックすることも手間が掛かりますのでコマンドプロンプトで拡張子を書き換えた方が良いでしょう。

投稿日時 - 2018-03-30 15:35:12

ANo.1

>>339.541091.50
>>これがあと数百行あります。

意図しない表示になってるんでしょうかね。

339.54[タブ]1091.50

こういうことでしょうか?


>>カンマ区切りのCSVファイルとして出力する方法はないでしょうか?

複数ファイルに対して文字列置換を行えるツールを使用し、「[タブ]⇒[カンマ]」に置換し、
完了後に、「[txt]⇒[csv]」に拡張子変換かけれるツールを使用すればいいと思いますよ。


既に、何かしらのテキストエディタを使用しているのでしたら、前者の機能は持ち合わせている場合もあるとは思います。

投稿日時 - 2018-03-30 14:20:57

あなたにオススメの質問