• 締切済み

EXCELのマクロで別のファイルの色を参照する方法を教えて下さい

こんにちは。 EXCELのマクロを組んでいますが、上手くいかないので教えて下さい。 2つの違う名前のEXCELファイルがあり、片方には条件付書式で、>0だと黄色、=0だとピンクの書式設定をしています。 これと同じ色を別のファイルのセルに設定したいのですが、上手くいきません。 各ファイルには、前日比率(条件付書式を設定しているファイル)と実数(マクロを組みたいファイル)が入力されています。 宜しくお願いします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> 前日比率のファイルの色だけを表示したいのです。 .... 既にその方法は提示しています。#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 の方もコメントされてます が、条件付き書式の色を取得する事は通常できませんので、面倒です けど関数を自作するしかないのです。 ご質問の趣旨は理解しているつもりですが。

abc2510
質問者

お礼

素人ですみません。 試してみたのですが、色が全くつきません。 どうすればいいのでしょうか・・・

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

かなり以前に作ったものですが、条件付書式による着色を考慮しつつ、 カラーインデックスを取得する関数です。低速ですが。。。 やってることは条件付書式の数式を自力解析です。無駄かも??? やはり、#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

abc2510
質問者

お礼

有難うございます。 私の説明が悪かったのかもしれません。 条件付書式ごとコピーしても、色がつかないのです。というのも、片方のファイルには前日比率の%表示、片方には日毎の実数が入力されています。条件付書式は、前日比率の表につけており、これがプラスかマイナスで表示されると、違う色が表示されるようになっています。つまり、日毎の実数が入力されているファイルに同じ条件付書式を設定しても、同じ色には表示されないのです。 実数が入力されているファイルに、前日比率のファイルの色だけを表示したいのです。 すみません。宜しくお願いします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

VBAでは条件付き書式の色を取得する事はできません。 条件も含めてコピーするか、取得した値からVBAで色を設定する事になるかと思います。

abc2510
質問者

お礼

有難うございます。VBAでは条件付書式をつけることが出来ない事は知っています。 ですので、マクロでなんとかならないものかと・・・ EXCELでも条件付書式の設定は、別シートや別ファイルには設定できないので・・・

関連するQ&A