EXCELの謎仕様には涙が止まらない

データベースから一覧表形式でデータを取り出すときに、カンマ区切りテキスト(csv)形式を使うことが多い。csvはテキストデータだからパソコンでもタブレットでもスマホでもとりあえずテキストファイルが開ける環境さえあれば中を見ることができるし、csvを適切に読み込んで一覧表形式で扱えるソフトも非常に多いから、一覧表形式のデータをやり取りするのに最も汎用性が高い形式のひとつとして古くから使われ続けている。

一覧表形式のデータといえばパソコンではEXCELが事実上の標準ソフト。Windowsパソコンだとcsvファイルをダブルクリックすればほぼ間違いなくEXCELが起動する。

ところがEXCELはありがた迷惑なお節介機能が満載で、データ作成者の意図をまったく無視した勝手な解釈でcsvファイルを開く。

csv・・・・カンマ・セパレーテッド・バリューズ(カンマで区切った値たち)の頭文字でcsv。次のような文字データです。

“姓”,”名”,”国”,”年齢”
“久光”,”一誠”,”日本”,”44″
“田中”,”一郎”,”日本”,”39″
“鈴木”,”太郎”,”日本”,”50″
“バラカン”,”ピーター”,”イギリス”,”61″
“ジョン”,”万次郎”,”日本”,”187″

列をカンマで区切って、行を改行で表わすテキストファイル(テキストファイルだけど拡張子は.txtじゃなくて.csv)。テキストファイルだからメモ帳でもワードパットでも開いてデータを確認できる。EXCELで開けばカンマや改行でセルに分けられた一覧表になるし、EXCEL以外の類似したソフトでも一覧表形式で開くことができる。

システム開発でデータのダウンロード機能が求められると汎用形式であるcsv形式でダウンロードできるように設計することが多いんだが、いろんな場面で『EXCELで開けない!』『EXCELで開いたら変なデータになってる!』という抗議を受けることになる。

例えば3つの数字をハイフンでつないで作られるコードがあったとする。私に身近な例だと化学物質識別コードの「CAS No.」

“物質名”,”CAS登録番号”
“炭酸エチレン”,”96-49-1″
“エチルPABA”,”94-09-7″
“アジピン酸”,”124-04-9″
“カプリリルグリコール”,”1117-86-8″

これメモ帳にコピペして「test.csv」とか適当にファイル名付けてダブルクリックしてEXCELで開くとこうなる↓

excel1

ヲイヲイ、勝手に日付にしてんじゃねえよ。EXCELはcsvデータの中に日付っぽい表現があるとそのセルは日付にしてしまう(えーっ!)。こいつを上書き保存を実行して、再度メモ帳かワードパットでデータを確認すると

物質名,CAS登録番号
炭酸エチレン,96-49-1
エチルPABA,1994/9/7
アジピン酸,124-04-9
カプリリルグリコール,1117-86-8

このように元データの 94-09-7 をキッチリ 1994/9/7 に書き換えてしまっている。勘弁してくれよ。

EXCELは数字だけを並べた文字データを数値に変えてしまうクセもある。例えば

“名前”,”市外局番”,”市内局番”
“久光”,”046″,”869″
“田中”,”03″,”123″
“鈴木”,”06″,”345″

このcsvファイルを EXCEL で開くとこうなる↓

excel2

ヲイヲイ、勝手に数値にしてんじゃねえよ。もちろん上書き保存すると元データからも先頭の0がなくなる。

他にも文字数が多い数字の羅列を勝手に指数表示に書き替えてしまう問題もあるんだぜ。例えば13桁のJANコードを書いた csv ファイル

“商品名”,”JANコード”
“リンゴ”,”4569951116179″
“バナナ”,”1234567890123″

をEXCELで開くとこうなる↓

screen

もちろん上書き保存すると

商品名,JANコード
リンゴ,4.56995E+12
バナナ,1.23457E+12

こんなことになってしまう。他にも EXCEL のお節介機能のせいでデータが正しく表示されない&データが破壊される問題がいろいろある。

