Officeの問題


CSVファイルをオフィスに読み込む際の困った問題とその解決法

 NDBS はデータベースから任意の項目データを CSV形式 のテキストデータに出力することができます。また、汎用の RDBMS やテキストエディタ、メモ帳などでも CSV形式 のテキストデータを作成することができます。しかし、これらのテキストデータを Excel Word などのオフィスソフトにインポート(読み込ませる)させた場合、違ったデータに変換されてしまうなど、注意しなければならない問題があります。
   データ処理に Excel だけお使いの方には関係ありません。


A 数字を書き込んだデキストファイルを読み込んだ Excel の文字化けの問題

 メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、 CSV形式 で保存します。

   秋田県潟上市天王字    ,長沼28−4
   秋田県潟上市天王字長沼  ,28−4

このファイルを Excel に読み込みますと次のように表示されます。

   秋田県潟上市天王字    長沼28−4
   秋田県潟上市天王字長沼  4月28日

 なんと2行目、2桁目のデータ 28−4 4月28日 に変わってしまいました。


対策

メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、
  X1.CSV のファイル名で保存しました。
このファイルは項目間を半角カンマで区切ってありますので CSVファイル とよばれ、
  データベースや表計算ソフトから自動出力されるファイル形式の一つです。

    秋田県南秋田郡天王町天王字    ,長沼28−4
    秋田県南秋田郡天王町天王字長沼 ,28−4

作成されたファイル X1.CSV をエクスプローラでダブルクリックしますと Excel が起動し、
  Excel の画面に次のように表示されます。

    秋田県南秋田郡天王町天王字    長沼28−4
    秋田県南秋田郡天王町天王字長沼 4月28日

なんと2行目、2桁目のデータ 28−4 4月28日 に変わってしまいました。
NDBS では集計や出力結果を CSVファイル に出力するのでこれは大変困った問題です。
この現象は Sun StarSuite の表計算ドキュメントに読み込んだ場合にも起こります。
同じ表計算ソフトでも Lotus1-2-3 に読み込んだ場合はこのよう困ったことは起こりません。
  作成した通りに表示されます。

文字列をダブルコーテーションで囲んでも同じ現象になります。
ファイル形式(拡張子)を CSV でなく TXT としてもデフォルトでは同じ現象になります。
 Excel で読み込みの際は  拡張子を TXT とし、
   その列のデータ形式をデフォルトの G/標準(G) でなく、
   文字列(T) に変更してから読み込むと正しく表示されます
文字列の前にシングルコーテーションを付けると防げますがシングルコーテーションも印刷されてしまいます。

そこでいろいろ調べてみましたら次のように規則性があることがわかりました。

−で区切られた数字の文字化けの例
元の文字列
Lotus1-2-3
Excel
StartSuite7
0−1
0−1
0−1
1月1日
0-1
0-1
0-1
1月1日
1−1
1−1
1月1日
1月1日
1-1
1-1
1月1日
1月1日
47−7
47−7
Jul-47
7月1日
47-7
47-7
Jan-47
7月1日
47−12
47−12
Dec-47
12月1日
47-12
47-12
Dec-47
12月1日
47−13
47−13
47−13
47−13
47-13
47-13
47-13
47-13
47−123
47−123
47−123
47−123
47-123
47-123
47-123
47-123
秋田47−7
秋田47−7
秋田47−7
秋田47−7
A47−7
A47−7
A47−7
A47−7

 Excel では、 の前後に、ある特定の数字がある場合、日付に変わってしまうことが解りました。
   特定の数字とは西暦の下2桁と月の場合です。文字が半角でも同じ現象になります。
 CSVファイル TXTファイル Excel に読み込む場合は気を付けてください。
 なお、データを最初から Excel のセルに入力する場合は、
   47−7という文字列を入力しようと思っても直ちに日付に変換されて表示されますので、
   直ぐ異常に気づきます。

この文字化けの問題を避けるには次のようにします。

1 外部データとして読み込む
 多少手続きが面倒ですが次の手順で外部データとして読み込むと正しく Excel に読み込むことができます。

 (1) Excel を起動し、新規作成で開いておきます
 (2) メニューバー データ を選びます
 (3) 外部データとして読み込む を選びます
 (4) テキストファイル を選びます
 (5) 読み込みたい CSV ファイルを開きます
 (6) 項目の区切りとして 半角カンマ を選びます
 (7) 項目の中で文字化けの起こる項目のデータ形式を 文字列 に指定します

