Excelの条件付き書式の断片化


22

多くの場合、条件付き書式設定でシートを作成し、セル範囲を設定して、条件付き書式設定ルールがセル範囲に一度だけ適用されるようにします。

Make $A$1:$A$30 red and
Make $B$1:$B$30 blue.

多数の行や列を挿入または削除すると、条件付き書式設定ルールセットは非常に断片化され、異なる範囲に対して同じルールが繰り返されます。例えば

Make $A$1:$A$2 red 
Make $A$3:$A$4 red 
Make $A$5:$A$9 red
Make $A$10:$A$20 red 
Make $A$21:$A$30 red
...
Make $B$1:$B$2 blue 
Make $B$3:$B$4 blue
Make $B$5:$B$9 blue
Make $B$10:$B$20 blue 
Make $B$21:$B$30 blue
....

これを防ぐ良い練習方法はありますか、それともルールセットが乱雑になったときに手動でルールセットをクリーンアップする運命にありますか?

回答:


13

行を挿入および削除しても、条件付き書式は断片化されません。

原因は、標準のコピー/貼り付けを使用してセルまたは行間でコピー/貼り付けを行うことです。修正は、常に貼り付け値または貼り付け式を使用することです。宛先を右クリックすると、[貼り付けオプション]セクションに123(値)とf(式)が表示されます。条件をコピー/貼り付けすると、断片化されることがあるため、書式をコピー/貼り付けしないでください。

標準のコピー/貼り付けを行うと、セルの条件付き数式もコピーされます。2つのルールがあるとします
。1)$ A $ 1:$ A $ 30を赤にする
2)$ B $ 1:$ B $ 30を青に
するA10:B10を選択して、A20:B20にコピー/貼り付けします。Excelは、A20:B20の条件付き書式をそれらのセルに適用されたルールから削除し、A20:B20の書式を持つ新しいルールを追加します。あなたは4つのルールになります。
1)メイク= $ A $ 20赤
2)メイク= $ B $ 20青
3)メイク= $ A $ 1:$ A $ 19、$ A $ 21:$ A $ 30赤
4)メイク= $ B $ 1:$ B $ 19、$ B $ 21:$ B $ 30青
A10からA20 Excelだけをコピー/貼り付けした場合、同じルールがソースと宛先の両方に適用され、ルールは断片化されないことに気づいたでしょう。Excelは、コピー/貼り付けが2つ以上の条件付き書式に影響する場合に断片化を回避する方法を見つけるほど賢くありません。

Excelは、行の挿入または削除を行った領域をカバーする条件ルールを単純に拡大または縮小するため、行の挿入および削除は断片化を引き起こしません。

誰かが$ Q $ 1:$ Q $ 30ではなく$ Q:$ Qを使用することを提案しました。これは役に立たず、上記のようにセルの書式設定をコピー/貼り付けしても断片化が発生します。


また、Cut <kbd> ctrl-x <kbd>はセルカットから条件付き書式設定を削除し(現在セルには書式設定がありません)、書式設定を新しいセルに貼り付けます。私はそこにいる誰かがこれを防ぐ方法を知っているに違いない?
-user5389726598465

@ user135711それはあなたが何をしようとしているかに依存します。デフォルトでは、コピーと切り取りの両方で、切り取りを使用してソースセルの数式、書式設定、リンクを取得し、ソースセルから同じものを削除します。目的がソースから式/値を削除するがフォーマットを維持することである場合、コピー先にデータを貼り付けてからソースを削除します。削除(Delキー)は、式または値のみをクリアします。フォーマットとリンクはそのままです。
user3347790

1
この質問の別のバージョンで回答として支持されたINDIRECT()関数は、セルを手動で入力した場合と同様に、applies toフィールドで使用されたときにセルに対して評価されるため、機能しません。
-user5389726598465

superuser.com/a/1113566/79488には、コピー/フェーズを使用した場合に断片化されたルールをクリーンアップするための適切な回避策があります
Fabian Schmied

5

