hibitの技術系メモ

数学とか3Dとか翻訳とか

全人類に告ぐ。セル結合をやめろ。

(12/13追記 タイトルや表記に過剰な表現があり、セル結合を全否定するかのような印象を与えてしまいました。そのような意図はなかったのですが、補足記事を書きましたので、併せて読んでいただけると幸いです。すみませんでした。)

 人類よ、なぜそんなにセル結合を使いたがる? それが罪深い行為とも知らずに……。

 思わず神視点になってしまいましたが、この世界にはExcelのセル結合を無意味に使いたがる人が多すぎます。いや、メリットがないことはないのですが、それを余裕で上回るデメリットがあることを意識している人が少ないように思われます。データというのは、コピペしやすいこと、集計しやすいこと、数え間違いをしづらいことが第一なので、それを損ねるような行為は許されざる大悪というべきでしょう。断固として弾劾していきます。

綺麗なデータとは

 ここにエクセルで作った、同じソースから作成した3種類のデータ(東京都の区市町村別の人口をまとめたもの)があります。(データは東京都の統計より引用)

f:id:hibit_at:20181203004906p:plain

 赤のA、緑のB、青のCは、データが綺麗な順もしくは汚い順に表を並べたものになりますが、綺麗なのは赤のAでしょうか、それとも青のCでしょうか。赤のAと答えた人は残念ながら大きな間違いです。悔い改めてください。しかし悲しいことに、世の中の業務で扱うデータは赤のAのようなものが溢れています。「え~、小計総計やエリアが分かった方が便利じゃないの?」という声が聞こえてきそうですが、そうではありません。それをこれからわからせてやる。

選択範囲が飛び火する

 例えば、このデータから区市の名前を別の表にコピーしたいとします。

f:id:hibit_at:20181203005722p:plain

 西東京市から初めて……

f:id:hibit_at:20181203005824p:plain

 ……

 本来選択したい列だけでなく、余計な列まで選択してしまいます。これでは他の表にコピーできません。市の部分だけピンポイントでコピーした後、区の部分をピンポイントでコピーする手間が必要になります。これは単純な例だからいいですけど、小カテゴリが10個あるような表でも同じ操作をするつもりですか? 余計な行さえなければ0.5秒で済んだ操作を、なぜ人間が神経をつかって再現しなければいけないのですか?

 それに、神奈川県が町田市を強引に東京都から引き抜いてしまった日はどうでしょう。ここで町田市の列だけ消そうとしても、「東京都」の列を選択した時点ですべての行を選択してしまいます。ピンポイント(ピンポイントで、というのは基本的に人間の貴重な脳味噌を酷使します)で町田市の行だけ3セル分選択して「削除(上方向にシフト)」しても列のズレが生じます。この場合、行全体を選択できる(つまり他の列に残したいデータがない)場合を除いては、セル結合を解除してから作業して、もう一度結合するしかないのです。なんという無駄な作業……。

コピペで表に貼り付けることができない

 例えば、何かの都合で国分寺市国立市については合計で数える必要が出てきたとします。こういう邪悪な表は業務ではしばしば発生します。

f:id:hibit_at:20181204082241p:plain

 他の表からコピペで貼り付けようとすると…

f:id:hibit_at:20181209011739p:plain

 ……

 この操作は結合したセルには行なえませんじゃあないんだよこの操作は結合したセルには行なえませんじゃあ。いや、悪いのは我々人間であってExcelさんサイドには何の責任もないのですが。

 最近のバージョンだとないみたいですが、バージョンによっては「結合されたセルの一部を変更することはできません」となってそもそもコピーすることすら不可能だったりします。ストレス!

コピペで表から貼り付けることがやりづらい

 結合されたセルをコピペで貼り付けると結合されたサイズのままペーストされます。

f:id:hibit_at:20181209013109p:plain

 レイアウトが一致しなかったら死亡ですね。「形式を選択して貼り付け」で「値」のみにするとサイズの不一致は防げますが、以下のようになります。

f:id:hibit_at:20181209013256p:plain

 巻き添えになったセルの数値は死亡します。なにこのトラップ。

並べかえができない

 せっかく人口で並べてるんだから、人口順にソートしたい時もあります。しかし結合セルがあると

