[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA ブックの保存をカンマ区切りのUnicodeでやりたい』(ななな)
ブック(シートは1つ)に入力されている値をそのまま
カンマ区切りのUnicode形式で保存したい(拡張子はcsv)のですが、
ブックのSavwAsメソッドの引数FileFormatにxlCSVを指定すると
カンマ区切りにはなりますが、SJISとなります。
xlUnicodeTextを指定するとUnicodeにはなりますがタブ区切りに
なってしまいます。
カンマ区切りのUnicodeで保存する方法はないでしょうか?
< 使用 Excel:Excel2016、使用 OS:Windows10 >
xlUnicodeTextで作成されたテキストファイルはUTF-16(LE)形式なので、 FileSystemObjectのTextStreamでFormat:=TristateTrueにして作成したテキストファイルと同じですね
一旦xlUnicodeTextでタブ区切りのまま保存して、TextStream(か、普通にエディタ等)でタブをカンマに置き換える か xlCSVでSJISで保存し、TextStreamで読み込んで、Format:=TristateTrueで吐き出しし直す か
(たぶん後者の方がお手軽っぽいですね)
(白茶) 2022/10/14(金) 10:29:26
あ、でもそもそも目的がSJISに無い文字の文字化け対策なんだったら後者じゃ意味ないですね ^^;
(白茶) 2022/10/14(金) 10:33:55
読み込みなおすとデータ量のせいもあって(最大で30万行くらいあります)かなり時間を
要してしまいどうにか短縮できなかといろいろ思案していたところです。
一発でできないとわかっただけでも良かったです。
(ななな) 2022/10/14(金) 11:00:05
一応、前者の場合の簡単な例でも貼っておきますね
'参照設定 ================================================================= 'Microsoft Scripting Runtime '========================================================================== Sub test() Const FN_IN = "C:\xxx\text_in.txt" Const FN_OUT = "C:\xxx\text_out.csv" Dim i As Scripting.TextStream, o As Scripting.TextStream, aLine As String With New Scripting.FileSystemObject Set o = .OpenTextFile(FN_OUT, ForWriting, True, TristateTrue) Set i = .OpenTextFile(FN_IN, ForReading, , TristateTrue) Do If i.AtEndOfStream Then Exit Do aLine = i.ReadLine aLine = Replace$(aLine, vbTab, ",") o.WriteLine aLine Loop i.Close o.Close End With End Sub
まあ、ご承知とは思いますが、 Unicode形式のカンマ区切りデータ作って拡張子をcsvにしても Excelで開いた時に各セルにカンマで区切られて値が展開されるとは限りません。
(白茶) 2022/10/14(金) 11:16:39
ちなみに、28万行×30列(115MB)のテキストで↑実行してみたら、処理時間9.78秒でした。
(白茶) 2022/10/14(金) 11:32:45
参考にさせていただきますね!
(ななな) 2022/10/14(金) 11:57:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.