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

[기초방] VBA 100제 #95 [열을 역순으로 복사]

by 일등미노왕국 2024. 10. 25.

 

📋 코드 구간별 설명

1. 변수 선언과 범위 설정

  • rngAll: B4범위를 선택해 이 범위의 **모든 열(Column)**을 순회할 준비를 한다.
  • rngX: 복사한 데이터를 붙여넣을 시작 지점으로 V4 셀이 설정된다.
  • Vtemp: 각 열의 데이터를 임시로 저장하는 배열 변수로 사용된다.
  • rngA: 반복문에서 각 열을 처리할 임시 변수로 사용된다.

2. 반복문 (For Each)을 통한 열 단위 순회

  • **rngAll.Columns**를 사용해 B4범위의 열 단위로 순회한다.
  • 매 반복마다 현재 열의 데이터를 배열 형태로 Vtemp에 저장한다.
  • 이때, 2차원 배열로 저장되어 각 행의 데이터가 그대로 유지된다.

3. 데이터 복사와 크기 조정

  • **rngX.Resize**를 사용해 V4부터 시작하는 셀의 행 크기를 Vtemp 배열 크기에 맞춘다.
  • Vtemp에 있는 데이터를 rngX 위치에 복사한다.

4. 복사 위치 이동 (Offset)

  • 각 열의 데이터를 복사한 후, rngX를 왼쪽으로 한 열씩 이동시켜 다음 열을 준비한다.
  • 이로 인해 열들이 오른쪽에서 왼쪽으로 역순으로 붙여넣어지게 된다.

🧑‍💻 VBA 코드 예제와 예상 실행 결과

Sub 기초방95()

    ' 범위 변수 선언 및 초기화: B4부터 K23까지의 셀 범위를 선택
    Dim rngAll As Range: Set rngAll = [b4:k23]
    Dim rngA                            ' 열별로 반복문에서 사용할 변수 선언
    Dim Vtemp                           ' 각 열 데이터를 임시로 저장할 변수 선언
    Dim rngX As Range: Set rngX = [v4]  ' 결과가 복사될 첫 번째 셀 지정 (V4)

    ' 각 열(Column) 단위로 순회하는 반복문 시작
    For Each rngA In rngAll.Columns
        
        ' 현재 열의 데이터를 Vtemp에 저장 (2차원 배열 형태)
        Vtemp = rngA
        
        ' rngX 위치에 Vtemp 데이터를 복사 (크기를 현재 열의 행 수에 맞춰 조정)
        rngX.Resize(UBound(Vtemp, 1), 1) = Vtemp
        
        ' 다음 결과 위치를 왼쪽 셀로 이동
        Set rngX = rngX.Offset(0, -1)

    Next rngA  ' 모든 열에 대해 반복

End Sub
 

🎬 코드 실행 결과

원본 데이터 (B4):

 

100 200 300 400 ... 900
110 210 310 410 ... 910

 

복사된 데이터 (V4부터 역순):

 

900 800 700 600 ... 100
910 810 710 610 ... 110

 

🚀 365 함수 CHOOSECOLS를 활용한 열 복사와 정렬

1. CHOOSECOLS 함수의 구문

    =CHOOSECOLS(배열, 열_번호1, [열_번호2], ...)
  • 배열 (array):
    데이터를 포함한 범위 또는 배열이다. 예를 들어 B3:K23과 같은 범위가 올 수 있다.
  • 열_번호:
    반환할 열의 번호를 순서대로 나열한다. 1은 첫 번째 열, 2는 두 번째 열을 의미한다.
  • 중괄호 {} 사용:
    여러 열을 선택할 때 쉼표로 구분하거나 중괄호 {}로 묶어 사용할 수 있다.

2. CHOOSECOLS 예제 코드와 결과

 
   =CHOOSECOLS(B3:K23, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
  • 결과: K열부터 B열까지의 데이터를 역순으로 추출한다.

출력 예시:

KJI...B

900 800 700 ... 100
910 810 710 ... 110

3. CHOOSECOLS 사용 팁과 주의사항

  1. 열 순서 재정렬3번째, 1번째, 2번째 열만 추출한다.
  2. 동적 배열 지원
    이 함수는 동적 배열을 지원해 수식이 자동으로 필요한 범위에 확장된다.
  3. 범위를 벗어난 열 번호
    범위 내에 없는 열 번호를 지정하면 #VALUE! 오류가 발생한다.
=CHOOSECOLS(B3:K23, 3, 1, 2)

4. 실무 활용 예제 🚀

  1. 열 순서 뒤집기
    =CHOOSECOLS(B3:K23, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
  2. 동적 열 선택
    SEQUENCE 함수와 결합해 동적으로 열을 선택할 수 있다.
     
    =CHOOSECOLS(B3:K23, SEQUENCE(5, , 1, 2))

5. CHOOSECOLS와 유사한 함수 비교

  • INDEX 함수
    특정 셀이나 범위에서 개별 값을 추출할 때 사용한다.
    • 차이점: INDEX는 특정 셀의 값을 반환하는 반면, CHOOSECOLS는 열 단위로 데이터를 추출한다.
  • FILTER 함수
    특정 조건에 맞는 데이터를 필터링한다.
    • 차이점: FILTER는 조건에 따라 행을 추출하지만, CHOOSECOLS는 열을 선택한다.

기초방95.xlsm
0.02MB

댓글