web-dev-qa-db-ja.com

Excel-条件付き書式設定-行を挿入

「適用先」でオフセットまたは間接を使用しても機能しないようです。行/秒を挿入した後、条件付き書式が壊れないようにする他の方法はありますか

たとえば、範囲の条件付き書式があります$ O $ 19:$ O $ 105。条件は「セル値が10より大きい場合」で、赤色でフォーマットされています。

問題は、Excelで行を挿入すると、このフォーマット範囲が分割され、2つのフォーマットルールが適用されることです。たとえば20行目に新しい行を挿入した場合、範囲がそれぞれ$ O $ 19、$ O $ 21:$ O $ 105および$ O $ 20の2つのルール。

通常、上記のような条件の場合、ルールが複数の範囲に分割されていても問題ではありません。しかし、「ハイライトトップ10」などの条件では、望ましくない結果が生じます。

私は次のことを試してみました。

  1. 間接を使用して試してみました-ただし、Excelは式を解決し、フォーマットルールを保存しているため、挿入で期待どおりに動作しません
  2. オフセットを使用してみました-ここでもExcelは上記と同じ範囲を解決します。

行挿入で壊れない条件付きフォーマットを書く方法は誰でも知っていますか?

[編集]行を挿入しても条件付き書式設定ルールが分割されないことに気付きました。また、行をコピーして、これを実行している挿入行に貼り付けます。特別な貼り付けを選択し、数式のみを選択すると、うまく機能します。

20
ssp

私はこれが古いスレッドであることを知っていますが、これは非常にシンプルでうまく機能する別のソリューションです。

必要に応じて新しい行または列を挿入するだけです。次に、正しい条件付き書式を持つ行/列を選択してコピーします。作成したばかりの新しい行/列に過去のスペシャルを追加し、「すべての条件付き書式のマージ」のオプションを選択します。これで、条件付き書式ルールが自動的に更新されます。

ハッピーエクセル=)

9
user3641891

これは条件付きフォーマットの一般的な問題です。行を挿入したり移動したりする場合、Excelは条件付き書式をセルとともに移動し、元の書式でセルを挿入する(またはまったく挿入しない)と想定します。

そのため、変更に応じてフォーマットされた範囲を分割するように最善を尽くします。残念ながら、「最高」はあまり良くありません。幸いなことに、気付かないうちにフォーマットルールが複製されます。不運な場合には、適用された範囲の一部またはすべてで破損します。

これは、ListObjects(別名「Excelテーブル」)を使用する場合に特に問題になります。いくつかの行を挿入し、少し並べ替え、値をドラッグして、条件付き書式設定リストを次に見ると、数十から数百の重複したルールがあります。 (例: http://blog.contextures.com/archives/2012/06/21/Excel-2010-conditional-formatting-nightmare/

私の経験では、混乱を修正する最も簡単な方法は、すべてのルールを削除し、それらを再作成することです(またはしない)。

いくつかの補足事項:

  • 適用範囲は常に絶対です。それを回避する方法はありません。
  • さらに悪いことに、条件付き書式は揮発性の数式のように扱われます。つまり、多くの場合(別のファイルを開く、スクロールするなど)に再計算されます。分割に気付かない場合、しばらくするとアプリケーション全体の速度が大幅に低下する可能性があります。
  • VBAを使用する場合は、少なくとも数式が他のワークシートを参照している場合(名前に注意してください!)、Worksheet_Calculateイベントを使用することをお勧めします。
7
Torben Klein

レポートを作成しようとしたときにこの問題が発生していました-終了したら変更する必要はありませんが、それらを作成している間、新しい行を追加し続け、新しい行ごとに条件付き書式を作成します。

これは決して良い解決策ではありませんが、VBAに頼らずに見つけることができる最高のものでした。

a)条件付き書式設定ルールを一度に1列全体に適用する

たとえば、C2とC17に条件付き書式を設定する代わりに、余分な列を追加し、行2と17に「this one」を書き込み、列C全体の書式を「他の列が 'thisこの形式を適用します」

