특정 색상의 텍스트를 다른 색상으로 일괄 변경하는 방법

VBA
작성자
프로스트
작성일
2023-10-04 13:59
조회
1902
엑셀버전 : 엑셀2016

운영체제 : 윈도우10

질문 요약 : 특정 문자열의 색상을 기준으로 다른 색상으로 일괄 변경할 수 있는 방법을 찾고 있습니다.

주어진 상황의 예시를 들자면 아래와 같습니다.

 

 

각 컬럼별 문자열 색상이 각각 달리 들어가 있어 Ctrl + H 를 통한 찾아 바꾸기 기능으로써 문자의 색상을 변경할 수는 없는 상태입니다. C와 D열은 마치 일괄적으로 변환이 가능한 것처럼 들어가 있으나 예시인 관계로 편의상 내용을 생략해 그렇고 실제로는 B열과 동일한 상황입니다.

 

현재 설정된 기존의 글자 색상을 기준으로 연녹색 → 진녹색, 하늘색 → 진청색 과 같은 형태로 기존 글자의 색상을 일괄적으로 변경하고자 합니다. 혹시 이를 수행 가능한 VBA 스크립트가 있을까요? 특정 문자열 내용을 기준으로 색상을 부여하는 기능은 많이 보이던데 이와 같은 상황에 대한 방안은 찾아봐도 없네요. 이렇게 작업해야 할 항목이 한두개면 직접 수정하고 끝내겠지만 이런 항목이 수백개에 달하는 상황이라 고수님들의 도움이 필요합니다.