ダウンロードしたデータをメモ帳なりワードパットで開いてみればわかるが、システム側は正しく”94-09-7″とか”046″とか”4569951116179″って出力している。それを EXCEL が勝手に”1994/9/7″とか”46″とか”4.56995E+12″に書き替えちゃうわけで、明らかに EXCEL 側に問題があるんだが多くの人はそんなこと知らないので「ちゃんとしたcsvファイルを作ってください!」とcsvファイルを作ったオレが怒られる。こっちはちゃんとしたデータを出力しているのに・・・涙、涙。事情を説明して理解してくれたところで EXCEL を使うしかない会社がほとんどだから何の解決にもならんのだけどね。こんなクソ仕様のソフトなんか世の中から消え去ってくれと多くのエンジニアが思っているに違いない。そしてなんでこんなソフトが何十年もの間、世界標準でいられるのか。これは技術の優劣だけでビジネスの勝敗が決まるわけではないという好例。あ、オレ今なんかカッコいいこと言ったよ。ね、ね、言ったよね。

こちら側は正当な csv ファイルを出力しているのだから『ファイルの拡張子を .txt に変えて EXCEL の[開く]メニューを使ってそのテキストファイルを開いてください。するとテキスト ファイル ウィーザード機能が出てくるのでこれを使って列ごとの書式を[文字列]に指定して開いてください。』という EXCEL お節介機能の回避方法とか『お節介機能がない無料の表計算ソフトがあるのでそれを使ってください。』とか解決策を提示してもまず聞き入れてくれる利用者はない。

まあ、それもいたしかたなし。企業に勤めてるといってもパソコンを使う能力は社員によってピンキリだから基本的にはダブルクリック以上のパソコンスキルがない人を基準に考えないと。ほとんどの状況で「ダブルクリックすればファイルが開いてちゃんと表示される。そうならないのはシステムを作ったオマエが悪い。」という結論以外はでてこない(涙)。

さんざん泣き言をたれたけど、そんなことは遥か昔から多くのプログラマーを悩ませてきた連綿と続く問題なので EXCEL の勝手なお節介機能に対処する方法は、すでに諸先輩プログラマーの方々がいろいろと編み出してくれている(アリガトー、アリガトー)。

対処法その1【データの先頭に「’」(アポストロフィー)を入れる】

excel3

変な文字を先頭に入れておくことでデータが勝手に日付になったり、数値になったり、指数表示になったりすることを抑止する方法。アポストロフィが目立たなくていいけど、「変な文字が先頭についてるんで消してください・・・・」と怒られる。

対処法その2【データの先頭に特殊な空白文字(タブ)を入れる】

excel4

アポストロフィーじゃなくても変な文字ならなんとかなることが多い。データの先頭にタブ文字を入れておくのもその一つ。これだと見た目のうえでは問題ない表示ができる。しかし別のソフトにデータをコピペすると先頭に妙な空白がついてしかも両端にダブルクオート(”)が付いてくるので「コピペすると変になるバグを直してください」と怒られる。見た目が問題ないのにコピペしたら突如変になるというのはパソコン技能が少ない人には驚異的なバグに映る。下手するとオレがEXCELを壊したんじゃないかと疑われかねない。

対処法その3【数式にしてしまう】

excel5

この方法を知った時は思わず鼻汁出そうになった。データを「”=””94-09-7″””」とか「”=””03″””」とか書いておく。パッと見なんのことかわかりにくいんだけど、まず両端のダブルクオート(”)はcsvでデータを囲うためのもの。内側の =””03″” がデータ本体になる。””とダブルクオートが2連続になっているのはダブルクオートで囲っているデータの中でダブルクオートを使いたい場合、データの両端のダブルクオートと区別するために “” と2連続させる(エスケープさせる)というルールに基づいている。つまり””は”だから要するにcsvで「”=””03″””」と書いたデータはEXCELには「=”03″」として認識される。そして=で始まるデータはEXCELは勝手に数式であると判断する。=”ほげほげ”という数式は「ほげほげという文字である」という数式だから =”03″ なら計算結果として画面上には 03 という文字が表示されるわけだ。この方法だと数式バーの部分には数式が表示されるけど、セルには計算結果が表示されている。セルをコピーしてメモ帳とかに貼付けたときも計算結果が貼り付けされるので、コピペしたら変なことにという心配もない。

おおっ!

万事OKのようだが、この方法は EXCEL が = で始まるデータを勝手に数式であると解釈することを逆手にとっている。ということは EXCEL 以外の正しく csv データを扱えるソフトでこの csv ファイルを開くと何じゃこりゃ?な状態になる。もちろんメモ帳やワードパットで開いたときも何が書いてあるのかよくわからない数式のような何かがゴチャゴチャっと書いてある変なファイルにしかみえない。EXCEL 以外のソフトで開くことは絶対にないという前提じゃないと成り立たないこんな変なファイルはもはや csv ファイルではないんじゃないかという根本的な疑問は残る。ユーザとしては EXCELでちゃんと「表示される」ことが最優先なんだからこれで問題ないわけだけどね。