b)[適用先]を$ C $ 1:$ C $ 2に変更します。

c)変更を加えて行やものを挿入する

d)次に戻って、適用先を$ C:$ Cに変更します

そうすれば、物事を変更して物事を追加している間、条件付き書式は存在しませんが、後ですべてを元に戻します。

後日、さらにいくつかの行を追加する必要がある場合は、最初に$ C:$ Cから$ C $ 1:$ C $ 2に変更してから、変更を加えてから$ C:$ Cに戻します。 。そうすれば、以前にやったこと、つまりすべてを削除し、呪い、もう一度やり直した場合と同じように、すべての書式設定ルールを最初から完全に書き直す必要はありません;)

明らかに、行1または2の一番上に行を挿入することを計画している場合、それは機能しませんが、変更しないことがわかっている他の行に常に設定できます。

3
Simon Taylor

これはかなり古いトピックですが、新しい行を挿入するときに、Excelシートで条件付き書式が重複するという問題もありました。

私はそれを回避することができました。他の人と共有させてください、それも助けになるかもしれません。

私の場合、すべての条件付き書式設定ルールがテーブル全体に適用されました。新しい行を挿入すると、特定のルールのみが複製されることに気付きました。これらのルールは、異なる行の値を比較する式に基づいています。

私の場合、2つの隣接する行の値が異なる場合に水平方向の境界線をレンダリングしたかったのです。例えば:

=$A2 <> $A1

OFFSETを使用して前の行を参照する場合、すべてが正しく、条件付き書式ルールが重複していません。

=$A2<>OFFSET($A2; -1; 0)

実際にこれらの条件付き書式設定式を非表示の列に入れましたが、結果は同じになるはずです。

2
CraZ

私にとってうまくいくのは、行を挿入するときに、別の行から書式設定をコピーしないでください。数式のコピー専用貼り付けのみ。条件付き書式は分割されません。

1
Thomas Frenzel

行を挿入しても条件付き書式設定ルールが分割されないことに気付きました。また、行をコピーして、これを行っている挿入行に貼り付けます。特別な貼り付けを選択し、数式のみを選択すると、正常に機能します。

ただし、条件付き書式の「適用先」フィールドで「間接」または「オフセット」を使用する必要があるかどうかは疑問です。もしそうなら、それは問題になるだろう。

1
ssp

これは古い投稿であることに気付きましたが、同じ問題にぶつかり、それ以来、分割条件付き書式ルールを取得しない方法を見つけました。

Excel 2010スプレッドシートで、列Bに日付を入力します。日付エントリを指でたまに指で触れることがあるため、条件付きで書式設定する必要がありました。最初は、範囲(B2:B1960)を選択していたため、条件付き書式設定ルールの式は「= B2:B1960> TODAY()」になります。

まあ、それは私が既存の行の間に新しい行を挿入するまで行きました。ルールはOPの説明どおりに分割されます。たまたまいくつかの異なるWebサイトを見て、答えを示してくれるMicrosoft Officeサイトを見つけました。書式設定する範囲を強調表示するが、式を「= B2> TODAY()」に変更することを述べました。

数式を変更してから、既存の行の間に新しい行を挿入でき、以前のように分割ルールを取得できなくなりました。以下がそのWebページへのリンクです。 http://office.Microsoft.com/en-us/Excel-help/use-a-formula-to-apply-conditional-formatting-HA102809768.aspx

1
Mike T

この正確な問題に対する私の解決策は、ソースコピーからフォーマットをクリアすることでした。手順:

  1. ソースをクリップボードにコピー
  2. 新しいExcelドキュメントを開く
  3. 特殊貼り付け、式の選択(値と式をコピーし、書式設定を省略します)
  4. これをクリップボードにコピーします
  5. これで、使用する前にソースに貼り付けるか、条件付き書式設定で空白行をシートに挿入できます(行を挿入しても条件付き書式設定の範囲が変更されないことに注意してください)。クリップボードの内容を新しい行に貼り付けます。

これはMS Excel 2016を使用して私のために働いた

1
Pr1nz

