[[20221014100200]] 『VBA ブックの保存をカンマ区切りのUnicodeでやりax(ななな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


白茶様、返信いただきありがとうございます。
コードまでご提示いただき恐縮です。
10秒かからずくらいで処理できるんですね。

参考にさせていただきますね!
(ななな) 2022/10/14(金) 11:57:20


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.