병합된 셀에서 원하는 데이터를 찾아서 가져오는 코드를 만들어봤다.
Sub Macro()
'// 엑셀에서 Alt + F11 키 누르면 뜨는 창에서 메뉴 [삽입] - [모듈] 선택
'// 이 코드를 붙여넣기
'// F5키를 누르면 실행됨
Dim rngC As Range
On Error Resume Next
For Each rngC In Range([B2], Cells(Rows.Count, "B").End(3)) '// 구간 범위 설정
If rngC.MergeCells And Not IsEmpty(rngC) Then
Debug.Print "이름 : " & rngC.Text '// 직접 실행창(Ctrl + G) 에서 출력되는 내용
If rngC.Text = "순이" Then '// 특정셀을 기록해야 하는데 직접 이름을 적어봤음
MsgBox rngC.Offset(, 1).Offset(1)
End If
End If
Next rngC
End Sub
'// 사용자가 만들어서 사용하는 함수
Function Find_Data(ByVal Name As String) As String
'// 엑셀에서 Alt + F11 키 누르면 뜨는 창에서 메뉴 [삽입] - [모듈] 선택
'// 이 코드를 붙여넣기
Dim rngC As Range
On Error Resume Next
For Each rngC In Range([B2], Cells(Rows.Count, "B").End(3)) '// 구간 범위 설정
'//B2셀부터 B열의 값이 있는 마지막 열까지
If rngC.MergeCells And Not IsEmpty(rngC) Then
Debug.Print "이름 : " & rngC.Text '// 직접 실행창(Ctrl + G) 에서 출력되는 내용
If rngC.Text = Name Then
Find_Data = rngC.Offset(, 1).Offset(1)
End If
End If
Next rngC
End Function
참조할 구간범위 및 몇번째 자료를 가져올 것인가를 정하는 것도 한번 작성해봤다.
Function Find_Lookup(ByVal Name As String, ByVal rngDB As Range, ByVal n As Integer) As String
'// 엑셀에서 Alt + F11 키 누르면 뜨는 창에서 메뉴 [삽입] - [모듈] 선택
'// 이 코드를 붙여넣기
Dim rngC As Range
On Error Resume Next
For Each rngC In rngDB '// 구간 범위 설정
If rngC.MergeCells And Not IsEmpty(rngC) Then
If rngC.Text = Name Then
Find_Lookup = rngC.Offset(, n).Offset(1)
End If
End If
Next rngC
End Function
* 첨부파일에 코드가 다 들어 있습니다.
'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글
[VBA기초] Cells(행,열).End(4)(2) 의 의미 (0) | 2015.06.24 |
---|---|
[VBA기초] 셀병합하기 (0) | 2015.06.23 |
[VBA기초] 현재 폴더명, 상위폴더명 표시하기 (0) | 2015.06.22 |
[VBA기초] Round 함수 (0) | 2015.06.14 |
[VBA기초] GetOpenFilename (1) | 2015.06.13 |