ああ、EXCELってどうしてこうもクソな仕様なんだろう。

MG MS-06R-1 高機動型ザクII (初期型) シン・マツナガ専用機 [Ver.2.0]

MS-06R-1(A)
ZAKU II
PRINCIPALITY OF ZEON S.MATSUNAGA’S CUSTOMIZE MOBILE SUIT

DSC09851-pザクのプラモ、多いなあ。ショーケースがもういっぱいいっぱいになってきた。さて、今回作ったのは、MSV(モビルスーツバリエーション)から高機動型ザクII。ザクII(いわゆるフツーのザク)をベースに宇宙での機動力向上を狙って開発されたザクのバリエーション機。それが「高機動型ザクII」・・・・という設定。まあ30年近く前の企画だから、その当時の「ボクが考えた高性能なザク!」っていうデザイン。脚部や背部にこれ見よがしにデカい推進装置をゴテゴテと。しかも○○専用機としてちょっとずつデザインが異なる機体が何種類も作られた。何種類もデザインされた高機動型ザクIIは、最近ではおおむね以下のように整理されている。

  • 初期型の試作機:MS-06RP
  • 初期型:MS-06R-1
  • 初期型の改良機:MS-06R-1A
  • 後期型の試作機:MS-06R-2P
  • 後期型:MS-06R-2

今回作ったのはR-1型。その中でも機体を白系で塗装し「白狼」と恐れられたシン・マツナガ大尉の乗機。

DSC09854-pDSC09858-p

プラモデルの箱には「R-1A」って書いてあるんだけど、右肩の通気口らしきスリット、前垂れの突起物、カバーされているふくらはぎのプロペラント部などR-1Aとは外観上の違いがあるしオレはR-1型だと思うんだよね。

DSC00027-p DSC00028-p DSC00030-p

まあもともとがガンプラブームの勢いに任せてバンバン作ったものを後からそれっぽい理由付けとともに整理したんで「R-1型だ」「R-1を改修してR-1A仕様にしたものだ」「R-1Aには細かいバリエーションがあるんだ」と諸説紛々。R-1Aはすでに黒い三連星用があるから、これはR-1だということにする、オレの中では。

DSC09856-p

ああっ、かっこいい。かっこいいよ。特にこの「いかにも」すごそうな脚部のバーニアいっぱい状態。もうビューンビュン飛び回れるね。シャアザクなんて目じゃないよ。なんども言うけどさ、ザクは下から見上げるように見るのがカッコいいよね。

DSC00032-pDSC00035-p

高機動型ザクIIはふくらはぎ周りにいっぱい推進装置を付けてるからザクver.2.0の醍醐味である関節超絶可動がひざに関してだけは残念な状態だけど、そりゃましょうがないよな。いいんだよ、宇宙用なんだからさ。

さあ、とりあえず現時点で完成している高機動型ザクIIが揃い踏み!! 左からR-1型、R-1(A)型、R-1A型、R-2P型、R-2型。うおーっ、カッケー。

DSC09867-p

数が多くてね、横一線に並べると背景紙をはみ出しちゃうんだよな。

DSC09864-p

R-1型(ア・バオア・クー防衛隊仕様)
R-1(A)型(シン・マツナガ専用機)
R-1A型(黒い三連星専用機/ガイア機)
R-2P型
R-2型(ジョニー・ライデン専用機)

【ザク祭り】マスターグレード(MG)シリーズで2007年4月にザクIIがver.2.0として再登場。多くのバリエーション機体が存在したというアニメの設定をプラモデルとしても再現するために骨格に相当するフレームを再構築し、全てのバリエーションを「ザク共通フレーム」+「バリエーション部品」で作ることができるように考慮されている。これを機にこれまでいくつか発売されていたMGザクIIがver.2.0仕様でリニューアルされたり、新たにザクのバリエーション機が次々と発売された。これらを片っ端から作っていこうというのがザク祭り。

MG MS-06R-2P 高機動型ザクII (後期試作型) [Ver.2.0]

MS-06R-1
ZAKU II

はい、ザクです、ザク。ザクのいないガンダムなんて・・・あ、もういいですか?

ガンプラブームに乗じて作られた「TVには出てこなかったけど、実はこんなモビルスーツもいたんです」という企画「モビルスーツバリエーション(MSV)」。その中でも群を抜いて有名な機体が高機動型ザクII。TVに出ていたザクの高性能タイプです。型式ではR型と呼ばれてます。