以前に投稿されたことに同意します。値のコピーと貼り付け(または数式の貼り付け)は、条件付き書式を分割しないように完全に機能します。

私はそれに対して少し怠け者です。そして、私のスプレッドシートを使用する人がそうすることを望まない。また、値をコピーして貼り付けることを覚えているかどうかも確信できません。 :(

このソリューションがあなたのニーズに合うかどうかはわかりませんが、すべての条件付き書式を削除し、ブックを開くたびに正しい条件付き書式を再適用することに頼りました。

このマクロはワークブックを開くたびに実行されるため、ユーザーはコピーと貼り付けの方法を変更する必要はありません。マクロがそこにあることを知る必要はありません。マクロを手動で実行する必要はありません。自動です。これによりユーザーエクスペリエンスが向上すると感じています。

このコードは、「このワークブック」モジュールにコピーして貼り付ける必要があることに注意してください。通常のモジュールではありません。

Private Sub Workbook_Open()
'This will delete all conditional formatting and reapply the conditional formatting properly.
'After copying and pasting the conditional formatting get split into two or more conditional formattings. After a few
'weeks there are so many conditional formattings that Excel crashes and has to recover.

Dim ws As Worksheet, starting_ws As Worksheet


Set starting_ws = ActiveSheet   'remember which worksheet is active in the beginning
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "InvErr" Then
        ws.Activate
        Cells.FormatConditions.Delete
        ''Every Other Row Tan
        Range("A4:M203").FormatConditions.Add Type:=xlExpression, Formula1:="=ISODD(ROW(A4))"
        Range("A4:M203").FormatConditions(Range("A4:M203").FormatConditions.Count).SetFirstPriority
        Range("A4:M203").FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Range("A4:M203").FormatConditions(1).Interior.ThemeColor = xlThemeColorDark2
        Range("A4:M203").FormatConditions(1).Interior.TintAndShade = 0
        Range("A4:M203").FormatConditions(1).StopIfTrue = False

        ''Highlight Duplicates Red
        Columns("B").FormatConditions.AddUniqueValues
        Columns("B").FormatConditions(Columns("B").FormatConditions.Count).SetFirstPriority
        Columns("B").FormatConditions(1).DupeUnique = xlDuplicate
        Columns("B").FormatConditions(1).Font.Color = -16383844
        Columns("B").FormatConditions(1).Font.TintAndShade = 0
        Columns("B").FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Columns("B").FormatConditions(1).Interior.Color = 13551615
        Columns("B").FormatConditions(1).Interior.TintAndShade = 0
        Columns("B").FormatConditions(1).StopIfTrue = False
    End If
Next

starting_ws.Activate   'activate the worksheet that was originally active
Application.ScreenUpdating = True

End Sub
1
irockyoursocks

2013年、フォーマットルールが分割/複製されたことがわかったら、各フォーマットに新しい名前付き範囲を定義します。次に、= [名前付き範囲]に適用を設定します。 Excelは、指定された範囲を実際の範囲に置き換えます。次に、重複した形式を削除します。

0
JBAbbott

同様のスレッドを使用すると、適切な追跡が可能になります。

条件付き書式設定にWorksheet_Changeイベントを使用する方法

コメントで言及したVBAアプローチとともに、挿入(テストされていない)の影響を受けない可能性があるR1C1スタイルの書式設定の回避策の概要を説明します。

0
danielpiestrak

必要なことは、1)新しい行を挿入する2)クローンを作成する行をコピーする3)特別な「条件付き書式設定を貼り付ける」

直感的ではなく、作成したワークブックを他の人に共有してもらいたい場合は、大量のユーザートレーニング

0
Phil Wade

これは私にとって十分に機能しました...

Sub ConditionalFormattingRefresh()
'
' ConditionalFormattingRefresh Macro
'

'Generales
Dim sh As Worksheet
Dim tbl As ListObject
Dim selectedCell As Range
Set sh = ActiveSheet
Set tbl = Range("Plan").ListObject
Set selectedCell = ActiveCell

