現在はいろいろなデータ連携もWebサービス上で完結することが増えてきましたが、
まだまだすべてのデータが自由に動いてくれるというわけでもありませんよね。
データ連携の際にデータベースからCSV形式で抽出したりして、
SQLでゴニョゴニョという作業もたくさんあるものと思います。
今回はそんな大掛かりなデータベースの話ではないのですが、
「ちょっとしたデータを扱いたいときにExcelでよく陥る落とし穴」
についてお話したいと思います。
非エンジニア泣かせのエクセルのCSVで頭の0が消える問題
CSVは簡単に言えば「超シンプルなデータの保存形式」です。
普段使っているExcelもCSVを扱うことのできるソフトウェアの一つです。
エクセルのデータもデータベースの形をしています。
データベース用の有名なソフトに「Microsoft Access」というものもあります。
そもそも、データというのは「1」とか「2」とかそういう数字だけでなく、
名前や住所などの文字も扱いますよね。
普通こういったデータは宛名書き専用のソフトとか、
Excelで管理することが多いのではないでしょうか。
しかしこのExcelには困った問題があります。
「数字が入力されているとき実数として判断してしまうのです」
「えっ!数字として判断してしまってはダメなの!」となります。
確かに人間なら数字を見た時すぐにどういう意味のある数字かわかるのでいいのです。
でも、コンピューターの場合は数字が計算できる数字なのか、
計算できない数字なのかというのは大きな違いです。
例えば、社員場号「0001322」みたいな、
頭に0がある数字というのは数字なのでしょうか?
電話口でこの番号を言うときは「0001322」とすべての数字を言うと思います。
つまり、これは「1322」番ではなくて「0001322」という記号なのです。
つまり、Excelは頭がいいのでCSVでこうした頭に0がある数字の羅列を見ると、
整数として解釈してしまうので、頭の0を勝手に消してしまう仕組みになっているのです。
ExcelでCSVが編集したいときは0が消えないように直接開かない
自分がCSVファイルを作るだけなら実はExcelでも解決することができます。
https://office-hack.com/excel/display-leading-zeros/
頭にアポストロフィをつけるとか、=”とするとか、セルの書式設定で文字列を選択するなどです。
しかし、もらったCSVを初めて開くときに自動で0が消されたら意味がありません。
誰かからもらったCSVやアプリからDLしたものを開くときは必ず、
まず空のExcelを立ち上げてから、
「データ」→「テキストファイル(外部データの取り込み)」→CSVファイルインポートをします。
すると、「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」
を選択してデータを文字列ごとに区切ってくれる機能が使えます。
シンプルなテキストエディタなら頭の0は消えない
プログラマがよく使っているエディタでCSVを編集するのも安全です。
CSVとTXTはシンプルなところがメリットなのでお互いに似ています。
実際にCSVをエディタで開くとこんな感じでカンマで区切られたファイルです。
実際に開いてみると当然、頭の0も消えてないですね。
ただ、このやり方だとデータが縦の列で揃ってないのでコピペ等はしにくいですね。
統合開発環境であるマイクロソフトのVS Codeを使ってる方は、
拡張機能で「RainBow Query Language」というものがあります。
こちらはMacでも使えますし、サクサクっと動きますのでおすすめです。
エンジニアの方にはSQLが使える機能もついています。左下の「Query」というところを押すと、
「RBQL Console」という画面が開きますのでいろいろとデータベースできます。
ただ、気づいてしまったのがこのSQLコンソールを使いたいときは、
日本語データのエンコードは必ず「UTF-8」にしておくべきですね。
上の画像のエンコードでは「Binart/Latin-1」となってますが当然日本語は出せません。
SaaSソフトでCSVをエクスポートするときは必ず「UTF-8」を選択しましょうね!
おまけ:VS Studio Codeで日本語CSVを開くと文字化けする
文字化けってなんで起こるのでしょうか?
昔はよくメールが文字化けしていることがありました。
これは2バイト文字と言われるアルファベットではない言語の国特有の問題が文字化けです。
文字はパソコンで表示するために、
エンコード方法というのが用意されており、主に現在はUTF-8が使われます。
Shift-JISというものもありますが画面に表示する文字化する際の数列の当てはめ方が違うので、
コンピュータが適切な文字を当てはめられなくなり、いわゆる文字化けが起こります。
マネーフォワードやSmart HR等のSaaSソフトウェアでCSVをダウンロードする時、
Shift-JISという日本の規格が使われていることが多いです。
今は自動で判定してくれるソフトも増えていますが、
余計なお世話だったりすることもあるので例えば、VS Studio Codeで開くと文字化けします。
しかし、対処はとっても簡単です。
https://qiita.com/devrookiecom/items/faf2b6ee6f9e058022cc
日本のソフトウェアでエクスポートしたCSVであれば、
Shift-JISでエンコードしてあげると大体の文字化けは治ります。
ですから、前述の理由で基本的には「UTF-8」でエンコードしたCSVを作成しましょう!