ひとくちにR型といってもその中にはさらに細かいバリエーションがあって以下の5タイプが有名(・・・・・有名か?)。

MS-06RP(R型の試作機)
MS-06R-1(初期R型)
MS-06R-1A(初期R型のちょこっと改良版)
MS-06R-2P(後期R型の試作機)
MS-06R-2(後期R型)

まあ30年近く前の話なんで、テキトーに「カッコイイザクいっぱい書いてみましたぁ」ででっち上げた微妙にデザイン違いの高機動型ザクを初期型だの改良型だの試作型だのと後付けの後付けで設定しただけってのが実際のところなんじゃないだろか。超適当。

さて、この中で今回作ったのは後期R型の試作機「MS-06R-2P」です。推進装置の大型化によって高機動化に成功した初期R型(R-1型)をさらに高出力化してビーム兵器も運用できるように・・・と検討したのが後期R型。大出力を必要とするビーム兵器にエネルギーを供給できるように胸部のジェネレータを大型化したもののザクの基本設計では改良にも限度がありビーム兵器を運用できるほどの出力が出せないことがこの試作機で明らかとなったため結局、後期R型の開発は脚部推進装置のさらなる高出力化のみという形で決着した・・・・・という設定。ちなみにザクを基本にした設計ではビーム兵器はムリとわかった結果、一から設計し直して作られたのが「ゲルググ」・・・・・という後付け設定。

町の模型屋さん(プロショップ)でしか売ってない限定品「MG MS-06R-1 高機動型ザクII (ア・バオア・クー防衛隊機) [ver.2.0]」をベースにして作りました。この商品は箱に「R-1型」と書いてあるものの、箱を開けると中にはR-1A型やR-2型などこれまでに発売されたR型シリーズの部品が全部入ってるのでお好みでR-1、R-1A、R-2型のどれでも組み立てられるし、説明書を無視して好きな部品を組み合わせればオリジナルな高機動型ザクIIだって作れるという、モビルスーツ大好き中年の心をわしづかみの大盤振る舞いな商品だ。さらに、さらに、説明書にはR-2型の部品の一部を改造してR-2P型を作る方法まで紹介されている。そうだ、せっかくだからR-2P型を作ろう!

R-2P型は大型化した胸部が特徴なんだけど、ここだけは既存の部品をもとにボリュームアップの改造が必要。しかしこんな小さな部品ひとつのためにパテやら塗料やら道具をいくつか買いそろえるのもなあ・・・どうしようかな・・・とか2日ほど考えた末お金で解決することにした。「プラモデルの製作代行」という商売がある。本来は組み立てから塗装仕上げまで全部お任せして超カッコいいプラモデルを作ってもらうもんなんだが、なんと「ザクの胸部部品をカッコよくボリュームアップする」という依頼をした。「部品だけを製作代行ですか? 送料とか考えるとかなり割高になりますよ?」「いいの、いいの。申し訳ないけど胸部部品のボリュームアップだけお願い!」


ということで、ザクの胸部部品の改造だけを依頼した。代行屋さん、ありがとう。届いた部品をみて、さすが商売でプラモデル作ってるだけあって上手に改造するもんだと感心した。

届いた部品を使ってあとはいつも通り。パチパチ組み立てて、墨入れ、シールを貼って、最後につや消しスプレーをプシュー。で、完成。

DSC09873-pDSC09875-p

もうちょっと胸部の張り出しを強調してもらってもよかったかなぁ。うーん、まあOKでしょう。いい感じ、いい感じ。

DSC09874-p

ガンプラの写真をいくつか撮ってて感じたんだけど、ガンダム系って斜め上から撮った方がカッコいいことが多いけど、ザクって斜め下から見上げる感じで撮った方がカッコいいと思う。

DSC09877-pDSC09871-p

【ザク祭り】マスターグレード(MG)シリーズで2007年4月にザクIIがver.2.0として再登場。多くのバリエーション機体が存在したというアニメの設定をプラモデルとしても再現するために骨格に相当するフレームを再構築し、全てのバリエーションを「ザク共通フレーム」+「バリエーション部品」で作ることができるように考慮されている。これを機にこれまでいくつか発売されていたMGザクIIがver.2.0仕様でリニューアルされたり、新たにザクのバリエーション機が次々と発売された。これらを片っ端から作っていこうというのがザク祭り。