'Rango a copiar
Dim copyRow As Range
Set copyRow = tbl.ListRows(1).Range

'Rango a restaurar
Dim startCell As Range
Dim finalCell As Range
Dim refreshRange As Range
Set startCell = tbl.DataBodyRange.Cells(2, 1)
Set finalCell = tbl.DataBodyRange.Cells(tbl.ListRows.Count, tbl.ListColumns.Count)
Set refreshRange = Range(startCell.Address, finalCell)

'Ocultar procesamiento
Application.ScreenUpdating = False
Application.EnableEvents = False

'Borrar formato corrupto
refreshRange.FormatConditions.Delete

'Copiar
copyRow.Copy
'Pegar formato
tbl.DataBodyRange.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

'Retornar a la normalidad
selectedCell.Select
    Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
0
Esteban Antonio

次のように、新しい行または列を挿入するために一貫して機能し、条件付き書式ルールの連続性を維持する単純なプロセスを見つけました(少なくともOffice 2010では)。

  1. 保持する条件付き書式を含む行または列の上、下、または左または右に、希望する数の新しい行または列を簡単に「挿入」します。

注a)条件付き書式は、挿入された行または列に自動的に適用され、それ以上何もする必要はありません。フォーマットは、隣接する行または列から継承されている必要があります。 b)境界線の書式設定も、新しく挿入されたセルにコピーされている必要があります。

  1. 新しく挿入されたものに隣接し、コピーする条件付き書式(および該当する場合は式とデータ)を含む行、列、または範囲を(クリックして)選択します。

  2. 選択した範囲の左下または右下にマウスカーソルを合わせて、プラス「+」記号が表示されるまで待ちます(行のサイズ変更ガジェットと同じように混同しないでください)。

  3. 「+」を左クリックして押したままにし、フォーマットする目的の行、列、または範囲をドラッグしてから離します。

注:1つのセルのみを参照する条件付き書式ルールを作成します:例)「この式が真である値を書式設定:」というタイトルのフィールドで、... = AND($ B8 = ""、$ C8 = "などのルールを作成します"、$ D8 =" "、$ K8 <>" ")、ここでこのルールは、範囲... = $ B $ 8:$ D $ 121、$ J $ 8:$ M $ 121に適用されます。

0
AuctionHalt

Excelのスキルレベルが混在する他のユーザーが参加するソリューションを構築しているので、特定の方法でコピーして貼り付けることを覚えさせるよりも簡単で一貫性のあるものが必要でした。

Excel 2016では、選択した範囲からテーブルを挿入できます。これにより、構造化参照(例:tblTOP [Type]、tblTOPという名前のテーブルのType列のデータを参照)を使用する利点が得られます。

次に、CFの数式部分のテーブルを効果的に参照する方法を示すMicrosoftのサイトでこの答えを見つけました。 条件付き書式設定された参照


それで、それは確立された...

これは私が取り組んでいるものです:

tblTop Columns

条件付き書式を設定して、AからEの間でType値を変更すると、その行が対応する色に変更されるようにします。 (例:Bは行を緑に変えます)

これは、式= INDIRECT( "tblTOP [Type]")= "B"を使用して達成されました。

しかし、行を追加しようとすると、2番目の行に同じフォーマットが適用されました:(。

2行間でCFを分割

働いたCF式

簡単に言えば、次の式は、特定の行にCFルールを適用し、追加または削除される行に影響を与えないようにするために思いついたものです。

= INDIRECT( "tblTOP [@Type]")= "B"

構造化された参照の前に「@」を追加すると、その特定の行についてのみ発生します。いいね.

そのため、タブスルーするか、コンテキストメニューを使用して新しい行を追加し、タイプの選択を待ってその行の色のみを決定できます。

新しい行がクリーンに追加されました

期待どおりに動作する新しい行

このテーブルの目的はエンドユーザーがデータを入力し、必要に応じて行を追加/削除することであるため、セルの貼り付けではテストしていません。したがって、行の貼り付けで機能するかどうかはわかりません。

これがテーブルの条件付き書式設定に役立つことを願っています。

0
Russ W