
タイトルは私がやろうとしていることを完全に表現していますが、少し複雑で難解なので、ユースケースを使って説明します。
互いに非常に近い 2 つのシート (SheetA と SheetB) を含む Excel ワークブックがあり、その違いを視覚的に強調表示したい場合、これを実現する一般的な方法は次のようになります。
- SheetAですべてのセルを強調表示します
- 条件付き書式、新しいルール、数式の使用を入力
- 数式ボックスに次のように入力します。
=a1<>シートB!a1
- 希望の書式を適用し、「OK」をクリックします
基本的に、これは SheetA のすべてのセルを SheetB の対応するセルと比較し、等しくない場合は書式を適用します。シート名が複雑な場合 (特にスペースが含まれているため引用符が必要な場合)、数式入力中にタブ名をクリックすると便利です。
しかし、SheetAのセルに、SheetB の名前を含むテキスト式を入力し、上記の条件付き書式の数式でそのセルを参照したいと思います。
(なぜでしょうか? スプレッドシートが 100 枚あり、そのたびに条件付き書式を手動で変更するのではなく、セル内のテキストを変更して、1 と 2、1 と 3、1 と 55 を比較したいからです。)
どうやってやるの?
INDIRECT 関数はテキストをシート名に変換するために使用されることは承知しており、条件付き書式の数式の一部として INDIRECT 関数を使用して、そのテーマで複数のバリエーションを試しましたが、実際には何も機能しないようです。
答え1
次のような条件付き書式の数式を使用します。
= A1 <> INDIRECT(ADDRESS(ROW(A1), COLUMN(A1),,, aSheet), TRUE)
aSheet
比較するシートの名前を保存したセルへの参照に置き換えます。
のADDRESS()
ROW()
関数は、およびCOLUMN()
関数を使用して評価対象のセルの行と列を計算し、セル参照をテキスト文字列として組み立てます。
関数を省略して、文字列連結を使用して R1C1 形式でセル参照を作成することもできますADDRESS()
が、上記の数式の方が読みやすく理解しやすいでしょう。同等のものは次のようになります。
= A1 <> INDIRECT(aSheet & "!R" & ROW(A1) & "C" & COLUMN(A1), FALSE)