テーブルの列に条件付き書式を適用するときに同じ問題がありました。行を追加するとき、を使用して列全体$A:$Aまたはいずれかの列にルールを適用するのが最適であることがわかりました。

ここに画像の説明を入力してください


私の経験では、ワークシートが少し大きくなると、これを行うと条件付き書式が肥大化し、計算をクロールに減らすことができます。
rohrl77

3

(これは回避策であるため、コメントとして配置するつもりでしたが、評判が十分ではありません。)

残念なことに、ルールセットが乱雑になった場合、ルールセットを削除する運命にあるようです。

これを行う簡単な方法は、必要な書式設定を含むがデータは含まないワークシートを作成することです。これは、元のワークシートと同じワークブックにある場合もあれば、テンプレートとして保持している別のワークブックにある場合もあります。

クリーンアップする必要がある場合は、このワークシートに移動し、[すべて選択 ]ボタンを右クリックして、[ 書式ペインタ ]を選択し、元のワークシートの[すべて選択 ]ボタンをクリックします。形式は汚染されていないバージョンで上書きされます。


2

セルを手動でコピー/貼り付け/切り取り/挿入すると問題が発生し、回避するのは困難です。

VBAマクロを使用して問題を解決しました。

セルを手動でコピー/貼り付け/切り取り/挿入する代わりに、Excelのマクロを使用してセル範囲を保持します(ボタンでアクティブ化)。

Sub addAndBtnClick()
    Set Button = ActiveSheet.Buttons(Application.Caller)
    With Button.TopLeftCell
        ColumnIndex = .Column
        RowIndex = Button.TopLeftCell.Row
    End With
    currentRowIndex = RowIndex
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.ListRows.Add (currentRowIndex)
    Set currentCell = Table.DataBodyRange.Cells(currentRowIndex, Table.ListColumns("Column name").Index)
    currentCell.Value = "Cell value"
    Call setCreateButtons
End Sub

Sub removeAndBtnClick()
    Set Button = ActiveSheet.Buttons(Application.Caller)
    With Button.TopLeftCell
        ColumnIndex = .Column
        RowIndex = Button.TopLeftCell.Row
    End With
    currentRowIndex = RowIndex
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.ListRows(currentRowIndex - 1).Delete
End Sub

Sub setCreateButtons()
    Set Table = ActiveSheet.ListObjects("Table name")
    ActiveSheet.Buttons.Delete
    For x = 1 To Table.Range.Rows.Count
        For y = 1 To Table.Range.Columns.Count

            If y = Table.ListColumns("Column name").Index Then
                Set cell = Table.Range.Cells(x, y)
                If cell.Text = "Some condition" Then
                    Set btn = ActiveSheet.Buttons.Add(cell.Left + cell.Width - 2 * cell.Height, cell.Top, cell.Height, cell.Height)
                    btn.Text = "-"
                    btn.OnAction = "removeAndBtnClick"
                    Set btn = ActiveSheet.Buttons.Add(cell.Left + cell.Width - cell.Height, cell.Top, cell.Height, cell.Height)
                    btn.Text = "+"
                    btn.OnAction = "addAndBtnClick"
                End If
            End If
        Next
    Next
End Sub

フォーマットをリセットするには(実際には必要ありません):

Sub setCondFormat()
    Set Table = ActiveSheet.ListObjects("Table name")
    Table.Range.FormatConditions.Delete
    With Table.ListColumns("Column name").DataBodyRange.FormatConditions _
        .Add(xlExpression, xlEqual, "=ISTLEER(A2)") 'Rule goes here
        With .Interior
            .ColorIndex = 3 'Formatting goes here
        End With
    End With
    ...
End Sub

3
複数の質問に同じ回答を投稿しないでください。同じ情報が本当に両方の質問に答える場合、1つの質問(通常は新しい質問)をもう1つの質問の複製として閉じる必要があります。重複として閉じるように投票することでこれを示すことができます。または、そのための十分な評判がない場合は、重複であることを示すフラグ立てます。それ以外の場合は、この質問に対する回答を調整し、同じ回答を複数の場所に貼り付けないでください。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.