Excelの使い方メモ

最近はEclipseよりもvimよりも、Excelと一番仲が良かったりするので、だいぶExcelの錬度が上がってきました。で、最近理解したことのメモ。全て試行錯誤の結果なので、もっとスマートなやり方がある可能性大。

アクティブセル

アクティブセルの概念がすごく重要みたい。セル参照を複数のセルにあてはめた場合、勝手にイテレーションしてくれますが、このときの起点になってるのはアクティブセル。
A1:B6に

=C11

というセル参照を指定すると、B6には

=C16

が入ってるのはそういう意味。

というのをふまえて、

条件付き書式

H2:K30の条件付き書式で、「奇数行なら自分の行のG列の値が「実装」かをみるけど、偶数行なら、一段上の行のG列の値が「実装」かをみる」という条件にしたい

という要件があった場合の解は、

アクティブセルがH2になるようにH2:K30を選択して、条件に

=IF(MOD(ROW(),2), $G3 = "実装", $G2 = "実装")

と指定する、という感じになりました。

そこに至る前に、

=IF(MOD(ROW(),2), EXACT(INDIRECT("G" & ROW()), "実装"), EXACT(INDIRECT("G" & (ROW() - 1)), "実装"))

というのも書いてみましたが、うまいこと動かず。なんで動かないかを調べる方法もよくわからず。んー、デバッグ方法がわからないのはツライ。

メモのメモ

INDIRECT式

Excelのセルの数式で

=C3

とかって書くとC3セルの値が参照できますが、

="C3"

とかって書くと当然文字列として認識してくれるので"C3"という文字列を出力してくれます。
普段はそれで問題ないんですが、

G列の一行上の値を参照したい!

みたいな変なことをやろうとすると、

="G" & (ROW() - 1)

と書くことになるので、これも当然文字列として処理しててうまいこと行きませんでした。
そういうときには

INDIRECT("G" & (ROW() - 1))

で、文字列をセル参照として扱うことができるみたいです。

EXACT式

上の式で、

EXACT(INDIRECT("G" & ROW()), "実装")

って書いて比較させようとしてるけど、意味ないじゃん。

INDIRECT("G" & ROW()) = "実装"

で充分でした。