Excelシートのテキストファイル化

今のExcelのシート上のデータをテキストとして保存する場合の、下記の赤線の5個のパターンについての比較である。単なる確認的資料である。
これはExcelのファイル保存時のダイアログの場合に限定したものである。VBAで独自のフォーマットで保存する場合などは不定型なので対象外である。

以前のExcel今のExcel

メモ
[1] CSV (コンマ区切り)(*.csv)
[2] CSV UTF-8 (コンマ区切り)(*.csv)
  これが今のExcelで追加されている。
[3] テキスト (タブ区切り)(*.txt)
[4] テキスト (スペース区切り)(*.prn)
[5] Unicode テキスト (*.txt)

参考
以前のExcelとテキスト化(ipc_0107)

新規に追加された「CSV UTF-8 (コンマ区切り)(*.csv)」以外は、作成されるファイルはすべて以前と同じである(骨董ソフトだから当然か)。

また、どうでもいいことだが、以前は「カンマ」としていたが、今は「コンマ」になっている(殿様商売だから当然か)。

この実験に使ったセル内改行入りのシートは次のようなものである。


メモ
文字コートの確認に使う文字コードデータ(当サイトでの定番である/笑)。
文字コード
UNICODE672C75307F8E7A427BE05D0E611B
SHIFT_JIS967B936394FC95E48EC28DE888A4
EUC-JPCBDCC5C4C8FECAE6BCC4BAEAB0A6
JIS4B5C4544487E4A663C443A6A3026
区点43-6037-3640-9442-7028-3626-7416-06

さて、この確認テストで新たにわかったことがある。

重要
メモ帳ではCRLF改行だけでなくLF改行もCR改行も改行として表示される。

以前はCRLF改行だけしか改行として表示されなかった。これはメモ帳のUTF-8のデフォルト化に匹敵するほどのコペルニクス的転回であるが、あの時は気がつかなかった
したがって、他のエディタとは表示上で差が出ることはなくなっている。以前は差があった。


CSV (コンマ区切り)(*.csv)

文字コードはShift_JISである。


16進ダンプ : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 --- : ----------------------------------------------------------- 000 : 96 7B 93 63 94 FC 95 E4 2C 22 8E C2 8D E8 88 A4 0A 93 B6 8A 002 : E7 8B 90 93 FB 22 2C 94 5C 94 4E 97 E6 93 DE 0D 0A 22 95 D0 004 : 95 BD 82 C8 82 AC 82 B3 0A 93 C6 90 67 8C E4 8E 4F 89 C6 22 006 : 2C 8E F0 88 E4 98 61 89 CC 8E 71 2C 90 58 8C FB 94 8E 8E 71 008 : 0D 0A 8B 67 89 69 8F AC 95 53 8D 87 2C 8D 82 8B B4 82 D0 82 010 : C6 82 DD 2C 22 E4 DD 93 63 8B 76 8E 71 0A 94 4E 95 73 91 8A 012 : 89 9E 82 C9 94 FC 90 6C 22 0D 0A

「,」(コンマ)は16進表示では「0x2C」になる。
「"」(ダブルコーテーション)は16進表示では「0x22」になる。


CSV UTF-8 (コンマ区切り)(*.csv)

文字コードはUTF-8/LEBOM(当サイトではUTF-8識別子と呼ぶことがある)が付いている。


16進ダンプ : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 --- : ----------------------------------------------------------- 000 : EF BB BF E6 9C AC E7 94 B0 E7 BE 8E E7 A9 82 2C 22 E7 AF A0 002 : E5 B4 8E E6 84 9B 0A E7 AB A5 E9 A1 94 E5 B7 A8 E4 B9 B3 22 004 : 2C E8 83 BD E5 B9 B4 E7 8E B2 E5 A5 88 0D 0A 22 E7 89 87 E5 006 : B9 B3 E3 81 AA E3 81 8E E3 81 95 0A E7 8B AC E8 BA AB E5 BE 008 : A1 E4 B8 89 E5 AE B6 22 2C E9 85 92 E4 BA 95 E5 92 8C E6 AD 010 : 8C E5 AD 90 2C E6 A3 AE E5 8F A3 E5 8D 9A E5 AD 90 0D 0A E5 012 : 90 89 E6 B0 B8 E5 B0 8F E7 99 BE E5 90 88 2C E9 AB 98 E6 A9 014 : 8B E3 81 B2 E3 81 A8 E3 81 BF 2C 22 E8 90 AC E7 94 B0 E4 B9 016 : 85 E5 AD 90 0A E5 B9 B4 E4 B8 8D E7 9B B8 E5 BF 9C E3 81 AB 018 : E7 BE 8E E4 BA BA 22 0D 0A


テキスト (タブ区切り)(*.txt)

文字コードはShift_JISである。
エクセルバカがTSVファイルと呼んでいるものはこのタイプのファイルのようである。


