엑셀(EXCEL) – 가로 세로로 구성된 데이터에서 일정 간격의 행, 열 데이터 추출하기

 

20150402-일정 행열마다 데이터 추출 <— 첨부 화일

엑셀을 다루고 계시지만 초보자분들께서는 아직도 계산기능으로만 사용하시고
고급기능을 잘 모르시니 많은 데이터를 다루실 때는 많은 시간을 들이시는가 봅니다.
대부분이 표에다가 산술식으로 자동계산기를 이용하시고 조금 더 발전하시면
데이터 검색 함수를 응용해서 잘 다루시는 것 같군요.

아래에다 실무에 필요한 팁을 올렸는데 처음 데이터를 구성(엑셀에 입력)하실 때
잘못 입력해 놓으면 데이터의 활용이 상당히 어렵게 됩니다. 보통 전임자가 생각없이
표나 시트를 만들어 계속 사용하다 데이터가 많이 쌓이면 고칠 엄두가 나질 않아서
그대로 사용하시는 것 같더군요.

아래 팁의 댓글에서 일정하게 반복되는 행열에서 데이터를 추출하시는 분이 계시는데
추출 방법을 잘 몰라서 업무에 애로가 많으신가 봅니다. 별로 어려운게 아니라서 짬을 내어
VBA로 만들었어요. 참고가 되기를 바랍니다.

1. 이번에는 동적 이름을 이용하지 않고 엑셀의 기본 기능을 이용하여 검색할 영역을 지정
떨어지지 않은 특정영역의 데이터 숫자를 세는 방법으로 A2에서 아래, 오른쪽 끝까지의
데이터 숫자를 세어 줍니다.

row_cnt = Application.CountA(Range(“A2”, Range(“A2”).End(xlDown)))
col_cnt = Application.CountA(Range(“A2”, Range(“A2”).End(xlToRight)))

2. 서브루틴을 사용하지 않고 바로 한 프로시져에 넣어도 되는데 나중을 고려해서
서브루틴으로 사용했어요. 보시면 아시겠지만 간단합니다. 행열의 데이터 크기를 알려주고
행열의 단위를 알려주면 루프를 돌면서 데이터를 추출해서 Listbox에 넣어 줍니다.

속성창에서 Listbox의 Column Count는 2로 해 줍니다.

k = 0

‘ 반복 검색이 필요하므로 리스트박스를 클리어 합니다.
UserForm1.ListBox1.Clear

For i = runit To rcnt Step runit

For j = cunit To ccnt Step cunit

UserForm1.ListBox1.AddItem “(” & i & “x” & j & “)”

UserForm1.ListBox1.List(k, 1) = Cells(i, j).Value

‘ 행을 추가해야 하므로
k = k + 1

Next j

Next i

3. Listbox에 추출된 데이터를 엑셀 시트로 보내는 서브루틴입니다.

Sheets(“Extract”).Select

‘ 기존 데이터를 지워 줍니다.
Range(“A1”, Range(“B1”).End(xlDown)).Clear

Application.ScreenUpdating = False

With UserForm1.ListBox1

For i = 0 To .ListCount – 1

Cells(j + 1, 1) = .List(i, 0)
Cells(j + 1, 2) = .List(i, 1)

j = j + 1

Next i

End With

간단하게 추출할 행과 열을 넣고 검색, 추출하면 됩니다.

엑셀 자료는 제 블로그에 올립니다.