[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『CSVでの保存の仕方』(たけちゃん)
いつも勉強させていただいております。 CSVでの保存(VBAの記述の仕方)について教えてください。
以下のようなテキストファイルがあります。
コード 120101474599 120101481435 120101489424
これを「test1.csv」として保存た後、オープンすると 表示は次のようになりますが、 コード 1.20101E+11 1.20101E+11 1.20101E+11 それぞれのセルの値は正しく残っています。
ここでこれを「test2.csv」として保存した後、オープンすると 表示は次のようになり、 コード 1.20E+11 1.20E+11 1.20E+11 セルの値は全て、120101000000 になってしまいます。
このように値が変わってしまうことなく、元の値のままの「test2.csv」として保存するには、どのようにVBAで記述すればよいでしょうか? なお、例は1列だけですが、このような12桁以上の数値の列はどこの列とかは決まってなく、場合場合によって不定なので、この辺りも汎用性を持たせたコードにしたいです。 達人の方々のお知恵をお貸しください。よろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
(tkit) 2023/06/01(木) 16:30:58
tkitさん
ご返信有難うございます。 教えていただいたリンクのサンプルコードを試してみましたが、値が変わってしまってダメでした。
(たけちゃん) 2023/06/01(木) 17:14:16
せめてファイルの内容だけでも「Comma Separated Value」ではなく「Comma Separated Formula」で運用していくとか... (無茶な事言ってるのは自分でも分かってます。半分以上冗談のつもりです ^^;)
Sub Test() [A1] = "123456789012345" [A2] = "=""123456789012345""" [A3] = "=""2023/6/1""" [A4] = "AAAAA" [A1:A4].Copy [B1:C1] ActiveWindow.DisplayFormulas = True Sheet1.SaveAs "test.csv", xlCSV ActiveWindow.DisplayFormulas = False ThisWorkbook.Saved = True End Sub
●保存された[test.csv]の内容
123456789012345,123456789012345,123456789012345 "=""123456789012345""","=""123456789012345""","=""123456789012345""" "=""2023/6/1""","=""2023/6/1""","=""2023/6/1""" AAAAA,AAAAA,AAAAA
●ダブルクリックで開いたらこんな感じ [___]|_______A_______|_______B_______|_______C_______| [ 1]| 1.23E+14| 1.23E+14| 1.23E+14| [ 2]|123456789012345|123456789012345|123456789012345| [ 3]|2023/6/1 |2023/6/1 |2023/6/1 | [ 4]|AAAAA |AAAAA |AAAAA |
[A2] ="123456789012345" [A3] ="2023/6/1"
●そのままcsv形式で保存したファイルの内容(指数化した数値が指数のまま保存される) 1.23457E+14,1.23457E+14,1.23457E+14 123456789012345,123456789012345,123456789012345 2023/6/1,2023/6/1,2023/6/1 AAAAA,AAAAA,AAAAA
●[Ctrl+Shift+`]で[数式の表示]状態にしてからcsv形式で保存したファイルの内容 123456789012345,123456789012345,123456789012345 "=""123456789012345""","=""123456789012345""","=""123456789012345""" "=""2023/6/1""","=""2023/6/1""","=""2023/6/1""" AAAAA,AAAAA,AAAAA
当然、保存されたcsvファイルの中身は単純なcsvではなく、Excelで開く事だけを想定した、 もはやExcel以外には使えない代物になってしまいます。 ...だったらcsvである必要が無いですね! 普通にxlsxとかでイイですやんね! こういうお話を伺うと、 csvがデフォルトでExcelに関連付けられてるのって、結構罪深い事だなぁ思ってしまいます。
(白茶) 2023/06/01(木) 18:24:59
私の場合、面倒ですが、Openステートメントで読み書きしてます。
http://officetanaka.net/excel/vba/file/file08c.htm
UTF-8なら、
http://officetanaka.net/excel/vba/file/file11.htm
貼り付けるExcelは文字列にしてますね。
(tkit) 2023/06/02(金) 08:16:26
tkitさん
ご提案有難うございます。
一筋縄ではいかないのは分かったのですが、ご提案いただいた方法は結構面倒なので、以下で対応しようかと思っています。
●全ての列分の2行目を、数値かつ12桁以上かどうかチェックし、その列の書式設定を「数値」にしてCSVで保存する。
これであれば、値を変えることなくCSVファイルとして保存できるかなと。
ただし、2行目が5桁の数値で10行目が12桁の数値であるような場合は対象から抜け落ちてしまいますが、幸い扱っているデータの問題の数値列は、2行目以下全て同じ桁数なので、対応可能かなと思います。
決してスマートではありませんが、簡単なのでこんなのもアリかなって感じです。
他にいいアイデアやご意見等あれば教えてください。よろしくお願いいたします。
(たけちゃん) 2023/06/02(金) 09:56:11
まあ、保存はいくらでも工夫の余地があるでしょう。
先にも申しましたが、 イチバンの問題はcsvがデフォルトでExcelに関連付けられてる事により、 ダブルクリックで開けてしまう事。 Workbooks.Openで開けてしまう事。 何も考えずに開けたら、ゼロ始まりの数値文字列なんかはその時点で試合終了な事です。
>これを「test1.csv」として保存た後、オープンすると >ここでこれを「test2.csv」として保存した後、オープンすると
保存方法だけ熟慮したところで↑のせいで無駄になっちゃいます。
>一筋縄ではいきませんね というのは、確かにそうなんですけども、 先のレスに書かせてもらったテスト結果は 「開く時は普通にオープンする」という制約下でのお話と解釈しての案です。
前提として「VBAで」という事なのだし、 だったら「如何に読み込むか」も考えないといけないですね。 ...という事も言いたかった訳です。 >>結構罪深い事だな ってのはそういう事です。 csvをExcelのファイル形式のひとつだと信じている事務員がウチの社内にもイッパイいます。^^;
(白茶) 2023/06/02(金) 11:21:06
ご意見・アドバイス有難うございます。
確かにオープン時に注意が必要ですもんね。
開けてみて前0がなくなっているのに気が付いて、テキストで再度読み込みっていう作業は今まで何回繰り返してきたか分かりません。
ご意見参考にしながらコード書いてみます。
(たけちゃん) 2023/06/02(金) 12:17:23
知っている人は、CSVファイルの中身を確認するのに
メモ帳やらテキストエディタ等で開いて確認しますが
知らない人は、Wクリックしてエクセルで開いて確認するですか…。
白茶さんの書き込みもなんのこっちゃ状態でした。
質問者が本当に解っているのか少し疑問ですが。
最初話が通じていなかったので。
これで終わりですね、では。
(007は数値か?) 2023/06/02(金) 14:32:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.