最近は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()) = "実装"
で充分でした。