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
'IT' 카테고리의 다른 글
MySql 타임스탬프 열을 PHP의 현재 타임스탬프로 업데이트하는 방법은 무엇입니까? (0) | 2023.09.25 |
---|---|
스프링 컨트롤러의 범위 및 인스턴스 변수 (0) | 2023.09.25 |
$.각 () 대 () 루프 - 및 성능 (0) | 2023.09.25 |
예외 발생 시 데이터베이스 연결을 닫는 최상의 설계 패턴 (0) | 2023.09.25 |
VBA로 특정 열을 삭제하는 방법은? (0) | 2023.09.25 |