본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #30 [ 폰트처리하기_2 ]

by 일등미노왕국 2023. 2. 7.

이번 문제는 이렇다. [ 고래밥 ]단어가 들어가 있는 셀은 고래밥만 빨강색으로 칠하고 Bold 처리를 하고 [ 깡 ]  이 포함된 과자는 중간에 영문자 이후부터 과자의 풀네임에 파란색 폰트 컬러로 변경하고 Bold 처리하는 구문이다.

 

고래밥을 찾는 구문은 전 시간에 Instr + Characters 구문을 사용한적 있기 때문에 큰 어려움이 없으리라 본다.

 If InStr(rngA, Str) Then                   
    Pos = InStr(rngA, Str)                 

    With rngA.Characters(Pos, Len(rngA))  

        .Font.Color = vbRed
        .Font.Bold = True

    End With
End If

[ 깡 ]  이 들어있는 과자이름은 과자 이름을 전부다 색상변경을 해야하기 때문에 기초방이라는것을 감안하여 정규식이 아닌 Like 함수를 통해서 알파벳의 위치를 알아낸 후 Instr + Characters 조합으로 해결하였다.

If InStr(rngA, Str2) Then                  
        
            For i = 1 To Len(rngA)
            
                S = Mid(rngA, i, 1)
            
                If S Like "[A-Z]" Then Exit For     
            Next i
            
            With rngA.Characters(i + 1, Len(rngA) - i) 
                .Font.Color = vbBlue
                .Font.Bold = True
            
            End With
        
        End If
더보기
Option Explicit
Sub 기초방30()

    Dim rngAll As Range: Set rngAll = [b5:b20]      '= 전체영역
    Dim rngA As Range
    Dim Pos&, i&, S$
    Dim Str$: Str = "고래밥"                         '= 기본방 30 키워드
    Dim Str2$: Str2 = "깡"                           '= 기본방 30_1 키워드
    
    For Each rngA In rngAll                          '= 전체 영역 순환
    
        Haja_Font rngA                               '= 효과처리
        If InStr(rngA, Str) Then                     '= 키워드가 있다면
            Pos = InStr(rngA, Str)                   '= Pos에 키워드 위치를 담아라
            
            With rngA.Characters(Pos, Len(rngA))     '= 키워드를 조건에 맞게 수정해라
                
                .Font.Color = vbRed
                .Font.Bold = True
            
            End With
        End If                                       '= 기본방 30 해법
        
        If InStr(rngA, Str2) Then                    '= 키워드 30_1
        
            For i = 1 To Len(rngA)
            
                S = Mid(rngA, i, 1)
            
                If S Like "[A-Z]" Then Exit For      '= 영문자가 있다면 for문을 탈출해라
                
            Next i
            
            With rngA.Characters(i + 1, Len(rngA) - i) '= 영문자의 위치를 뺀 이후부터 문자 수정
                .Font.Color = vbBlue
                .Font.Bold = True
            
            End With
        
        End If
    
    Next rngA
    
    MsgBox "완료"
End Sub

Function Haja_Font(rngA As Range)

    Dim i&, j&
    
    For i = 1 To 100
        For j = 1 To Len(rngA)
        
            rngA.Characters(j, 1).Font.ColorIndex = Application.WorksheetFunction.RandBetween(1, 50)
            
        Next j
    Next i
        rngA.Font.Color = vbBlack
End Function

기초방30.xlsm
0.02MB

 

Characters. 함수를 시리즈로 풀어내고 이해하는데 큰 어렴움이 없을 거라 예상된다.

오늘도 맛있는 코딩 냠냠~~

댓글