IT

Excel 2007 조건부 포맷 - 셀 컬러를 얻는 방법은?

itgroup 2023. 9. 25. 22:35
반응형

Excel 2007 조건부 포맷 - 셀 컬러를 얻는 방법은?

(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"))을 물어보겠습니다.내부.색상은 그런데 그린이라고 적혀있지 않은데요, 왜요? 도와주실 수 있나요?

범위("A1").내부.색상은 항상 16777215 범위("A1")를 반환합니다.내부.ColorIndex는 항상 -4142를 반환합니다.

(A1의 색상이 빨강, 파랑, 초록, ...)

범위("A1", "C3").형식 조건.이것을 세어보면 항상 0이 됩니다. 왜죠?

.내부.색상은 조건부 형식의 색상 결과가 아닌 "실제" 색상을 반환합니다.

@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!"

당신은 참조할 필요한 것은<Cell>.FormatConditions(index that is active).Interior.ColorIndex셀의 조건부 포맷 색상을 검색합니다.

예를 들어 다음 링크를 참조할 수 있습니다.

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

@richardtalent(미안, 코멘트를 할 수 없었습니다)의 후속 조치로 다음 링크를 통해 조건부 서식을 평가하여 색상 인덱스를 반환하는 기능이 제공됩니다.

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

Range에 있는 셀의 색상을 얻으려면 Range("A1", "C3")의 형태로 배열 내부의 개별 셀을 참조해야 합니다.셀(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

다시 Excel 도움말에서 Cells([RowIndex]) 사용 방법을 확인합니다.[열 색인]).

만약 위의 내용이 당신에게 맞지 않는다면, 무엇을 확인해 보세요.내부.패턴색지수는 다음과 같습니다.일반적으로 xlAutomatic(솔리드 컬러)으로 설정하고 색상이 변하지 않으면 다른 것으로 설정할 수 있습니다.

XlColorIndex Enumeration에 따르면 ColorIndex=-4142색상 없음을 의미합니다.

왜 이런 일이 일어나는지에 대해서는 저는 잘 모르겠습니다.반환된 값은 RGB 값의 십진법을 나타내는 것 같습니다.스크립트의 개선된 버전은 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

"조건부 형식" 색상을 프로그래밍 방식으로 사용할 수 없는 것 같습니다.대신, 셀 색상을 계산하는 작은 함수를 작성한 다음 값을 편집할 때마다 매크로를 설정하여 활성 셀에서 실행하는 것이 좋습니다.예를 들어 (suedo-code에 대해 죄송합니다 - 저는 더 이상 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 조건부 포맷을 사용할 수는 없지만, 이는 동일한 작업을 수행하고 코드에서 색상을 읽을 수 있습니다.이게 말이 됩니까?

한 번에 세 가지 이상의 색을 가질 수도 있기 때문에...조건부 포맷의 기본 색상으로 이 문제를 해결할 좋은 방법을 찾지 못했습니다.이런 식으로 했습니다. 그러면 셀의 색을 물을 때마다 정확한 색을 검색합니다.

 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로 쉽게 번역할 수 있습니다!

언급URL : https://stackoverflow.com/questions/996384/excel-2007-conditional-formatting-how-to-get-cell-color

반응형