Excel에서 셀 내의 부분 텍스트 색칠하기

Excel에서 셀 내의 부분 텍스트 색칠하기

Excel에는 해당 값을 기준으로 전체 셀의 색상을 동적으로 지정하는 여러 가지 방법이 있지만 해당 값을 기준으로 셀의 일부만 동적으로 색상을 지정하는 방법이 있습니까?

예를 들어, 다음과 같은 보고서를 작성한다고 가정해 보겠습니다.

 _________________________
|       |    Dec    | Nov |
|_______|___________|_____|
|Gross R| $75 (-25%)| $100|
|_______|___________|_____|
|Net Inc| $55 (+10%)| $50 |
|_______|___________|_____|

이 시나리오에서는 셀에 있는 달러 값 $75 및 $55가 아닌 백분율 값(-25%) 및 (+10%)에만 색상을 지정하려고 합니다. 문제를 추가하는 것은 색상 지정이 동적이어야 하고(양수 값은 녹색, 음수 값은 빨간색) 이러한 셀이 참조라는 점입니다(따라서 수동 색상 지정은 테이블에서 벗어납니다).

내장된 기능을 사용해 보았지만 TEXT()역시 작동하지 않았습니다. 특히 달러 금액에 대한 셀 참조는 =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")어디에 있고 델타 백분율에 대한 셀 참조는 어디에 있는지 시험해 보았습니다 .A1A2

실망스러운 점은 사용자 정의 서식을 [Green]0%;[Red](-0%)전체 셀에 적용하면(사용자 정의 숫자 서식 섹션을 통해) 제대로 작동하지만, TEXT()기능을 통해 적용하면 작동이 중지된다는 것입니다. 그렇다면 셀 내 부분 값의 색상을 사용자 정의하려면 어떻게 해야 합니까?

답변1

이 문제를 해결하기 위해 제가 발견한 두 가지 접근 방식이 있었는데, 어느 쪽도 최적이지는 않았습니다.

첫 번째 접근 방식은 문자열을 두 개의 개별 열로 나누는 것이었습니다. 이렇게 하면 앞에서 설명한 사용자 지정 형식 중 하나를 사용하여 색상을 설정할 수 있습니다. 추가 열을 수용하기 위해 보고서의 "모양과 느낌"을 절충해야 했기 때문에 이는 이상적인 솔루션이 아닙니다.

두 번째 접근 방식은 VBA/매크로를 사용하는 것인데, 이 특정 시나리오에서는 피하기로 결정했지만 작업에 적합했습니다. 전체 작업 코드를 인쇄하지는 않지만 핵심은 다음과 같습니다.

  1. 조정하려는 셀을 찾습니다(통 ActiveCell또는 루프를 통해).
  2. 함수를 사용하여 Instr색상을 수정하려는 문자열의 위치를 ​​찾습니다.
  3. 텍스트 길이가 가변적이면 Instr다시 사용하여 문자열에서 색상을 중지하려는 위치를 찾습니다.
  4. Characters(start, length)함수를 사용하여 수정하려는 정확한 문자를 강조 표시하고 앞서 찾은 값을 전달합니다.
  5. 로 색상을 변경하세요.Font.Color = RGB(r,g,b)

답변2

매크로를 사용하는 예는 여기에서 찾을 수 있습니다.

Excel에서 셀의 텍스트 부분에 색상을 지정하는 매크로

Excel 매크로 - For 루프를 셀의 일부 색상으로 지정

for 루프가 포함된 Excel 매크로를 사용하여 날씨 데이터 행을 반복하고 Hot라는 단어가 포함된 경우 셀 텍스트의 일부를 빨간색으로 지정하고 Cool이라는 단어가 포함된 경우 파란색으로 지정합니다.

Hot 및 Cool은 Instr의 대소문자를 구분합니다.

지침

  1. Excel에서 개발자 탭을 클릭합니다.
  2. Visual Basic 아이콘을 클릭하고 아래 매크로 텍스트를 코드 창에 복사하세요.
  3. Excel 보기로 다시 전환하려면 Excel 아이콘을 클릭하세요.
  4. 매크로 아이콘을 클릭하고 TextPartColourMacro라는 매크로를 선택한 다음 실행을 클릭하세요.

완성된 매크로:

Sub TextPartColourMacro()

' Declarations and Initialisation
Dim Row As Integer, Col As Integer
Dim CurrentCellText As String
Col = 1

' Loop Through Rows 2 to 5
For Row = 2 To 5

    ' Get Text in Current Cell
    CurrentCellText = ActiveSheet.Cells(Row, Col).Value
    
    ' Get the Position of the Text Hot and Cool
    HotStartPosition = InStr(1, CurrentCellText, "Hot")
    CoolStartPosition = InStr(1, CurrentCellText, "Cool")
    
    ' Colour the Word Hot Red
    If HotStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(HotStartPosition, 3).Font.Color = RGB(255, 0, 0)
    End If
    
    ' Colour the Word Cool Blue
    If CoolStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(CoolStartPosition, 4).Font.Color = RGB(0, 0, 255)
    End If

Next Row
End Sub

답변3

이 매크로는 대괄호 안의 텍스트에 "-" 문자가 포함된 경우 대괄호를 포함하는 선택된 텍스트 범위를 빨간색으로 표시하고, 그렇지 않으면 녹색으로 표시합니다. 대괄호 밖의 모든 텍스트는 변경되지 않습니다.

Dim rngCell As Range
Dim CharCount As Integer
Dim BracketBegin As Integer
Dim BracketEnd As Integer
Dim strToColour As String

For Each rngCell In Selection
    CharCount = Len(rngCell)
    BracketBegin = InStr(1, rngCell, "(")
    BracketEnd = InStr(1, rngCell, ")")
    With rngCell.Characters(BracketBegin, CharCount - BracketEnd)
        ' Pull out string to check for +/-
        strToColour = rngCell.Characters(BracketBegin, CharCount - BracketEnd).Text
        ' If negative, colour red, otherwise green
        If InStr(strToColour, "-") Then
            .Font.Color = vbRed
        Else
            .Font.Color = vbGreen
        End If
  End With
Next rngCell
End Sub

[Example][1]


  [1]: https://i.stack.imgur.com/4lyN4.png

관련 정보