2 CSVファイルの作成に配慮する
 1 の方法は操作が煩雑です。 Excel に読み込みたい CSV ファイルをダブルクリックするだけで自動的に文字化けなく Excel に読み込むためには、 CSV ファイルの作成にあたって次のようなことに留意します。

 (1) 項目の最初の文字に数字を使わない
  28−4 とせず 長沼28−4 のように、数字の前に漢字や英文字を記述します。
  この例題で住所の記述を 秋田県南秋田郡・・ 28−4 の二つの項目に分けたのには理由があります。
  これは長い表記の住所をラベルに出力する場合、ラベルの右端からはみ出させないための仕組みです。
  したがって住所を長い表記のまま印刷して良い場合は二つに分けた住所を連結してしまえば良いのです。
  具体的な方法としては、 CSVファイル をエディタに読み込み、
  住所上と住所下の間の ","   を削除します。
  レコード数が多い場合、1レコードづつ削除することは時間もかかる上間違いも生じます。
  NDBS のデータを NDBS No.18 絞込・任意項目出力 で出力させる場合は、
    主力開始の前に 末尾空白削除なし を選んでから出力しますと、
    全レコードで各項目の記録位置が揃いますので、
    Mifes など、矩形カットのできるエディタで、一気に矩形カットができます。
    この後、置換のできるエディタで、空白文字を一斉に削除します。

 (2) 数字と数字の間の−を他の文字に変える
  28−4 とせず 28ー4 とか 28の4 に変える

 (3) Excel で読み込みの際は読み込むファイルの  拡張子を TXT とし、
   その列のデータ形式をデフォルトの G/標準(G) でなく、
   文字列(T) に変更してから読み込むと正しく表示されます。
  表計算ソフトに Lotus1-2-3 を使用した場合はこのような問題は起りません。

3 Excel を使わない

 (1) Lotus 1-2-3 に読み込む

 (2) 文書作成ソフトに読み込む
  Excel を使用せず、 Word エディタ などの文書作成ソフトに読み込んだ場合は文字化けを起こしません。
  単に印刷したい場合や差し込み印刷したい場合は CSVファイル を直接文書作成ソフトに読み込みます。

 (3) NDBSからHtml文書に直接出力
  NDBS のデータを NDBS No.18 絞込・任意項目出力 で出力させる場合は、
  デフォルトで xtable.csv xtable.htm が自動的に作成されます。
    これらのファイルの中では文字化けは起こしていません。
    したがって作成された htm 形式のファイルをホームページとして出力させた場合は正しく表示されます。


B 郵便番号を書き込んだデキストファイルをExcelに読み込んだとき、先頭の 0 が消える問題

 メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、 CSV形式 で保存します。

   1,002-8071,札幌市北区
   2,0028071,札幌市北区
   3,〒011-0946,秋田市土崎港
   4,0110946,秋田市土崎港
   5,011-0946,秋田市土崎港
   6,"0110946","秋田市土崎港"

  このファイルを Excel に読み込みますと次のように表示されます。

   1,002-8071 札幌市北区
   2, 28071 札幌市北区
   3,〒011-0946 秋田市土崎港
   4, 110946 秋田市土崎港
   5,011-0946 秋田市土崎港
   6, 110946, 秋田市土崎港

 2,4,6 のケースのように郵便番号の先頭が半角の 0 であった場合は 0 が消えてしまいます。
 6 のケースのように 0110946 をダブルコーテーション " で囲んだ場合でも、同じく先頭の 0 が消えます。
 6 のケースの場合、表計算ソフト Lotus 1-2-3 や、 三四郎 を使用した場合は 0 が消えません。

 対策は CSV形式 のファイルを Excel に読み込んだ後、
  画面上部郵便番号の列番号をクリックしてその列全体をアクティブにしてから、
    セルの書式設定 -> 表示形式 -> ユーザー定義 で、 0 を選択し、
  種類(T) の直ぐ下の枠に 0000000 と入力して、 OK をクリックしますと先頭の 0 が表示されます。
  7桁の半角郵便番号の先頭に ' などの文字を付けた場合は 0 は消えませんが文字数が多くなります。

 また、 Excel のバージョンによっては、 Excel に読み込んだ後、
  画面上部郵便番号の列番号をクリックしてその列全体をアクティブにしてから、
    セルの書式設定 -> 表示形式 -> ユーザー定義 で、 その他 を選択し、
    郵便番号 を選択して OK をクリックしますと先頭の 0 が表示されます。

 7桁の半角郵便番号だけを記録したデータを Excel に読み込む場合は注意しましょう。


C 先頭が空白である文字列を Word の文書に差し込むと先頭の空白が消える問題

 個人情報と年会費を記録した NDBS のデータベースから出力された会費納入コードを、自作の C言語 で作成したプログラムで納入コードを 印に変換して次のような CSVファイル を自動作成しました。
    "0100101","秋田県土崎・・","一交太郎",H15 H16 H17 ,    ◎

 この会員は 平成15年度分の会費は未納でしたが平成16年度分の会費は納入しています。このデータの後ろの2項目を Word の差し込み印刷を利用して振替用紙に印刷した場合、正しくは次のよう印刷されて欲しいのです。
    納入年度 H15 H16 H17 
    納入状況      ◎      

 しかし実際には次のように差し込まれて印刷されてしまいます。
    納入年度 H15 H16 H17 
    納入状況 ◎      

 つまり、15年度分の会費は納入で平成16年度分の会費は未納となってしまいます。
 この原因はテキストデータの<      ◎       >を Word に差し込む際に、 Word の前の空白を無視して読み飛ばしたことによります。
   半角の空白でも全角の空白でも同じです。

 文字列の前の空白を無視してはならない場合の対策は、その 文字列全体をダブルコーテーションで囲む ことです。
 例えば前記 CSVファイル の場合は次のように作成すれば良いことになります。
    "0100101","秋田県土崎・・","一交太郎","H15 H16 H17 ",2    ◎  "
 Word 文書に差込データをエディタやプログラムで作成する場合は注意しましょう。