16進ダンプ : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 --- : ----------------------------------------------------------- 000 : 96 7B 93 63 94 FC 95 E4 09 22 8E C2 8D E8 88 A4 0A 93 B6 8A 002 : E7 8B 90 93 FB 22 09 94 5C 94 4E 97 E6 93 DE 0D 0A 22 95 D0 004 : 95 BD 82 C8 82 AC 82 B3 0A 93 C6 90 67 8C E4 8E 4F 89 C6 22 006 : 09 8E F0 88 E4 98 61 89 CC 8E 71 09 90 58 8C FB 94 8E 8E 71 008 : 0D 0A 8B 67 89 69 8F AC 95 53 8D 87 09 8D 82 8B B4 82 D0 82 010 : C6 82 DD 09 22 E4 DD 93 63 8B 76 8E 71 0A 94 4E 95 73 91 8A 012 : 89 9E 82 C9 94 FC 90 6C 22 0D 0A

「HT」(水平タブ)は16進表示では「0x09」になる。


Unicode テキスト (*.txt)

文字コードはUnicode/UTF-16/LEBOMが付いている。
各データの区切りはタブである。改行もタブも2バイトのものである。
上のエクセルバカがTSVファイルと呼んでいるもののUnicode版のようである。


16進ダンプ : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 --- : ----------------------------------------------------------- 000 : FF FE 2C 67 30 75 8E 7F 42 7A 09 00 22 00 E0 7B 0E 5D 1B 61 002 : 0A 00 E5 7A 54 98 E8 5D 73 4E 22 00 09 00 FD 80 74 5E B2 73 004 : 48 59 0D 00 0A 00 22 00 47 72 73 5E 6A 30 4E 30 55 30 0A 00 006 : EC 72 AB 8E A1 5F 09 4E B6 5B 22 00 09 00 52 91 95 4E 8C 54 008 : 4C 6B 50 5B 09 00 EE 68 E3 53 5A 53 50 5B 0D 00 0A 00 09 54 010 : 38 6C 0F 5C 7E 76 08 54 09 00 D8 9A 4B 6A 72 30 68 30 7F 30 012 : 09 00 22 00 2C 84 30 75 45 4E 50 5B 0A 00 74 5E 0D 4E F8 76 014 : DC 5F 6B 30 8E 7F BA 4E 22 00 0D 00 0A 00


テキスト (スペース区切り)(*.prn)

文字コードはShift_JISである。
データが正常に変換されていない。欠落があったり、尻切れトンボになっている。このデータとしてみるかぎり、実用価値はほとんどない。


16進ダンプ : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 --- : ----------------------------------------------------------- 000 : 96 7B 93 63 94 FC 95 E4 20 20 8E C2 8D E8 88 A4 0A 93 B6 20 002 : 94 5C 94 4E 97 E6 93 DE 0D 0A 95 D0 95 BD 82 C8 82 AC 82 B3 004 : 8E F0 88 E4 98 61 89 CC 8E 71 90 58 8C FB 94 8E 8E 71 0D 0A 006 : 8B 67 89 69 8F AC 95 53 8D 87 8D 82 8B B4 82 D0 82 C6 82 DD 008 : E4 DD 93 63 8B 76 8E 71 0A 94 4E 95 73 20 0D 0A



以上、標準的な場合でいえば、CSVファイルにしたときに、UTF-8の場合はBOMが付くことになる。上の標準的パターンの中にUnicodeCSVというタイプはない。CSVファイル化できるのはShift_JISUTF-8だけである。

CSVファイルのデータをコンマで切り分けたりして操作する場合、ファイルにBOMと行末の改行が付いていることは、思わぬトラブルをひき起こす。先頭の最初のデータだけにBOMが付いていたり(他のデータには付いていない)、行末の最後のデータだけに改行が付いていること(他のデータには付いていない)1)は、統一的な処理の点からは不適当である。
NOTE
1) PerlやPHPでは行末の改行を削除するのは必須である。Basic的な処理はどうかは知らないが、行単位の読み込みでは改行は読み込まれないから削除する必要もないことになる。

BomOperation.frm@ByteTools.xlsm
これはExcelBOMを付加したり削除したりするツールである。


UTF-16(LE)UTF-16(BE)UTF-8(LE)UTF-8(BE)のファイルからBOMを追加または削除できる。

参考
BOMの追加と削除の方法[全4回](ipc_0163~ipc_0166)


問題点
上のパターンから抜け落ちていて、VBAで独自のフォーマットで作成できる余地があるのは、以下のものだということになる。
  1. UnicodeでのCSVファイル化。
  2. UTF-8でのTSVファイル化。
しかし、これらはいずれも以前に作ったことがある。アタマの体操ネタにはならなかったようである。

- 2020/05/31 -