f:id:hibit_at:20181204081347p:plain

 この操作を行うには、すべての結合セルを同じサイズにする必要がありますじゃあないんだよこの操作を行うには、すべての結合セルを同じサイズにする必要がありますじゃあ。 

そもそも列の途中に小計をはさむな

 っていうか、列の途中に小計挟む必要あります? 列全体を数えたらダブル計上、トリプル計上になりますよね。というか、同じ列の間に違うカテゴリレベルの値が入ってるって気持ち悪くないですか。東京都、神奈川県、沼津市ってなったら気持ちわるいでしょう。そもそも、SUMで一気に数えられないでしょ。

 え、個別にプラスしてるから大丈夫です?

f:id:hibit_at:20181209013502p:plain

 キモッ!

 悪いけどドン引きです。関数の保守性とか考えたことあります? 小カテゴリが4つに増えたらどうするんでするか? また数式をいじって個別にプラスするんですか? これが本当にすべてを合計してるか丁寧にひとつずつ確認するんですか? SUMだったら、あー全部のセル囲ってるねってすぐ確認できるのに、なんでそんな苦行をしなければならないのですか。あとこの方式だと、カテゴリが消えたら参照エラー起こりますけど、そういうのも考えてるんですか?

それでも小計や合計が知りたいという方

 ピボットテーブル使いましょう。冒頭で述べた青のCみたいな表があれば、一瞬で下の表みたいのが生成できるから。カテゴリを並べ替えたり、データをソートしたり、小計を間に挟んだり、そういうのもすぐできるから。ていうかそういうのをセル結合で再現しなくていいから。

f:id:hibit_at:20181209014255p:plain

 まあピボットテーブル使うにせよ関数で表現するにせよ、青のCから緑のBや赤のAみたいな表を作るのは容易ですが、その逆は手間がかかります。だからデータがどのような形になるかわからない場合や、後で変更が加えられるかもしれない時は、青のCのような形式で編集を行うのが大事なのです。

f:id:hibit_at:20181209020441p:plain

まったく意味のない結合もある

f:id:hibit_at:20181209014659p:plain

 こういう表は見てるだけでモニタを割りたくなりますね。

構造とデザインの分離

 少し話を広げます。今まで述べてきたような問題は、根本的には構造とデザインが分離されていないがゆえに起こる問題です。構造とデザインが分離されている状態というのは、例えば雑誌の編集においては、ライターが執筆原稿を送って、編集者がそれを雑誌に製本するような状態のことです。雑誌が印刷された後で、ちょっとあの部分の文章変えてよ、ということは基本的にはありえません。

 つまり、人の目に見やすいように整形された表というのは印刷された雑誌のようなもので、本来ならばそこから内容を修正するようなものではないのです。電子データだから無理矢理遡れるだけで、セル結合された表を変更するというのは、印刷された雑誌を切り抜いて文章を変更するようなものです。もし修正があれば、原稿の方を修正して、それから製本し直すというのがスジでしょう。出版なら大がかりな話になりますが、電子データ上なら一瞬で済みます。そのために関数やピボットテーブル機能があるのだから、そうするべきですExcelにおいては、原稿は整然データやCSVにあたります。それらを修正するにあたって、余計な手間は一切かかりません。

 なのに、Excelではデザインまで自分で完結させたい人や、デザインが固まった状態で修正を要求されるシーンがあまりにも多すぎます。人類にWYSIWYG(編集画面とレイアウトが一致していること)は早すぎたのだ……。

 ついでに言うと大半の人類はWordも雑に使いすぎですが、まあそれはまたの機会に。

ExcelがよりExcelらしくあるために

 Excel表計算ソフトです。けして版組ソフトではありません。セル結合やオブジェクト配置を使ってあなたの芸術を表現するキャンバスではありません。関数や、フィルターや、ピボットテーブルや、VBAを使って、99%の業務に必要なデータは一瞬で作成できます。そのために、その根本となるデータは整然データ(tidy data)でなければならないのです。

f:id:hibit_at:20181209015048p:plain

 だからみんな、データを作る時やそれを人に渡す時は、できるだけ青のCみたいな形で揃えてくれると嬉しいな……。それが私の最期の願い……。