셀 내의 16진수 색상 값을 사용하여 셀을 강조 표시하는 방법은 무엇입니까?
기호와 일치하는 16진수 색상의 스프레드시트가 있습니다.셀 자체(또는 그 옆에 있는 것)를 셀 내의 16진수 색상으로 채우고 싶습니다.저는 "조건부 서식"에 대해 조금 읽었고, 그것이 그것을 하는 방법이라고 생각합니다.
제가 원하는 결과를 어떻게 얻을 수 있을까요?
모든 색상에 대해 조건부 포맷을 사용할 수 없습니다.
다음과 같이 가정합니다. 행 1에는 데이터 라벨이 포함되어 있고, 데이터 세트에는 공백이 없으며, HEX 색상은 글꼴이 아닌 채우기를 위한 것이며, HEX 색상 값(식이 아닌 숫자)을 열 C:E(R,G,B)에 구문 분석했으며, 자주 이 작업을 수행할 필요가 없는 경우 ColorCells 매크로가 적합할 수 있습니다.
Sub ColourCells()
Dim HowMany As Integer
On Error Resume Next
Application.DisplayAlerts = False
HowMany = Application.InputBox _
(Prompt:="Enter last row number.", Title:="To apply to how many rows?", Type:=1)
On Error GoTo 0
Application.DisplayAlerts = True
If HowMany = 0 Then
Exit Sub
Else
Dim i As Integer
For i = 2 To HowMany
Cells(i, 3).Interior.Color = RGB(Cells(i, 3), Cells(i, 4), Cells(i, 5))
Next i
End If
End Sub
메시지가 나타나면 n에 대해 입력할 값을 입력합니다.
샘플 출력 및 공식 등:
Excel의 RGB() 함수는 실제로 BGR 값을 생성하므로(왜 그런지 알 수 있는 사람은 아무도 이유를 말하지 않을 것입니다) Excel은 역순으로 니블을 표시합니다.코드 Column3,4,5의 경우 논리적이지만 이미지의 기존 RGB보다는 BGR이 이상하게 보일 수 있다고 생각했습니다.이미지에서 F의 경우 C3 값('RGB' 3의 왼쪽 열)은 16진수 색상에 RIGHT()를 적용하여 도출됩니다.
존 펠티어의 답변에 대한 마이너 편집.그의 기능은 거의 작동하지만 엑셀이 RGB가 아닌 BGR로 렌더링하기 때문에 렌더링하는 색상이 잘못되었습니다.다음은 16진수 값 쌍을 '올바른' 순서로 스왑하는 수정된 기능입니다.
Sub ColorCellsByHex()
Dim rSelection As Range, rCell As Range, tHex As String
If TypeName(Selection) = "Range" Then
Set rSelection = Selection
For Each rCell In rSelection
tHex = Mid(rCell.Text, 6, 2) & Mid(rCell.Text, 4, 2) & Mid(rCell.Text, 2, 2)
rCell.Interior.Color = WorksheetFunction.Hex2Dec(tHex)
Next
End If
End Sub
훨씬 단순합니다.
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
선행하는 "#"을 중간 스트립으로 제거하면 Hex2Dec은 16진수를 VBA가 사용할 수 있는 10진수 값으로 변환합니다.
따라서 처리할 범위를 선택하고 다음을 실행합니다.
Sub ColorCellsByHexInCells()
Dim rSelection As Range, rCell As Range
If TypeName(Selection) = "Range" Then
Set rSelection = Selection
For Each rCell In rSelection
rCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(rCell.Text, 2))
Next
End If
End Sub
변환하기 위해 VBA/워크시트 장벽을 반복적으로 뚫을 필요가 없습니다.이 간소화된 버전은 올바른 바이트 순서를 가져옵니다.
Sub ColorCellsByHex()
Dim r
If TypeName(Selection) <> "Range" Then Exit Sub
For Each r In Selection
r.Interior.Color = Abs(("&H" & Mid(r, 6, 2) & Mid(r, 4, 2) & Mid(r, 2, 2)))
Next
End Sub
이것은 또 다른 옵션입니다. 셀의 값이 "#"으로 시작하고 7자라고 가정하여 셀을 선택할 때 셀 색상을 업데이트합니다.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Left(ActiveCell.Text, 1) = "#" And Len(ActiveCell.Text) = 7) Then
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
End If
End Sub
이를 위해 Hex2Dec 함수로 사용자 양식을 만들 수 있습니다.
Function Hex2Dec(n1 As String) As Long
Dim nl1 As Long
Dim nGVal As Long
Dim nSteper As Long
Dim nCount As Long
Dim x As Long
Dim nVal As Long
Dim Stepit As Long
Dim hVal As String
nl1 = Len(n1)
nGVal = 0
nSteper = 16
nCount = 1
For x = nl1 To 1 Step -1
hVal = UCase(Mid$(n1, x, 1))
Select Case hVal
Case "A"
nVal = 10
Case "B"
nVal = 11
Case "C"
nVal = 12
Case "D"
nVal = 13
Case "E"
nVal = 14
Case "F"
nVal = 15
Case Else
nVal = Val(hVal)
End Select
Stepit = (nSteper ^ (nCount - 1))
nGVal = nGVal + nVal * Stepit
nCount = nCount + 1
Next x
Hex2Dec = nGVal
End Function
...
UserForm1.TextBox1 = "RGB(" & Hex2Dec(UserForm1.txtHex1.Value) & "," & _
Hex2Dec(UserForm1.txtHex2.Value) & "," & Hex2Dec(UserForm1.txtHex3.Value) & ")"
예를 들어, 텍스트 상자에 입력된 값: #FF8800 - 결과: RGB(255,136,0)
언급URL : https://stackoverflow.com/questions/10455366/how-to-highlight-a-cell-using-the-hex-color-value-within-the-cell
'programing' 카테고리의 다른 글
오라클에서 숫자 데이터가 포함되지 않은 행 찾기 (0) | 2023.07.05 |
---|---|
리비전 번호에 대한 Git 등가물은 무엇입니까? (0) | 2023.07.05 |
값 오류:이 시트는 너무 큽니다!시트 크기는 1220054, 3 최대 시트 크기는 1048576, 16384입니다. (0) | 2023.07.05 |
Oracle의 In vs OR 중 어느 쪽이 더 빠릅니까? (0) | 2023.07.05 |
아랍어 문자가 포함된 CSV 파일이 Excel에서 기호로 표시됩니다. (0) | 2023.07.05 |