CAFE

각종 자료, 정보

[052] VLOOKUP함수 보완 사용자 정의 함수 rVLOOKUP 버그수정

작성자윤슬|작성시간16.01.28|조회수1,824 목록 댓글 9


안녕하세요?


기존에 올려뒀던 rVLOOKUP 사용자 정의 함수의 버그가 발견되어 수정, 게시합니다.

사용법은 이전과 다르지 않습니다.

파일을 보시면 아시겠지만 vlookup 함수의 단점인 첫번째 출현값만이 아니고 모두를 나타낼 수 있고 기준열보다 왼쪽에 있는 값도 나타낼 수 있습니다.

마지막으로 검색된 여러가지 값을 사용자가 지정한 구분기호로 구분할 수 있습니다.


자세한 내용은 아래 코드와 첨부파일을 참고로...


Option Explicit

'****************************************************************************************
'* Date      : 2015-12-01
'* Autohor   : 물비늘(윤슬)
'* Purpose   : VLOOKUP함수의 단점을 보완, 다중값 가져오기 및 역 VLOOKUP 함수
'* Remark    : 4번째 인수 1 = 참조범위에서 해당값의 일치값 전체 나열
'              4번째 인수 0 = 참조범위에서 해당값의 가장 빠른값 표기
'              3번째 인수 -값 + 4번째 인수 1 = VLOOKUP함수와 같이 대응열값을 나타내지만 일치값 전체 나열
'****************************************************************************************

Function rVlookup(c As Variant, _
                Rng As Range, _
                x As Long, _
                Bln As Boolean, _
                Optional St As String = ", ") As Variant
Dim i As Long
Dim j As Long
Dim n As Long
Dim VAR()

j = Rng.Columns.Count

If Not Rng Is Nothing And Not IsEmpty(c) And IsNumeric(x) Then
    If Rng.Cells(j).Column < x Then
        rVlookup = "열번호지정 오류"
        Exit Function
    End If

        For i = j To Rng.Cells.Count Step j
            Select Case Bln
                Case False
                    If x > 0 Then
                        If Rng.Cells(i).Value = c Then
                            rVlookup = Rng.Cells(i).Offset(, (x - 1) * -1).Value
                            Exit For
                        End If
                    Else
                        If Rng.Cells(i - Abs(x) + 1).Value = c Then
                            rVlookup = Rng.Cells(i - Abs(x) + 1).Offset(, Abs(x) - 1).Value
                            Exit For
                        End If
                    End If
                Case True
                    If x < 0 Then
                        If Rng.Cells(i - j + 1).Value = c Then
                            n = n + 1
                            ReDim Preserve VAR(1 To n)
                            VAR(n) = Rng.Cells(i - j + 1).Offset(, Abs(x) - 1).Value
                        End If
                    Else
                        If Rng.Cells(i).Value = c Then
                            n = n + 1
                            ReDim Preserve VAR(1 To n)
                            VAR(n) = Rng.Cells(i).Offset(, (x - 1) * -1).Value
                        End If
                    End If
                   
                    If n = 1 Then
                        rVlookup = VAR(n)
                    Else
                        rVlookup = Join(VAR, St)
                    End If
                       
            End Select
        Next i
Else
    rVlookup = ""
End If
End Function


그럼 또...!


=======================================================================================

첨부파일


첨부파일 VLOOKUP_함수_보완_rVLOOKUP_사용자정의함수.xlsm


=======================================================================================




다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자uberjam | 작성시간 16.05.29 고맙습니다~ 댓글 남길려고 가입했습니다. 유용하게 잘쓰고 있습니다~~~
  • 작성자uberjam | 작성시간 16.05.29 다들 아실텐데 한가지 팁이라면 마지막 구분자를 줄바꿈 개행문자 char(10) 로 지정하고 셀서식 줄바꿈 하면 더욱 보기가 쉽게 정렬이 됩니다~
  • 답댓글 작성자ITX청춘 | 작성시간 17.01.03 제가 잘 모르겠는데 char(10)을 어디에 써야 하는건가요?
    도움 부탁드려요. 감사합니다.
  • 답댓글 작성자ITX청춘 | 작성시간 17.01.03 ITX청춘 아~ 마지막에 쓰고 셀서식을 줄바꿈으로 지정해야 되는 거였군요. 감사합니다. 오늘 또 하나 배웠습니다.
  • 작성자오늘도겐세이 | 작성시간 16.07.14 와~대단하다는 말 밖에...존경스럽습니다~^^
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