CSVをExcelで開くと、0落ちと呼ばれる現象が発生します。対処法を調べるとわざわざ一旦Excelを新規で開いたり等の非常に面倒な方法しか出て来ないので、最も簡単な方法をまとめてみた。
知って置くべき事

CSVとはそもそもComma Separated Value(カンマ区切りの値)の略、つまりカンマで区切ったデータ形式を表すものなので、Excelの表形式のデータとは全くの別物。
だけれども、Officeが入っている場合基本的に勝手に紐づけられるので、CSVファイルを開くとデフォルトでExcelで開くようになってしまうし、アイコンも似てるのでごっちゃになってる人が非常に多い。何故か最近これの問い合わせが非常に多く業務に支障をきたすレベル。
で、Excelは余計なお世話が大好きなので、なんか数値っぽいぞ…?と思ったら数値として変換してくれやがります。
ただ閲覧するだけなら問題ないですが、Excel上で保存をしてしまったら最後。数値に変換されてしまい、今回の0落ち(頭の0が消える)現象が発生する訳です。
正しいけど非常に面倒な方法
ググったらどんなのが出るんだろうと思って自分で調べて見たらこんなんが殆ど↓
①新規でExcelを作成し、データタブ→テキストファイル取込で対象のCSVを選択

②先頭行をデータの見出しとして使用するにチェックを入れて次へ

③区切り文字のチェックをタブからカンマへ変更し次へ

④0から始まってるカラムをクリックし、データ形式を文字列へ変更し完了

⑤シートのどこに取込するか選択しOK

こんな感じ。きっとこれが正攻法なんだろうけど実務で使ってる人いんの?って位めんどくさい。
長すぎ&選択しなきゃいけない項目多すぎなのも勿論問題だけど、何よりExcelで開いたCSVをわざわざ一回閉じて新規でExcelを別途作成しなければいけない出だしの煩わしさがもうムリ。。。
と言う訳でシンプルな解決策を考えてみた。
方法①桁数が決まってる場合
先程と同じCSVをダブルクリックでExcelで起動してみます。すると当然0が消えてこうなります↓

B2からB5までを選択状態にし、右クリックから[セルの書式設定]を起動し、分類:ユーザー定義、種類:0を選択します。

で、今回の場合39042420を039042420にしたいので、種類の欄にその桁数分0を入力します。
するとサンプルに表示されていた39042420が039042420に変化しました。

後はOKを押すだけでこうなります↓

桁数が一定ならばの条件付きですが、断然早いし非常にシンプル。
勿論これ見た目だけのハッタリでは無く、保存してテキストエディタ等で開くとしっかり0が付与された状態になっています。
0001、0002とかの連番物に0を付与したい時等、これだけで十分事足りるケースは非常に多いハズ。
方法②桁数が定まっていない場合
ではこんなデータだとどうでしょう。固定電話や携帯電話等の項目の場合、桁数が異なる為、先程の技は使えません。

こういう作業を良く行う場合、予め個人用マクロブックに登録しておく事をお勧めします。
マクロやVBAと聞くと、そのエクセルファイルでしか使えない印象を持たれるかもしれませんが、個人用マクロブックに登録しておけば、そのPCでExcelを開く限りCSV形式のデータだろうと何だろうとマクロを実行する事が出来るものです。
上記記事でもちらっと載せてますが、以下のマクロを登録して置く事でたった2クリックで今回の問題を解決できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub Set0() Dim arr As Variant Dim nRowCnt As Long Dim nColCnt As Long arr = Selection.Value ' 空の場合 If IsEmpty(arr) = True Then Exit Sub End If ' 一か所のみの選択の場合 If IsArray(arr) = False Then Selection.NumberFormatLocal = "@" Selection.Value = "0" & arr Exit Sub End If ' 配列分ループ For nRowCnt = 1 To UBound(arr) For nColCnt = 1 To UBound(arr, 2) ' N/A#等のエラーセル以外 If IsError(arr(nRowCnt, nColCnt)) = False Then arr(nRowCnt, nColCnt) = "0" & arr(nRowCnt, nColCnt) End If Next Next ' 書式設定 Selection.NumberFormatLocal = "@" Selection.Value = arr End Sub |
上記は選択されている範囲内のセルの先頭に0を付与し、書式を文字列に変換するものです。実際に実行してみると以下の様な挙動になります↓

間に空白等が有りえる場合は、空白はスキップする 等のアレンジを聞かせてもいいかも。桁数が不揃いの場合はこれが最も簡単な方法です。これに慣れたら新規でExcel開いて~ウィザードで~なんてやってらんなくなります。
…でもまぁ一番間違いないのはテキストエディタで開くのが一番なんですけどね。
秀丸エディタはいいぞ(ᵔᴥᵔ)
コメント