13

私が(a1:c3)から次の範囲を持っていると仮定しましょう

  A B C
1 -1 1 1
2 -1 0 0
3  0 0 1

これで、次の範囲を選択し、条件付き書式を使用して書式設定しました(デフォルトの赤黄緑のカラースケールを使用)...範囲の色は次のようになりました。

    A         B         C
1 Green    Red     Red
2 Green   Yellow Yellow
3 Yellow Yellow Red

ここで、範囲内の任意のセルの色、たとえばMsgBox Range( "A1")。Interior.Colorを尋ねたいのですが、それが緑であるとは言われていません。なぜですか?Plzは私を助けることができますか?

Range( "A1")。Interior.Colorは常に16777215を返しますRange( "A1")。Interior.ColorIndexは常に-4142を返します

(A1の色が赤、青、緑などに関係なく)

Range( "A1"、 "C3")。FormatConditions.Countこれは常に0を返します、なぜですか?

4

7 に答える 7

10

.Interior.Color は、条件付きで書式設定された色の結果ではなく、「実際の」色を返します。

@sss: API 経由では利用できません。

最善の方法は、条件付き書式で使用したのと同じ条件をテストすることです。

これによりコードが重複するのを避けるために、条件条件を UDF に移動することをお勧めします。例:

Function IsGroup1(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue < 0)
End Function

Function IsGroup2(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue = 0)
End Function

Function IsGroup3(ByVal testvalue As Variant) As Boolean
   IsGroup1 = (testvalue > 0)
End Function

次に、条件付き書式で次の数式を使用します。

=IsGroup1(A1)
=IsGroup2(A1)
=IsGroup3(A1)

次に、コードは、セルのを見るのではなく、条件が満たされているかどうかを確認します。

If IsGroup1(Range("$A$1").Value) Then MsgBox "I'm red!"
于 2009-06-15T14:40:08.480 に答える
6

<Cell>.FormatConditions(index that is active).Interior.ColorIndexセルの条件付き書式の色を取得するには、 を参照する必要があります。

例については、以下のリンクを参照してください。

http://www.xldynamic.com/source/xld.CFConditions.html#specific

于 2011-09-23T06:13:49.550 に答える
3

@richardtallent (申し訳ありませんが、コメントできませんでした) のフォローアップとして、次のリンクは、条件付き書式を評価してカラー インデックスを返す関数を取得します。

http://www.bettersolutions.com/excel/EPX299/LI041931911.htm

于 2009-06-17T06:44:21.417 に答える
0

XlColorIndex 列挙 によると、色なしColorIndex=-4142を意味します

なぜこれが起こるのか、私にはわかりません。返される値は、RGB 値の 10 進数表現のようです。値を 16 進 RGB 表記に復号化するこのスクリプトの改良版

Function RGB(CellRef As Variant)
   RGB = ToHex(Range(CellRef).Interior.Color)
End Function

Function ToHex(ByVal N As Long) As String
   strH = ""
   For i = 1 To 6
      d = N Mod 16
      strH = Chr(48 + (d Mod 9) + 16 * (d \ 9)) & strH
      N = N \ 16
   Next i
   strH2 = ""
   strH2 = Right$(strH, 2) & Mid$(strH, 3, 2) & Left$(strH, 2)
   ToHex = strH2
End Function
于 2009-06-15T14:33:01.213 に答える
0

Range 内のセルの色を取得するには、配列内の個々のセルを Range("A1","C3").Cells(1,1) (セル A1) の形式で参照する必要があります。問題が発生しているプロパティの名前を調べる場合は、Excel のヘルプが役立ちます。

また、Excel 2007 は色の種類に整数を使用するため、色のインデックスを整数に割り当て、それをプログラム全体で使用することをお勧めします。あなたの例では、試してください:

Green = Range("A1","C3").Cells(1,1).Interior.Color
Yellow = Range("A1","C3").Cells(1,3).Interior.Color
Red = Range("A1","C3").Cells(2,1).Interior.Color

そして、色をすべて赤に切り替えるには:

Range("A1","C3").Interior.Color = Red

ここでも、Cells([RowIndex],[ColumnIndex]) の使用方法について Excel のヘルプを確認してください。

上記がうまくいかない場合は、 .Interior.PatternColorIndex が何に等しいかを確認してください。私は通常、xlAutomatic (単色) に設定したままにしておきます。色が変わらない場合は、別の値に設定できます。

于 2009-06-15T14:33:46.857 に答える
0

一度に 3 つ以上の異なる色がある可能性があるため... 条件付き書式の既定の色でこれを処理する良い方法が見つかりませんでした... 私はこのようにしました。次に、セルの色を尋ねるたびに、正しい色を取得します!

 for (int t = 0; t < d_distinct.Length; t++ )
 {                        
   Excel.FormatCondition cond =
    (Excel.FormatCondition)range.FormatConditions.Add(
    Excel.XlFormatConditionType.xlCellValue,
    Excel.XlFormatConditionOperator.xlEqual, 
    "="+d_distinct[t],
    mis, mis, mis, mis, mis);
   cond.Interior.PatternColorIndex = 
    Excel.Constants.xlAutomatic;
  cond.Interior.TintAndShade = 0;
  cond.Interior.Color = ColorTranslator.ToWin32(c[t]);
  cond.StopIfTrue = false;                        
}

d_distinct は、範囲内のすべての個別の値を保持します... c は、個別の値ごとに個別の色を保持する Color[] です! このコードは簡単に vb に変換できます。

于 2009-06-18T15:17:17.930 に答える
0

「条件付きフォーマット」の色がプログラムで利用できるようには見えません。代わりに、セルの色を計算する小さな関数を作成し、値を編集するたびにアクティブなセルで実行するマクロを設定することをお勧めします。例 (疑似コードで申し訳ありません - 私はもう VBA の専門家ではありません):

Function GetColorForThisCell(Optional WhatCell as String) as Int

   If WhatCell="" Then WhatCell = ActiveCell

   If Range(WhatCell).value = -1 then GetColorForThisCell = vbGreen
   If Range(WhatCell).value =  0 then GetColorForThisCell = vbYellow
   If Range(WhatCell).value =  1 then GetColorForThisCell = vbRed
End Function

Sub JustEditedCell
   ActiveCell.color = GetColorForThisCell()
End Sub

Sub GetColorOfACell(WhatCell as string)
   Msgbox(GetColorForThisCell(WhatCell) )
End Sub

組み込みの Excel 条件付き書式を使用することはできませんが、これは同じことを達成し、コードから色を読み取ることができます。これは意味がありますか?

于 2009-06-15T16:21:52.447 に答える