본문 바로가기

업무 프로그램/MS 엑셀

엑셀 데이터 한 줄로 합치기, 한 줄로 된 데이터 일정 간격으로 나누기(VBA)

목차

     

    엑셀을 업무에서 활용하려고 하다 보면 데이터를 합치고 나누는 것에 시간을 많이 사용하게 됩니다. 우리가 볼 때는 기본적인 기능인 것 같지만 엑셀에서 모든 기능을 세세히 제공할 수도 없을뿐더러 엑셀에 컨셉에도 맞지 않습니다. 하지만 VBA를 조금만 알아도 단순 반복 업무에서 벗어날 수 있습니다. 

    인터넷에서 찾은 그럴듯한 VBA는 내 문서와 맞지 않을 수 있습니다. 이런 경우 VBA를 알고 있다면 변형해서 사용할 수 있습니다. 그래서 오늘은 아주 간단한 예제를 통해 VBA가 어떤 느낌인지 소개하려고 합니다.

     


    1. VBA 실행하기

    VBA 실행하기-옵션
    VBA 실행하기-옵션

     

    1. [파일] 탭을 클릭합니다.

    2. [옵션]을 클릭합니다.

     

    VBA 실행하기-개발 도구
    VBA 실행하기-개발 도구

     

    3. [리본 사용자 지정]을 클릭합니다.

    4. [개발 도구]를 클릭합니다.

    5. [확인]을 클릭합니다.

     

    VBA 실행하기-VBA
    VBA 실행하기-VBA

     

    6. [개발 도구]를 클릭합니다.

    7. [Visual Basic]을 클릭합니다.

    8. 작업을 하고 싶은 엑셀 파일과 시트를 더블클릭합니다.

     

    오른쪽에 메모장같은 창이 뜬다면 준비가 끝난 것입니다.

     


    2. 여러 줄(열)로 된 데이터 한 줄(열)로 합치기

    여러 줄(열)로 된 데이터 한 줄(열)로 합치기
    여러 줄(열)로 된 데이터 한 줄(열)로 합치기

     

    B, C, D에 나뉘어 있는 데이터를 A열에 모아보도록 하겠습니다.

     

    Sub merge()
    '-- 워크시트와 문자열 변수를 선언합니다. --`
    Dim sh1 As Worksheet
    Dim text As String
    '-- 워크북의 Sheet1을 sh1로 참조합니다. --`
    Set sh1 = ThisWorkbook.Sheets("Sheet2")
    '-- 반복문 범위의 변수를 초기화합니다. 합치고자 하는 열의 row수가 endCur이 됩니다. --`
    startCur = 1
    endCur = 10
    cntRow = 1
    '-- 열 2와 10을 반복하는 외부 반복문입니다. 열이 많다면 더 늘어나야 합니다.--`
    For i = 2 To 10
        '-- 범위 내의 데이터를 합치는 내부 반복문입니다. --`
        For j = startCur To endCur
            '-- 현재 열의 데이터를 대상 열로 복사합니다. --`
            sh1.Cells(cntRow, 1) = sh1.Cells(j, i)
            cntRow = cntRow + 1
        Next j
    Next i
    End Sub

     

    대략적인 코드 내용은 주석으로 달아 놨으니 수정하실 부분이 있다면 수정하여 사용하시면 되고 이해가 안 되는 부분이나 오류는 댓글 달아주시면 확인해 보겠습니다.

     

    여러 줄(열)로 된 데이터 한 줄(열)로 합치기-완성
    여러 줄(열)로 된 데이터 한 줄(열)로 합치기-완성

     

     

     


    3. 한 줄(열)로 된 데이터 일정 간격으로 나누기

    한 줄(열)로 된 데이터 일정 간격으로 나누기
    한 줄(열)로 된 데이터 일정 간격으로 나누기

     

    [2. 여러 줄(열)로 된 데이터 한 줄(열)로 합치기]와는 반대로 하나의 열에 있는 내용을 여러개의 열로 나누는 작업을 하는 VBA코드입니다.

     

    Sub div()
    '-- 워크시트와 문자열 변수를 선언합니다. --`
    Dim sh1 As Worksheet
    Dim text As String
    '-- 워크북의 Sheet1을 sh1로 참조합니다. --`
    Set sh1 = ThisWorkbook.Sheets("Sheet1")
    '-- 반복문 범위의 변수를 초기화합니다. 나누고자 하는 열의 row수가 endCur입니다.--`
    startCur = 1
    endCur = 10
    '-- 열 2와 10을 반복하는 외부 반복문입니다. --`
    For i = 2 To 10
        '-- 행 위치를 위한 카운터를 초기화합니다. --`
        cnt = 0
        '-- 범위 내의 데이터를 복사하는 내부 반복문입니다. --`
        For j = startCur To endCur
            '-- 행 카운터를 증가시킵니다. --`
            cnt = cnt + 1
            '-- 열 1의 데이터를 대상 열로 복사합니다. --`
            sh1.Cells(cnt, i) = sh1.Cells(j, 1)
        Next j
        '-- 다음 반복을 위한 반복문 범위를 업데이트합니다. --`
            startCur = startCur + 10
            endCur = endCur + 10
        Next i
    End Sub

     

    코드의 오류나 문의는 댓글로 달아주시기 바랍니다.

     

    한 줄(열)로 된 데이터 일정 간격으로 나누기-완성
    한 줄(열)로 된 데이터 일정 간격으로 나누기-완성