エクセルの条件付き書式設定の断片化

conditional-formatting microsoft-excel microsoft-excel-2010

しばしば、私は条件付き書式設定のシートを作成し、条件付き書式設定ルールがセルの範囲に一度だけ適用されるようにセル範囲を設定します

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
....

これを防ぐための良い練習方法はありますか?それとも、ルールセットが面倒になったら手動で片付けるしかないのでしょうか?

  23  Rhys Gibson  2013-05-22


ベストアンサー

行を挿入したり削除したりしても、条件付き書式設定が断片化することはありません

原因は、標準のコピー/貼り付けを使ってセルや行の間でコピー/貼り付けを行っていることです。修正方法は、常にPaste-valueまたはPaste-formulaを使用することです。コピー先で右クリックして、貼り付けオプションセクションで123(値)とf(数式)を選択してください。フォーマットをコピー/貼り付けないでください

標準のコピー/貼り付けを行うと、セルの条件式もコピーされます。2つのルールがあるとしましょう。 1) $A$1:$A$30を赤にする 2) $B$1:$B$30を青にする ここでA10:B10を選択し、それをA20:B20にコピー/ペーストします。Excelが行うのは、A20:B20の条件付き書式設定をそれらのセルに適用されたルールから削除し、A20:B20の書式設定を持つ新しいルールを追加することです。すると、4つのルールができあがります。 1) Make =$A$20 red 2) Make =$B$20 blue 3) Make =$A$1:$A$19,$A$21:$A$30 red 4) Make =$B$1:$B$19,$B$21:$B$30 blue A10だけをA20にコピー/ペーストしていた場合、Excelは元と宛先の両方に同じルールが適用されていることに気付き、ルールを断片化することはありません。エクセルは、コピー/ペーストが2つ以上の条件付きフォーマットに影響を与えたときに、断片化を避ける方法を理解するほど賢くありません

行の挿入や削除は、行の挿入や削除を行った領域をカバーする条件ルールを拡張または縮小するだけなので、断片化の原因にはなりません

誰かが $Q$1:$Q$30 ではなく $Q:$Q を使うことを提案しました。これでは役に立ちませんし、上で述べたようにセルの書式設定をコピーして貼り付けても断片化してしまいます

13  user3347790  2015-10-25


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

enter image description here

5  CharlieRB  2013-05-22


(これは回避策なので、コメントとして載せようと思っていたのですが、評価が足りません)

残念ながら、ルールセットがめちゃくちゃになったら片付ける運命にあるようですね

これを行う簡単な方法は、必要な書式設定を含むワークシートを作成することですが、データはありません。これは、オリジナルのワークシートと同じワークブックに入れたり、テンプレートとして別のワークブックに入れたりすることができます

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

3  None  2017-07-25


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

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

2  Peter Gerhat  2017-07-26


タイトルとURLをコピーしました