スプレッドシートでデータをコピー、削除、または移動すると、条件付き書式の数式と範囲が自動的に調整されることがわかりました。これはいい考えですが、奇妙な方法で何かを壊す傾向があります。
これを回避するために、entireスプレッドシートに適用するルールを記述し、列ヘッダーをキーオフして、確認したいデータを強調表示しました。
例:=AND(A$1="Check This Column For Blanks),ISBLANK(A1))
を=$1:$1048576
に適用
ただし、ルールexplicitlyがシート全体に適用されていても、シートで作業しているときは、自動的に調整されていました(そして、そうすることで奇妙な方法で壊れていました)。
どうすればこれを回避できますか?
セルの移動、挿入、削除など、any状況で変更してはならない範囲が必要な場合は、名前付き範囲と- INDIRECT
関数。
たとえば、alwaysの範囲をセル_A1:A50
_に適用したい場合は、名前マネージャーで名前付き範囲を定義しました。
Name Managerで新しい範囲を追加し([新規]をクリック)、[参照先:]フィールドでINDIRECT関数を使用して、必要なセルの範囲を指定します。 =INDIRECT("A1:A50")
または=INDIRECT("Sheet!A1:A50")
。範囲は技術的には単なるテキストの引数であるため、セルを並べ替えてもExcelは範囲を更新しません。
また、これは少なくともExcel 2010およびExcel 2013で機能します。私のスクリーンショットは2013年のものですが、私は過去に2010年にこの手法を使用しました。
この不変性はあなたをつまずかせる可能性もあることに注意してください。たとえば、シートの名前を変更すると、名前付き範囲が壊れます。
この戦略をかなりの数のセルで使用すると、パフォーマンスがわずかに低下することに気づきました。私が仕事で使用するモデルは、数千の異なるセル範囲にまたがる名前付き範囲でこの手法を使用しており、Excelはこれらの範囲のセルを更新するときに少し遅く感じます。これは私の想像かもしれませんが、Excelが間接に対して追加の関数呼び出しを行っているのかもしれません。
ルールを破ることは非常に簡単であることがわかりましたが、ここでは、ルールを破らないように試してみることができます。
セル内のテキストを変更できます。行を追加する必要がある場合は、テーブルの最後にデータを追加して、並べ替えます。行を削除する必要がある場合は、テキスト/番号のみを削除してから、テーブルを並べ替えます。
これは、列に適用される条件付き書式があり、通常は列全体の書式を設定している場合に機能します。 $ F:$ F。部分的な範囲をフォーマットする場合でも機能するはずです。追加、削除、並べ替えが完了したときに、フォーマットするすべてのデータが元の範囲パラメーター内にあることを確認してください。
それは私にとっても大きなフラストレーションです。
これがお役に立てば幸いです。
条件付き書式設定ルールでINDIRECT
関数とROW
関数を使用すると、Excelが新しいルールを作成して範囲を変更する問題が解消されることがわかりました。
たとえば、月が次の行に変わったときに小切手帳のスプレッドシートの行の間に線を追加したかったのです。したがって、CFルールの式は次のとおりです。
=MONTH(INDIRECT("C"&ROW()))<>MONTH(INDIRECT("C"&ROW()-1))
スプレッドシートの列Cには日付が含まれています。範囲に特別なことをする必要はありませんでした(範囲名などを定義する必要はありませんでした)。
したがって、元の投稿者の例では、CFルールの「A1」または「A $ 1」の代わりに、次を使用します。
INDIRECT("A"&ROW())
私は[〜#〜] so [〜#〜]とは違い、同じ問題に頻繁に直面しています。
条件付きフォーマット(CF)パネルの「適用先」フィールドは常に動的に機能すると思います。したがって、参照は常に=$A$1:$A$50
の形式に変換されます。
それは苦痛です。
私は非常によく似た問題を経験しました。行を追加して数式をコピーし、列と行のサイズを調整してシートの外観をフォーマットするマクロをいくつか作成しました。この問題は2つの状況のいずれかで発生することがわかりました。
1)INSIDEからの「適用先」から何かがこの範囲外でカット/貼り付けされた場合。
2)「適用先」内に結合されたセルがあり、行または列のいずれかが調整されている場合。
結合されたセルの問題中に、Excelはすべての結合を解除し、条件付きアプリケーションを再計算し、すべてのセルを調整(行の追加または削除など)してから、それらを再度結合する必要があるようです。それは私たちには見えませんが、それはそれが適用される方法のようです。
これが解決策に到達するのに役立つと思いました。
-T
条件付き書式の式では、R1C1
INDIRECT
関数を使用した表記:
例1:
If same row column A = 1
...
=IF($A1=1,1,0) becomes
=IF(INDIRECT("RC1",FALSE)=1,1,0)
例2:If same row column A = 2 AND next row column A = 3
...
=IF(AND(($A1=2),($A2=3)),1,0) becomes
=IF(AND((INDIRECT("RC1",FALSE)=2),(INDIRECT("R[1]C1",FALSE)=3)),1,0)
これに対する簡単な解決策があります。
範囲内のセル(範囲の範囲内にあるセル)に移動し、書式ペインタをクリックして、列全体に貼り付けるだけです。もう一度、それが壊れている場所を示します。範囲を壊したセルに対してフォーマットペインタを実行するだけです。さて、これも少し長く見えるかもしれませんが、単純なマクロを作成するだけで済みます。
使用例がレポートスプレッドシートの生成である場合、これは適切に機能します。
すべてのデータの実行後に最終データの簡単な更新を手動で実行する場合も、1回限りのセットアップ手順でExcelの過度の有用性を回避できます。エントリ。
データが通常どおり(行単位で)配置されていると仮定します。
Input
という名前を付けます。 条件付き書式を適用しないでください。値を自由にシフトして、コンテンツに合わせてください(例:削除/挿入/コピー/貼り付け)。Output
)。列の幅やヘッダーのフォーマット(ヘッダーのコンテンツではなくフォーマットのみ)などのグローバルフォーマットを手動でコピーします。$A$1
_をヘッダー行の開始位置に置き換え、出力するすべての列と行にコピーします:=IF(LEN(OFFSET(Input!$A$1,ROW()-1,COLUMN()-1))>0,OFFSET(Input!$A$1,ROW()-1,COLUMN()-1),"")
(IF(LEN(...)>0,...,"")
ステートメントが必要です。Excelも役立つデータ型を決定し、空のセルには_0
_を使用します。それ以外の場合は_-1
_用語は、オフセットと序数のセマンティクスから得られます)Output
シートに条件付き書式を適用します。これにより、Input
データシートがOutput
シートにコピーされ、Excelが自動ブッチャーするセル参照がないため、Output
シートで条件付き書式を確実に定義できます。
Output
データのサイズが変更されると、Input
シートで数式が適用される範囲を手動で拡張する必要があります。
セルを結合しないことをお勧めします。
追伸この質問は何度も尋ねられました(ExcelのクローンであるGoogle Sheetsにも当てはまります)ので、それらを調べてユースケースに適した解決策を見つけることができます。
フォーマットなしで貼り付けた場合(Paste > Paste Special > Unicode Text
または類似)特別なフォーマットはコピーされないため、「適用先」の範囲は変更されません。
行/列を削除できますが、それらを挿入すると、「適用先」の範囲が分割されます。
最後の行/列を選択し、「カーソル」の左下にある小さな四角形を「コピーしてドラッグ」することで領域を拡張します。このように、「適用」範囲はそのままにしておく必要があります。 (これは、挿入のように行または列の数式を拡張しないことに注意してください。)
ただし、フォーマットせずに貼り付けることなどを覚えるのは大変です。通常は貼り付けません。
また、フォーマットする領域の名前を定義することもあります。ルールでは使用されませんが、1つを除くすべてのルールを削除してルールをクリーンアップし、「適用先」セクションでエリア名を使用できます。
私はMacでExcel 16.3を使用してテストしました(Office 2016 ...と思います)。