『条件付き書式によって表示された色だけ残し、条件付き書式を解除する』あるいは『条件付き書式よって表示された色を取得する』というお題です。
以前の記事でもリンク貼って紹介しましたが、例えば
http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt
のように、2003までは条件付き書式の条件式を評価する方法で取得が可能でした。
2007からは仕様変更とバグの為、この類の手法はかなり面倒な事になります。
詳細は■xl2007:ModifyAppliesToRangeメソッドなどの一連の過去記事に書いてます。
[適用先]のセル範囲が条件ごとに違う場合に[Formula1プロパティ]などが正しく取得できない、といった事が主な理由です。
条件付き書式の結果である色設定などを単純に取得したいだけなら、[Webページとして発行]機能が使えます。
2007ではWebページで保存したmhtファイルをExcelで開くと、セル背景色などの書式情報が保持されています。
2003以前では取れませんでした。
まずはシートを追加し、条件付き書式を設定するコード。
[PublishObjects.Addメソッド]を使って、表示された色だけ残し条件付き書式を解除するコード。
※ただし、書式に「データバー」や「アイコンセット」、グラデーション色などを使用している場合はmhtファイルでも保持されませんので取得できません。
他に、Wordを経由させる手法でも書式が固定されて取得できるようです。これは2003以前も共通でいけるような気がしますね。
http://moug.net/faq/viewtopic.php?t=53734
(ログ保管期間が限られてます。リンク切れたらごめんなさい。)
機会あったらこちらを試行してもいいかも。
以前の記事でもリンク貼って紹介しましたが、例えば
http://www.keep-on.com/excelyou/2000lng4/200005/00050350.txt
のように、2003までは条件付き書式の条件式を評価する方法で取得が可能でした。
2007からは仕様変更とバグの為、この類の手法はかなり面倒な事になります。
詳細は■xl2007:ModifyAppliesToRangeメソッドなどの一連の過去記事に書いてます。
[適用先]のセル範囲が条件ごとに違う場合に[Formula1プロパティ]などが正しく取得できない、といった事が主な理由です。
条件付き書式の結果である色設定などを単純に取得したいだけなら、[Webページとして発行]機能が使えます。
2007ではWebページで保存したmhtファイルをExcelで開くと、セル背景色などの書式情報が保持されています。
2003以前では取れませんでした。
まずはシートを追加し、条件付き書式を設定するコード。
Option Explicit Sub pre() With Sheets.Add.Range("B5:D10") .Formula = "=INT(RAND()*100)" .Value = .Value .FormatConditions.AddColorScale ColorScaleType:=2 Call try(.Cells) End With End Sub Sub try(ByRef r As Range) Dim rg As Range Dim x As Long Dim y As Long Dim i As Long Set rg = r.Offset(, r.Columns.Count + 1).Item(1) For x = 1 To r.Columns.Count For y = 1 To r.Rows.Count With rg.Offset(i) .Value = r(y, x).Address(0, 0) .Offset(, 1).Value = r(y, x).Value .Offset(, 2).Value = r(y, x).Interior.Color .Offset(, 3).Interior.Color = .Offset(, 2).Value i = i + 1 End With Next Next Set rg = Nothing End Sub (結果)
[PublishObjects.Addメソッド]を使って、表示された色だけ残し条件付き書式を解除するコード。
Sub test() Dim ws As Worksheet Dim tmp As String '既存ファイルに注意 tmp = Application.DefaultFilePath & "¥temp.mht" With ThisWorkbook Set ws = .ActiveSheet .PublishObjects.Add( _ xlSourceSheet, tmp, ws.Name, "", xlHtmlStatic _ ).Publish True End With ws.UsedRange.FormatConditions.Delete With Workbooks.Open(tmp) .Sheets(1).UsedRange.Copy ws.Cells(1).PasteSpecial xlPasteFormats Application.CutCopyMode = False .Close False End With Kill tmp Call try(ws.Range("B5:D10")) Set ws = Nothing End Sub (結果)
※ただし、書式に「データバー」や「アイコンセット」、グラデーション色などを使用している場合はmhtファイルでも保持されませんので取得できません。
他に、Wordを経由させる手法でも書式が固定されて取得できるようです。これは2003以前も共通でいけるような気がしますね。
http://moug.net/faq/viewtopic.php?t=53734
(ログ保管期間が限られてます。リンク切れたらごめんなさい。)
機会あったらこちらを試行してもいいかも。