Keesには、条件付き書式を広範囲に使用するワークシートがあります。

ただし、ユーザーが情報をコピーして貼り付けたり、ドラッグアンドドロップを使用してワークシートを編集したりすると、条件付き書式が混乱し続けます。彼はこれが起こらないようにする最善の方法について疑問に思います。

これは、条件付き書式がまさにそれ、つまり書式と見なされるために発生します。標準のコピーアンドペースト(またはドラッグアンドドロップ編集)

フォーマットを含むすべてをコピーします。これは、ターゲットセルのフォーマットが、ターゲットセルのフォーマットではなく、ソースセルのフォーマットを持つことを意味します(ターゲットセルにあった可能性のある条件付きフォーマットを含む)。

したがって、答えは、標準のコピーアンドペーストを行わないようにユーザーに指示することです。

代わりに、貼り付けオプションを使用して、フォーマット以外のすべて(またはすべて)を貼り付ける必要があります。

もちろん、別のオプションは、ユーザーが何もコピーして貼り付けられないようにワークシートを保護することです。ただし、ユーザーに変更を加えてもらいたい場合があるため、これはユーザーにとっては少し抜本的なことかもしれません。 (条件付き書式を台無しにしたくないだけです。)

これはマクロアプローチにつながります。セルに条件付き書式を適用するマクロを記録できる場合は、必要に応じて、その記録されたマクロを適用するいくつかの追加のマクロを作成できます。たとえば、記録するマクロがSetCondFormatのように短くてセクシーなものと呼ばれているとします。

次に、Visual Basic Editorに移動し、[イミディエイト]ウィンドウで次のように入力します。

? Cells.SpecialCells(xlCellTypeAllFormatConditions).Address

条件付き書式がすべて設定されているとすると、条件付き書式を使用するセルと範囲のアドレスを示す行(おそらく長い行)が返されます。次のようになります:

$B$3:$B$50,$D$3:$D$50,$G$3:$I$20

次に、次のマクロをThisWorksheetコードモジュールに追加します。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range

Const cCFAddress = "$B$3:$B$50,$D$3:$D$50,$G$3:$I$20"



On Error Resume Next     Set r = Range(cCFAddress)

On Error GoTo 0

If r IsNot Nothing Then         If Application.Intersect(Target, r) IsNot Nothing Then             SetCondFormat         End If     End If End Sub

ここで重要なのは、cCFAddress定数が、イミディエイトウィンドウにアドレスが表示されたときに返されたものと同じに設定されていることを確認することです。 (後で条件付き書式を変更する場合は、イミディエイトウィンドウのトリックを再度使用して、上記のマクロの行を変更するだけです。)

ワークシートに変更があるたびにマクロが実行されます。変更されたアドレス(Target変数で渡される)が条件付きフォーマットを含む元のセルの一部であるかどうかを確認します。その場合、SetCondFormat(条件付き書式を実行するために記録したもの)が再度実行されます。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(4362)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。