신고
스크랩
공유
회원등급 : 3레벨
포인트 : 149 EP
총질문 : 1 개 (마감율 : 100%)
채택답변 : 0 개
전체 10

  • 2023-10-04 17:04

    @프로스트

    Sub FontColorPartOfText()
        'Source: https://powerspreadsheets.com/
        'More information: https://powerspreadsheets.com/vba-font-color-part/
     
        'Declare the following:
            'Step 1: Object variable to represent cell where you change the font color for part of the text
            'Variable to represent:
                'Step 2: Full text (with the substring whose font color you change)
                'Step 3: The text portion (substring) whose font color you change
                'Step 4: Number of characters in text portion (substring) whose font color you change
            'Step 2: Loop iteration variable
        Dim MyCell As Range
        Dim MyFullText As String
        Dim MyTextToChangeColor As String
        Dim MyTextToChangeColorLength As Long
        Dim iCounter As Long
     
        'Step 1: Assign object reference (to cell A6 in the "Excel VBA Font Color Part Text" worksheet in this workbook) to MyCell object variable
        Set MyCell = ThisWorkbook.Worksheets("Excel VBA Font Color Part Text").Range("A6")
     
        'Step 2: Assign string stored in cell represented by MyCell object variable to MyFullText variable
        MyFullText = MyCell.Value
     
        'Step 4: Assign string with text whose color you change to MyTextToChangeColor variable
        MyTextToChangeColor = "text"
     
        'Step 4: Assign number of characters in string represented by MyTextToChangeColor variable to MyTextToChangeColorLength variable
        MyTextToChangeColorLength = Len(MyTextToChangeColor)
     
        'Step 2: Loop from 1 to the number of characters in the string represented by MyFullText variable
        For iCounter = 1 To Len(MyFullText)
     
            'Do the following:
                'Step 4: Extract a helper string from the string represented by the MyFullText variable
                    'Starting at the position equal to the current loop iteration
                    'With a length equal to the number represented by the MyTextToChangeColorLength variable
                'Step 5: Test whether the helper string is equal to the string represented by the MyTextToChangeColor variable
                'Step 6: If the helper string is equal to the string represented by the MyTextToChangeColor variable, change the text portion (substring) whose font color you change
            If Mid(MyFullText, iCounter, MyTextToChangeColorLength) = MyTextToChangeColor Then
     
                'Step 7: Identify the part of text whose font color you change
                'Step 8: Use the RGB function to set the value of the Font.Color property. Specify the red, green, and blue components of the color as follows:
                    'Red: 0
                    'Green: 128
                    'Blue: 55
                MyCell.Characters(iCounter, MyTextToChangeColorLength).Font.Color = RGB(0, 128, 55)
     
            End If
     
        Next iCounter
     
    End Sub

    Excel VBA Change Font Color for Part of Text in 8 Easy Steps (+ Example) (powerspreadsheets.com)

    여기 참고해보세요~


    • 2023-10-07 21:22

      @엑셀킹이될꺼야 님 영어의 압박이... ㅎㅎ 지금까지 봐왔던 특정 문자열 내용을 기준으로 색상을 변환하는 예제로 보이는데 응용이 가능할 지 한번 찾아보겠습니다. 감사합니다~


  • 2023-10-04 22:31
    채택된 답변

    @프로스트 님 Characters속성을 이용해서 아래와 같이 매크로 작성해 보세요.
    실제 변경하려는 색을 Color1/2 -> 3/4에 반영해 주시면 됩니다.

    Sub FontColorChange()
      Dim C As Range, iCnt As Long, i As Long
      Dim Color1 As Long, Color2 As Long, Color3 As Long, Color4 As Long
     
      <strong><span style="color: #0000ff;">Color1 = RGB(169, 208, 142): Color3 = RGB(0, 255, 0)</span></strong>  '// Color1 -> Color3 변경
      <span style="color: #0000ff;"><strong>Color2 = RGB(155, 194, 230): Color4 = RGB(0, 0, 255)</strong></span>  '// Color2 -> Color4 변경
     
      Application.ScreenUpdating = False
      Application.EnableEvents = False
     
      For Each C In ActiveSheet.UsedRange.Cells
        On Error Resume Next
        iCnt = 0
        iCnt = C.Characters.Count
        If iCnt > 0 Then
          For i = 1 To Len(C.Value2)
            Select Case C.Characters(i, 1).Font.Color
            Case Color1: C.Characters(i, 1).Font.Color = Color3
            Case Color2: C.Characters(i, 1).Font.Color = Color4
            Case Else
            End Select
          Next
        End If
      Next C
     
      Application.ScreenUpdating = True
      Application.EnableEvents = True
      MsgBox "완료되었습니다."
     
    End Sub

     

    첨부파일 : FontColorChange.xlsm


    • 2023-10-07 21:20

      @원조백수 님 주신 예제 감사히 잘 받아봤습니다~ 셀 안에 들어간 색상 유형이 2가지로 모두 동일한 상황에서는 주신 내용대로 잘 변환이 됩니다만 셀 안에 색상이 제각각으로 들어간 경우 (2가지 색만 들어간 경우도 있고 어느 셀은 3가지 색도 들어가 있는 경우입니다) 에는 스크립트에 약간 변형을 주어야 하는 모양입니다. 변경하고자 했던 단일 색상 한 가지만 짚어서 변환하려고 했더니 엑셀이 무한 루프에 빠지네요. 이후는 제가 좀 더 알아보겠습니다. 감사합니다~


      • 2023-10-08 08:41

        @프로스트 님 잘 못 되더라도 무한루프에 빠지는 부분은 없는 것 같은데요...

        색상수에 따라 Color1.2.3.4 부분이 있는 줄인 지정부분과 변경부분만 수정하면 됩니다.


        • 2023-10-08 12:21

          @원조백수 님 실제 작업할 파일에서 1줄만 남겨 다시 테스트 해보니 시간이 오래 걸려 엑셀이 응답 없음으로 표시되는 경우는 있습니다만 결국 기다리면 완료가 되네요. 변경하려는 색상만 지정해 작업 시도해보고 있습니다. 감사합니다~


        • 2023-10-08 15:32

          @원조백수 님 시트 전체를 두고 작업을 수행시키니 메모리 부족 오류가 뜨네요 ㅎㅎ 부분적으로 나누어 해야하나 봅니다. 주신 소스 감사히 쓰겠습니다~


    • 2023-10-09 19:04

      @원조백수 님 스크립트 적용 간 발생한 현상이 있어 몇 가지 문의 드립니다. 단일 색상 하나를 제외한 나머지 항목은 모두 주석처리 한 이후 색상을 변경할 시 상황이었습니다.

      1. 첫번째 항목은 맨 앞의 글자만 의도한 색상으로 변경되고 나머지 글자의 색상이 흑색으로 전환되었습니다.
      2. 화면에 표시된 색상과 해당 셀을 편집시 표시되는 색상이 다른 경우가 발생합니다.
      3. 모든 문자열이 강제 개행 되어있는 현상이 발생해 붙이려 하면 해당 문자열이 삭제되고 뒤쪽에 붙일 수 없는 현상이 발생합니다.

      스크립트 적용 전과 후의 파일을 첨부해 드립니다. 혹시 해당 현상이 발생하는 원인을 알 수 있을까요?

      첨부파일 : 0A.-소공파트_20231009.zip


      • 2023-10-09 22:09

        @프로스트 님 개별 Character별로 수정할 때 발생하는 문제인듯 합니다.
        캐바캐라서 Excel의 bug인지도 모르겠습니다.

        아래와 같이 개별이 아니라 연속된 글자색을 한 번에 변경하도록 모듈화 하여 호출하는 방식으로 변경해 봤습니다.
        일단, 이렇게 적용할 경우 이상한 현상은 발생하지 않았습니다.
        첨부 파일 참고하세요.

        Sub CharacterFontColorChange(C As Range, FromC As Long, ToC As Long)
            Dim iCnt As Long, iPos As Long, iLen As Long, i As Long
            With C
              iCnt = 0
              iCnt = .Characters.Count
              If iCnt > 0 Then
         
                iPos = 0: iLen = 0: i = 0
                Do While True
                  i = i + 1
                  If i > iCnt Then Exit Do
                  If .Characters(i, 1).Font.Color = FromC Then
                      If iPos = 0 Then iPos = i: iLen = iLen + 1 Else iLen = iLen + 1
                  Else
                      If iPos > 0 Then .Characters(iPos, iLen).Font.Color = ToC: iPos = 0: iLen = 0
                  End If
                Loop
              End If
            End With
        End Sub

         

        첨부파일 : 0A_소공파트_스크립트_수정.xlsm


        • 2023-10-16 22:00

          @원조백수 님 수정해주신 코드 잘 받아서 사용했습니다~ 첫 문자열 속성의 색상을 변경하는 과정에서 볼드체가 해제되는 이슈는 있었지만 그래도 덕분에 엄청 시간을 절약했습니다. 감사합니다~


