- 締切済み
EXCELのマクロで別のファイルの色を参照する方法を教えて下さい
こんにちは。 EXCELのマクロを組んでいますが、上手くいかないので教えて下さい。 2つの違う名前のEXCELファイルがあり、片方には条件付書式で、>0だと黄色、=0だとピンクの書式設定をしています。 これと同じ色を別のファイルのセルに設定したいのですが、上手くいきません。 各ファイルには、前日比率(条件付書式を設定しているファイル)と実数(マクロを組みたいファイル)が入力されています。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 前日比率のファイルの色だけを表示したいのです。 .... 既にその方法は提示しています。#2 のコードは試していただ けたのでしょうか? #2 に頂いたお礼欄を読ませていただきましたが、意味が理解できま せん。何かうまくいかない点があったのですか? #2 は条件付書式によるセルの着色(のカラー番号)を VBA で取得 する関数です。カラー番号さえわかれば、あとは Sub Sample() Dim r1 As Range, r2 As Range Dim lIdx As Long ' // 条件付書式の色を調べたいセル Set r1 = Workbooks("Book2").Sheets("Sheet1").Range("A1") ' // 着色したいセル Set r2 = ThisWorkbook.Sheets("Sheet1").Range("C1") lIdx = GetColorIndex(r1) r2.Interior.ColorIndex = lIdx End Sub とかで、 > 前日比率のファイルの色だけを表示したいのです。 ができると思いますけど.... ご質問の内容を実現しようと思えば、#1 の方もコメントされてます が、条件付き書式の色を取得する事は通常できませんので、面倒です けど関数を自作するしかないのです。 ご質問の趣旨は理解しているつもりですが。
- KenKen_SP
- ベストアンサー率62% (785/1258)
かなり以前に作ったものですが、条件付書式による着色を考慮しつつ、 カラーインデックスを取得する関数です。低速ですが。。。 やってることは条件付書式の数式を自力解析です。無駄かも??? やはり、#1 ご回答のとおり条件付書式ごとコピーしてしまうのが一番 手っ取り早いと思いますよ。 ' // セルのカラーインデックスを条件付き書式を考慮して返す Public Function GetColorIndex( _ ByVal rCel As Range, _ Optional ColorOfInterior As Boolean = True _ ) As Variant ' @引 数: rCel 調べるセル ' @引 数: ColorOfInterior[Boolean] ' True: セル背景色 False: セルフォント色 ' @戻り値; 成功時:カラーインデックス 失敗時:False Dim f0, f1, f2, tmp Dim i As Integer Dim flag As Boolean Dim FC As FormatCondition On Error GoTo ERROR_HANDLER ' 複数の Range が渡された場合対策で左角のセルのみに参照し直し Set rCel = rCel.Cells(1, 1) ' 条件付き書式フラグ flag = False ' 条件付き書式の設定有無で分岐 If rCel.FormatConditions.Count > 0 Then ' 条件付き書式の条件を満たすか評価(条件の最後から調べる) For i = rCel.FormatConditions.Count To 1 Step -1 Set FC = rCel.FormatConditions(i) If FC.Type = xlExpression Then ' xlExpression 「式が」 If Evaluate(FC.Formula1) Then End If ElseIf FC.Type = xlCellValue Then ' xlCellValue 「セルが」 If Len(rCel.Formula) > 0 Then f0 = Evaluate(rCel.Value) f1 = Evaluate(FC.Formula1) f2 = Evaluate(FC.Formula2) If f1 > f2 Then tmp = f1: f1 = f2: f2 = tmp Select Case FC.Operator Case xlBetween: flag = (f1 <= f0) And (f0 <= f2) Case xlEqual: flag = (f1 = f0) Case xlGreater: flag = (f1 > f0) Case xlGreaterEqual: flag = (f1 >= f0) Case xlLess: flag = (f1 < f0) Case xlLessEqual: flag = (f1 <= f0) Case xlNotBetween: flag = Not (f1 <= f0 And f0 <= f2) Case xlNotEqual: flag = (f1 <> f0) End Select End If Else Err.Raise 1000, , "未対応の Type" End If If flag Then ' 条件付き書式の条件を満たす場合 GetColorIndex = IIf(ColorOfInterior, _ FC.Interior.ColorIndex, _ FC.Font.ColorIndex) Exit For End If Set FC = Nothing Next i End If ' 条件付き書式が設定されてない、または条件を満たさない場合 If Not flag Then GetColorIndex = IIf(ColorOfInterior, _ rCel.Interior.ColorIndex, _ rCel.Font.ColorIndex) End If Set rCel = Nothing Exit Function ERROR_HANDLER: Err.Clear GetColorIndex = False End Function
お礼
有難うございます。 私の説明が悪かったのかもしれません。 条件付書式ごとコピーしても、色がつかないのです。というのも、片方のファイルには前日比率の%表示、片方には日毎の実数が入力されています。条件付書式は、前日比率の表につけており、これがプラスかマイナスで表示されると、違う色が表示されるようになっています。つまり、日毎の実数が入力されているファイルに同じ条件付書式を設定しても、同じ色には表示されないのです。 実数が入力されているファイルに、前日比率のファイルの色だけを表示したいのです。 すみません。宜しくお願いします。
- hana-hana3
- ベストアンサー率31% (4940/15541)
VBAでは条件付き書式の色を取得する事はできません。 条件も含めてコピーするか、取得した値からVBAで色を設定する事になるかと思います。
お礼
有難うございます。VBAでは条件付書式をつけることが出来ない事は知っています。 ですので、マクロでなんとかならないものかと・・・ EXCELでも条件付書式の設定は、別シートや別ファイルには設定できないので・・・
お礼
素人ですみません。 試してみたのですが、色が全くつきません。 どうすればいいのでしょうか・・・