엑셀 Excel VBA 사용자가 선택한 영역 값, 셀 주소 정보 알아 내는 방법

 

환경: Microsoft Excel 2013

 

사용자가 워크시트의 셀을 드래그해서 선택했을 때 어떻게 하면 VBA 에서 셀의 값을 하나씩 차례대로 읽을 수 있을까요? 이것은 VBA 에서 데이터를 걸러 낼 때 자주 이용하는 방법입니다. 선택한 영역에서 특정한 값을 제외시키고 싶을 때 셀 값을 하나씩 읽어 어떤 값이 들어 있는지 알아야 하잖아요. 오늘은 For each 반복문을 사용해서 선택한 영역의 데이터를 콘솔 창에 출력해 보도록 하겠습니다.

 

먼저 선택한 영역의 행과 열의 개수를 알아 보겠습니다. Selection 개체의 Cells 함수를 이용하면 현재 선택된 영역을 가져올 수 있습니다. 반환 받은 rMulti 개체의 Rows.Count Columns.Count 속성값을 이용해서 행과 열의 개수를 알아 낸 뒤 Debug.Print 함수로 콘솔에 출력합니다.

 

Set rMulti = Selection.Cells()

 

rowCount = rMulti.Rows.Count

colCount = rMulti.Columns.Count

 

Debug.Print "ROW 개수 : " & rowCount, "COLUMN 개수 : " & colCount


엑셀 Excel VBA 사용자가 선택한 영역 값, 셀 주소 정보 알아 내는 방법

 

다음은 반환 받은 Range 개체 rMulti For Each 를 이용해서 하나씩 출력하는 소스입니다. 하나의 반복문으로 모든 셀의 값 출력이 가능합니다. rMulti.Cells 로 반복문을 돌렸을 때 출력되는 순서는 그림과 같습니다. 첫 번째 행의 모든 데이터를 출력하고 아래로 내려가는 두 번째, 세 번째 행을 출력하는 방식입니다.

 

For Each rCell In rMulti.Cells

Debug.Print rCell.Address, rCell.Value

Next rCell

엑셀 Excel VBA 사용자가 선택한 영역 값, 셀 주소 정보 알아 내는 방법

 

만약 행과 열의 출력 순서를 바꾸고 싶다면 2개의 For each 문을 사용해서 출력하시면 됩니다. 선택한 영역의 또 다른 출력 방식이죠. B 열을 데이터를 출력한 뒤 C, D, E 열을 차례대로 출력하는 방식입니다. Columns Rows 를 바꾸면 반대의 방향으로 출력할 수 있겠죠.

 


For Each rCol In rMulti.Columns

    For Each rCell In rCol.Rows

        Debug.Print rCell.Address, rCell.Value

    Next rCell

Next rCol

엑셀 Excel VBA 사용자가 선택한 영역 값, 셀 주소 정보 알아 내는 방법

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군