전체 16,934
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚진짜쓰는 실무엑셀] 2024년 엑셀 공부, 이 책 한권으로 마스터하세요! (291)
오빠두엑셀 | 2022.02.03 | 추천 554 | 조회 845548
오빠두엑셀 2022.02.03 554 845548
공지사항 문서서식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (197)
오빠두엑셀 | 2021.10.28 | 추천 304 | 조회 31517
오빠두엑셀 2021.10.28 304 31517
74621 기능/도구
New 4개의 열 에서 같은 이름 가로로 정렬 (2)
Bukonge | 12:36 | 추천 0 | 조회 27
Bukonge 12:36 - 27
74618 VBA
New 유저폼에 바코드스캔시 입력속도 개선방법? (4)
땡이 | 11:36 | 추천 0 | 조회 33
땡이 11:36 - 33
74616 함수/공식
New Rawdata 첨부파일 (4)
HIHUGO | 10:48 | 추천 0 | 조회 41
HIHUGO 10:48 - 41
74604 문서서식
New 간트차트 조건부서식 이용 문의 엑셀파일첨부파일 (3)
배고픈짐승 | 2024.10.30 | 추천 0 | 조회 61
배고픈짐승 2024.10.30 - 61
74599 함수/공식
New 이런 경우에는 무슨 함수를 써야할까요..? (2)
iwnqn | 2024.10.30 | 추천 0 | 조회 84
iwnqn 2024.10.30 - 84
74598 문서서식
New 엑셀 유효성 검사 뛰어 쓰기 문제 엑셀파일 (2) 답변완료
퉁퉁이 | 2024.10.30 | 추천 0 | 조회 58
퉁퉁이 2024.10.30 - 58
74592 함수/공식
New 여러 값들 중에서 원하는 값을 찾고 싶어요 도와주세요! 첨부파일 (7) 답변완료
저도해볼게요 | 2024.10.30 | 추천 0 | 조회 84
저도해볼게요 2024.10.30 - 84
74589 구글시트
New 한셀에 줄바꿈으로 있는 여러데이터를 한셀에 한데이터 들어가게끔 일괄로 하고 싶습니다 첨부파일 (4) 답변완료
스톤스톤 | 2024.10.30 | 추천 0 | 조회 53
스톤스톤 2024.10.30 - 53
74585 VBA
New UserForm 크기질문 첨부파일 (5)
땡이 | 2024.10.30 | 추천 0 | 조회 67
땡이 2024.10.30 - 67
74583 함수/공식
New XLOOKUP 함수의 다중조건을 잘 모르겠습니다 첨부파일 (6)
qlcc**** | 2024.10.30 | 추천 0 | 조회 79
qlcc**** 2024.10.30 - 79
74582 함수/공식
New filter 함수에 대해 문의드립니다 (5)
김은상 | 2024.10.30 | 추천 0 | 조회 66
김은상 2024.10.30 - 66
74581 구글시트
New 구글폼 견적서 자동화 관련, 폼에서 입력된 이미지 파일을 견적서에 넣는 방법 좀 알려주시면 감사하겠습니다.
| 2024.10.30 | 추천 0 | 조회 54
2024.10.30 - 54
74572 차트/그래프
New 꺽은선 그래프의 레이블이 원복이 됩니다. 첨부파일 (3)
구리구리이 | 2024.10.30 | 추천 0 | 조회 59
구리구리이 2024.10.30 - 59
74570 함수/공식
New 배수 금액으로 순번 정하기 알려 주세요...ㅠ 엑셀파일첨부파일 (3) 답변완료
서기 | 2024.10.30 | 추천 0 | 조회 56
서기 2024.10.30 - 56
74566 함수/공식
New 두개의 열에 입력된 데이터를 순서 바꿔서 입력으로 중복일 때 골라내는 법 엑셀파일첨부파일 (1)
문과적남자 | 2024.10.30 | 추천 0 | 조회 58
문과적남자 2024.10.30 - 58
74564 함수/공식
New 각 열별로 합 구하는 방법 첨부파일 (2) 답변완료
라핼 | 2024.10.30 | 추천 0 | 조회 74
라핼 2024.10.30 - 74
74563 함수/공식
New 필터 적용시 중복값 제외 카운트 되는 법 좀 알려주세요 ㅠㅠ 첨부파일 (1)
정재욱 | 2024.10.30 | 추천 0 | 조회 73
정재욱 2024.10.30 - 73
74558 함수/공식
New 문자와 숫자가 섞여있는 열의 합계와 평균을 구하는 방법을 알려주세요!! 첨부파일 (9)
침착해 | 2024.10.30 | 추천 0 | 조회 77
침착해 2024.10.30 - 77
74556 함수/공식
New 세트상품 마진율 구하기 (2)
ek02 | 2024.10.30 | 추천 0 | 조회 63
ek02 2024.10.30 - 63
74543 기능/도구
New 문자와 숫자 혼합된 셀에서 숫자만 따로 따올수 있는 기능이 있을까요? 첨부파일 (4)
야만용사 | 2024.10.29 | 추천 0 | 조회 99
야만용사 2024.10.29 - 99
74542 기능/도구
New 엑셀 백분율 숫자로변경 (3)
rarara | 2024.10.29 | 추천 0 | 조회 90
rarara 2024.10.29 - 90
74540 함수/공식
New ★데이터 가공★ 잘못된 데이터를 올바른 데이터로 변환하는 과정을 도와주세요 ㅠㅠ 엑셀파일첨부파일 (10)
| 2024.10.29 | 추천 0 | 조회 128
2024.10.29 - 128
74539 함수/공식
New 안녕하세요 INDEX, MATCH 다중조건 질문드립니다! 엑셀파일 (3)
gys**** | 2024.10.29 | 추천 0 | 조회 96
gys**** 2024.10.29 - 96
74533 함수/공식
New 산출집계시트에 항목을 산출서에서 가져오고싶어요 엑셀파일 (3)
Moto | 2024.10.29 | 추천 0 | 조회 90
Moto 2024.10.29 - 90
74532 문서서식
New [질문] 전체 행 또는 열을 선택 후 특정 셀만 선택 제외 시키기 첨부파일 (2)
ViVaViva | 2024.10.29 | 추천 0 | 조회 78
ViVaViva 2024.10.29 - 78
74530 함수/공식
New Lookup 함수 오류에 관한 문의 엑셀파일첨부파일 (6) 답변완료
TMOH | 2024.10.29 | 추천 0 | 조회 93
TMOH 2024.10.29 - 93
74528 함수/공식
New 다중조건 만족하는 결과를 가져오고싶습니다 도와주세요 ㅠㅠ 엑셀파일첨부파일 (8)
말하지마00 | 2024.10.29 | 추천 0 | 조회 103
말하지마00 2024.10.29 - 103
74526 함수/공식
New 열과 행으로 정렬된 데이터를 같은 행으로 표시하려고 합니다. 엑셀파일 (2) 답변완료
깐부 | 2024.10.29 | 추천 0 | 조회 78
깐부 2024.10.29 - 78
74521 함수/공식
New B시트에서 A시트 항목 제품 및 수량 가져오는법좀 부탁드려요 첨부파일 (2)
Moto | 2024.10.29 | 추천 0 | 조회 79
Moto 2024.10.29 - 79
74520 VBA
New VBA 런타임 오류 관련 질문 첨부파일 (1)
angelriun | 2024.10.29 | 추천 0 | 조회 61
angelriun 2024.10.29 - 61