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

[기초방] VBA 100제 #17 [ CHR + ASC ]

by 일등미노왕국 2023. 1. 17.

이번 구문은 위아래 중복일때 뒤에있는 아스키코드값을 증가시키면서 알파벳을 변화시키는 구문이다. 

이 구문이 정렬이 되었다는 가정하에서는 Countif로 뒤에있는 문자를 증가시키면서 해결해 나가면 된다. 하지만 36행을 보면 순서없이 코드하나가 빠져있다.

따라서 이번 문제는 Countif는 답이 아니다.

 

순차적으로 코드를 진행하면서 이전셀과 비교하면서 만일 같다면 ASC 코드를 증가시키면서 코드를 증가시키면 된다.

ElseIf rngX = rngX(0, 1) Then  
            
    i = i + 1                     
    Str = Left(rngX, Len(rngX) - 1)
    rngX.Next = Str & Chr(Asc(Right(rngX, 1)) + i)

Else

Asc(A)는  65를 반환하고 Chr(65 + 1) 은 B 를 반환한다.

 

전체적인 구문설명은 이렇다.

 

1. 첫행은 이전셀이 없으므로 첫 셀의 유무를 확인한다.

2. 만일 이전셀과 같다면 변수 i 를 증가시면서 알파벳을 증가시킨다.

3. 만일 이전셀과 같지 않다면  증가시킬 필요가 없으니 증가시키지 않는다.

 

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

 

더보기
Option Explicit

Sub 기초방17()

    Dim rngX As Range: Set rngX = [a1]
    Dim i&, Str$
    
    Do Until IsEmpty(rngX)                  '= 빈셀일때까지 무한 반복
    
        If rngX.Row = 1 Then                '= 첫번째 행이면 / 이전셀이 없으므로
        
           rngX.Next = rngX                 '= rngX를 출력
        
        ElseIf rngX = rngX(0, 1) Then       '= 이전셀과 같으면
            
            i = i + 1                       '= i 값을 하나씩 증가해서
            Str = Left(rngX, Len(rngX) - 1)
            rngX.Next = Str & Chr(Asc(Right(rngX, 1)) + i) '= 알파벳을 증가시켜라
            
        Else
            rngX.Next = rngX                '= 이전셀과 같지 않으면 rngX를 출력하고
            i = 0                           '= i값을 초기화해라
        
        End If
        
        Set rngX = rngX.Offset(1)           '= 행을 증가시켜라
        
    Loop

End Sub

 

 

기초방#17.xlsm
0.02MB

 

 

 

 

댓글