[EXCEL] 条件付き書式で設定したセルの色を固定化して貼り付ける

2015年8月16日
  • 命題

     条件付き書式で設定したセル色を固定化して貼り付けたい。

  • 問題1: 標準の操作は用意されていない

     標準の操作で、条件付き書式で設定したセル色を固定化して貼り付けることはできません。
     数式を値で貼り付けたり書式だけを貼り付けるには「形式を選択して貼り付け」で対処できます。しかし条件付き書式は数式を値として貼り付けるようなことが「形式を選択して貼り付け」では行えませんし、他の方法もないようです。
     それでは VBA を使って対処できるかというと、一筋縄とはいかないようです。

  • 問題2: VBA での対処が難しい理由

     ググってみると結構昔からある問題のようでした。
     条件付き書式でない普通の書式のセルの色は Range("~").Interiorで取得できます。また、条件付き書式はのセルの色は Range("~").FormatConditions(n).Interior (nは条件番号)で取得できますが、この値は条件付き書式の定義の値であり、現在適用されているセルの色ではありません。そして現在適用されているセルの書式を表すプロパティなどは用意されていないようです。
     このため、現在適用されているセルの色を取得しようとすると、FormatConditions から条件設定を抽出し、セルの値が条件に合致しているかを検証する必要があります。つまり、ミニ言語を解析するような作業を必要とします。

  • 対策1: Word を使った回避策

     上記の通り、現在のセル色を直接 VBA で取得することが困難です。そこで、Word を用います。
     一旦 Word に貼り付けて、そしてさらに Excel に貼り付けなおすと、条件付き書式は削除されコピーした時点のセルの色が固定化できます。
     手順は以下の通りです。

    1. 固定化したい領域をコピーします。
    2. Word に貼り付けます。
    3. 貼り付けた表を選択し、コピーします。
    4. Excel に貼り付けます。
    5. セルのデータを消すと、元のセルは条件付き書式に従ってセルの色が変わりますが、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の要素にならない) データバーやアイコンセット、スパークラインなどは固定化できません。






カテゴリー: Excel, Office

Follow comments via the RSS Feed | Leave a comment | Trackback URL

4 Comments to "[EXCEL] 条件付き書式で設定したセルの色を固定化して貼り付ける"

  1. Green Wind

    Excelのクリップボードを表示して貼り付ければ、条件付書式は消えて通常の書式になります。

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1333442088

  2. 通りすがり

    「VBA」「Apple Script」「マクロ」「関数」を使わずに
    条件付き書式の結果のみをコピーする方法を求めて
    検索語句を色々と変えながら探し続けていましたが、
    なかなか見つからず…。

    「エクセル 条件付き書式の書式のみコピー」で
    ググったら、こちらに辿り着きまして、
    紹介されていたWordを併用する方法を試してみたら…、
    いとも簡単に出来ました!

    ありがとうございました。

  3. ante

    どうすればいいか分からなくてずっと悩んでいた答えをここで見つけました。助かりました。本当にありがとう。
    officeクリップボードの貼り付けでは解決できないレアケースだったので。世の中広いですね。

  4. Thanks

    ありがとうございました。効率アップできました。

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org