- 命題
条件付き書式で設定したセル色を固定化して貼り付けたい。
- 問題1: 標準の操作は用意されていない
標準の操作で、条件付き書式で設定したセル色を固定化して貼り付けることはできません。
数式を値で貼り付けたり書式だけを貼り付けるには「形式を選択して貼り付け」で対処できます。しかし条件付き書式は数式を値として貼り付けるようなことが「形式を選択して貼り付け」では行えませんし、他の方法もないようです。
それでは VBA を使って対処できるかというと、一筋縄とはいかないようです。 - 問題2: VBA での対処が難しい理由
ググってみると結構昔からある問題のようでした。
条件付き書式でない普通の書式のセルの色は Range("~").Interiorで取得できます。また、条件付き書式はのセルの色は Range("~").FormatConditions(n).Interior (nは条件番号)で取得できますが、この値は条件付き書式の定義の値であり、現在適用されているセルの色ではありません。そして現在適用されているセルの書式を表すプロパティなどは用意されていないようです。
このため、現在適用されているセルの色を取得しようとすると、FormatConditions から条件設定を抽出し、セルの値が条件に合致しているかを検証する必要があります。つまり、ミニ言語を解析するような作業を必要とします。 - 対策1: Word を使った回避策
上記の通り、現在のセル色を直接 VBA で取得することが困難です。そこで、Word を用います。
一旦 Word に貼り付けて、そしてさらに Excel に貼り付けなおすと、条件付き書式は削除されコピーした時点のセルの色が固定化できます。
手順は以下の通りです。- 固定化したい領域をコピーします。
- Word に貼り付けます。
- 貼り付けた表を選択し、コピーします。
- Excel に貼り付けます。
- セルのデータを消すと、元のセルは条件付き書式に従ってセルの色が変わりますが、Word から貼り付けたほうはセルの色は固定化しています。
- 固定化したい領域をコピーします。
- 対策2: ExcelVBA でなんとかならないか?
以下の VBA を実行することで、上記と同じ動作を実現できます。
Sub PasteDisplayInterior() Set wsh = CreateObject("WScript.Shell") cmd = "Powershell -sta -command " _ & """" _ & " Add-Type -an System.Windows.Forms; " _ & " $a = [System.Windows.Forms.Clipboard]::GetData('HTML Format'); " _ & " [System.Windows.Forms.Clipboard]::Clear(); " _ & " [System.Windows.Forms.Clipboard]::SetData('HTML Format', $a); " _ & """" wsh.Run cmd, 0, True ActiveSheet.Paste End Sub
やっていることは、Powershell を使ってコピーした内容から html 要素だけを抜き出して戻し、それを Excel に貼り付けています。
クリップボードの操作には .net の Windows.Forms.Clipboard を使用しています。 - その他注意事項
とはいえ、一般の書式に置き換わらない(=HTMLの要素にならない) データバーやアイコンセット、スパークラインなどは固定化できません。
Green Wind
Excelのクリップボードを表示して貼り付ければ、条件付書式は消えて通常の書式になります。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1333442088
Link | 2015年12月11日 08:57
通りすがり
「VBA」「Apple Script」「マクロ」「関数」を使わずに
条件付き書式の結果のみをコピーする方法を求めて
検索語句を色々と変えながら探し続けていましたが、
なかなか見つからず…。
「エクセル 条件付き書式の書式のみコピー」で
ググったら、こちらに辿り着きまして、
紹介されていたWordを併用する方法を試してみたら…、
いとも簡単に出来ました!
ありがとうございました。
Link | 2016年5月16日 19:36
ante
どうすればいいか分からなくてずっと悩んでいた答えをここで見つけました。助かりました。本当にありがとう。
officeクリップボードの貼り付けでは解決できないレアケースだったので。世の中広いですね。
Link | 2021年7月11日 23:22
Thanks
ありがとうございました。効率アップできました。
Link | 2022年5月19日 14:48