본문 바로가기
엑셀 Excel

엑셀에서 복수응답된 데이터 처리하기 (자동화) - 가로로 긴 것 아래로 길게 1열로 갖다붙이기 매크로 VBA

2024. 7. 9.

다음은 아래와 같이 코딩된 복수응답 설문 결과를 엑셀에서 빈도표를 만드는 과정이다.

(나는 누가 이렇게 코딩한 것을 넘겨받아 처리하게 되었는데 바람직한 것은 처음부터 [참조사이트]와 같이 코딩하면 편할 것이다.)

이것을 수동으로 한다면 텍스트 나누기(Text to Columns)를 해서 응답을 나누고 그걸 아래로 1열로 쭉 잘라붙인다음 피벗 데이블에서 빈도표를 출력하는 방법이 있다. 그런데 응답 보기 숫자가 많아질수록 이게 한문항 처리하는 데도 상당한 노가다를 필요로 한다.

그래서 일단 텍스트 나누기까지는 수동으로 (데이터 -> 텍스트 나누기 기능)으로 하고 그결과를 1열로 처리하는 과정을 VBA 매크로를 이용해서 빠르게 처리하는 방법을 소개한다.

 

 

  • 엑셀에서 VBA 편집기 열기:
    • Alt + F11을 눌러 VBA 편집기를 엽니다.
  • 새 모듈 추가:
    • 삽입 > 모듈을 클릭하여 새 모듈을 추가합니다.
  • VBA 코드 입력:
    • 아래의 VBA 코드를 새 모듈에 붙여 넣습니다.

 

Sub TransformToColumn()
    Dim ws As Worksheet
    Dim sourceRange As Range
    Dim destCell As Range
    Dim cell As Range
    Dim currentRow As Long
    Dim currentColumn As Long

    ' 현재 활성화된 시트를 ws 변수에 설정
    Set ws = ActiveSheet
    
    ' 원본 데이터 범위를 사용자에게 입력받아 sourceRange 변수에 설정
    On Error Resume Next
    Set sourceRange = Application.InputBox("원본 데이터 범위를 선택하세요:", Type:=8)
    On Error GoTo 0

    ' 유효한 범위가 선택되지 않은 경우 메시지 표시 후 종료
    If sourceRange Is Nothing Then
        MsgBox "유효한 범위가 선택되지 않았습니다. 매크로를 종료합니다."
        Exit Sub
    End If

    ' 출력 위치를 사용자에게 입력받아 destCell 변수에 설정
    On Error Resume Next
    Set destCell = Application.InputBox("결과를 출력할 셀을 선택하세요:", Type:=8)
    On Error GoTo 0

    ' 유효한 셀이 선택되지 않은 경우 메시지 표시 후 종료
    If destCell Is Nothing Then
        MsgBox "유효한 셀이 선택되지 않았습니다. 매크로를 종료합니다."
        Exit Sub
    End If

    ' 결과 출력 위치 초기화 (기존 데이터 삭제)
    destCell.CurrentRegion.Clear

    ' 원본 데이터 범위에서 데이터를 읽고 결과를 세로로 출력
    For currentRow = 1 To sourceRange.Rows.Count ' 원본 데이터의 각 행을 순회
        For currentColumn = 1 To sourceRange.Columns.Count ' 각 행의 각 열을 순회
            If Not IsEmpty(sourceRange.Cells(currentRow, currentColumn)) Then ' 셀이 비어 있지 않은 경우
                destCell.Value = sourceRange.Cells(currentRow, currentColumn).Value ' 셀 값을 결과 셀에 설정
                Set destCell = destCell.Offset(1, 0) ' 결과 셀을 다음 행으로 이동
            End If
        Next currentColumn
    Next currentRow

    ' 작업 완료 메시지 표시
    MsgBox "데이터 변환 완료!"
End Sub

 

별도의 저장 과정 없이 VBA창은 그냥 닫으면 됩니다. 그리고,

매크로 실행:

  • Alt + F8을 눌러 매크로 대화 상자를 엽니다.
  • TransformToColumn를 선택하고 실행을 클릭합니다.

실행하면 원하는 범위와 목적지 셀을 묻는 창이 뜹니다.

 

그러면 아래 그림에서 위와 같은 데이터가 아래와 같이 변환됩니다.

끝.

댓글