지정한 항목의 데이터 반환 :: Get_Records 명령문 사용법

시트의 지정한 항목(ID)을 만족하는 필드의 데이터를 반환하는 사용자 함수인 Get_Records 함수의 사용법을 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 04. 07. 23:14
URL 복사
메모 남기기 : (2)

지정한 항목의 데이터 반환 :: Get_Records 명령문 사용법 총정리

엑셀 Get_Records 명령문 목차 바로가기
요약

엑셀 Get_Records 함수는 시트의 지정한 항목(ID)을 만족하는 필드의 데이터를 반환하는 사용자 함수입니다.

명령문 구문
= Get_Records ( 시트, ID, 필드명, [필드갯수조절] )
사용된 인수 및 변수 알아보기
인수 설명
시트
[WorkSheet]
특정 ID의 데이터를 불러올 대상 시트입니다. 워크시트를 직접지정합니다. 만약 현재 실행중인 통합문서의 시트를 지정하려면 함수를 아래와 같이 사용합니다.

=Get_Records(ThisWorkBook.WorkSheets("시트명"), ID, "필드명")

시트에 입력된 데이터는 반드시 A1셀부터 시작해야 합니다.

ID
[Variant]
조회할 ID 입니다. 숫자 또는 문자일 수 있습니다.
필드명
[Variant]
ID를 만족할 경우 불러올 필드명입니다. 1행에 입력된 머릿글을 입력합니다. 여러개의 필드를 불러와야 할 경우 쉼표로 구분하여 입력합니다.
필드갯수조절
[Long, 선택인수]
새로운 ID 번호를 관리하는 필드가 데이터베이스 우측에 포함되어 있을 경우 -1로 입력합니다. 기본값은 0 입니다.

예제파일 다운로드

상세 설명

엑셀 Get_Records 함수는 시트의 지정한 항목(ID)을 만족하는 필드의 데이터를 반환하는 VBA 사용자 함수입니다. 여러개의 필드를 배열로 반환합니다. 만약 시트에 입력한 ID나 필드명이 존재하지 않을경우, Get_Records 함수는 비어있는 배열을 반환합니다.

Get_Records 함수의 마지막 인수는 필드갯수를 조절합니다. 따라서 시트에 입력된 데이터 베이스 우측으로 새로운 ID번호를 관리하는 값이 포함되어 있을 경우, Get_Records 함수의 마지막인수는 -1 로 입력해야 예상치 못한 오류를 방지할 수 있습니다. 필드갯주조절의 기본값은 0 입니다.

엑셀 get_records 함수 필드갯수 조절
데이터베이스 우측으로 ID 값이 있을 경우 필드갯수조절을 -1로 입력합니다.

Get_Records 함수는 결과값으로 배열을 반환하는 것에 주의해서 사용합니다. Get_Records 함수는 데이터베이스 관련 VBA 함수 중 하나입니다. 더 다양한 종류의 데이터베이스 관련 함수는 아래 링크에서 자세히 확인할 수 있습니다.

엑셀 데이터베이스 관련 VBA 함수 목록 및 사용법
실전 사용 예제
  1. 직원목록시트에서 사원번호가 OPD001인 직원의 이름, 나이, 부서를 받아오기
    Dim vArr as Variant
    Dim WS as WorkSheet
    Set WS = ThisWorkBook.WorkSheets("직원시트")
    vArr = Get_Records(WS, "OPD001", "이름, 나이, 부서")
  2. 사원번호가 OPD001인 직원의 이름, 나이, 부서를 받아온 뒤 부서를 메시지박스로 출력하기
    Dim vArr as Variant
    Dim WS as WorkSheet
    Set WS = ThisWorkBook.WorkSheets("직원시트")
    vArr = Get_Records(WS, "OPD001", "이름, 나이, 부서")
    MsgBox vArr(2)

지정한 항목의 데이터 반환, Get_Records 명령문 동작원리

Get_Records 명령문 전체 코드
Function Get_Records(WS As Worksheet, ID, Fields, Optional Offset As Long = 0)
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'수정 및 배포 시 출처를 반드시 명시해야 합니다.
 
'■ Get_Records 함수
'■ 시트에서 ID를 만족하는 필드의 값을 배열로 반환합니다. 여러개 필드의 값을 받아올 수 있습니다.
'■ 사용방법
'Array = Get_Records(ThisWorkBook.WorkSheets("시트명"), ID번호, "필드명1, 필드명2")
'▶ 인수 설명
'_____________WS                : 데이터를 조회 할 시트입니다.
'_____________ID                : 조회할 ID 입니다.
'_____________Fields            : 불러올 필드의 머릿글을 입력합니다. 필드가 여러개일 경우 쉼표로 나누어 입력합니다.
'_____________Offset            : 데이터베이스 우측으로 새로운 ID를 관리하는 값이 있을 경우 -1로 입력합니다. 기본값은 0 입니다.
'###############################################################
 
Dim cRow As Long: Dim cCol As Long
Dim vFields As Variant: Dim vField As Variant
Dim vFieldNo As Variant
Dim i As Long: Dim j As Long
 
With WS
 
cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
cCol = .Cells(1, .Columns.Count).End(xlToLeft).Column + Offset
 
If InStr(1, Fields, ",") > 0 Then vFields = Split(Fields, ",") Else vFields = Array(Fields)
ReDim vFieldNo(0 To UBound(vFields))
 
 
    For Each vField In vFields
        For i = 1 To cCol
            If .Cells(1, i).Value = Trim(vField) Then vFieldNo(j) = i: j = j + 1
        Next
    Next
 
    For i = 2 To cRow
        If .Cells(i, 1).Value = ID Then
            For j = 0 To UBound(vFieldNo)
                vFieldNo(j) = .Cells(i, vFieldNo(j))
            Next
            Exit For
        End If
    Next
 
Get_Records = vFieldNo
 
End With
 
End Function
명령문 동작원리 단계별 알아보기
  1. 명령문에 사용할 변수를 선언합니다.
    Dim cRow As Long: Dim cCol As Long
    Dim vFields As Variant: Dim vField As Variant
    Dim vFieldNo As Variant
    Dim i As Long: Dim j As Long
  2. 시트의 마지막 행과 마지막 열번호를 받아옵니다.
    With WS
     
    cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    cCol = .Cells(1, .Columns.Count).End(xlToLeft).Column + Offset
  3. 입력한 필드가 여러개일 경우 각각의 필드로 분리합니다.
    If InStr(1, Fields, ",") > 0 Then vFields = Split(Fields, ",") Else vFields = Array(Fields)
    ReDim vFieldNo(0 To UBound(vFields))
  4. 각 필드의 열번호를 받아옵니다.
        For Each vField In vFields
            For i = 1 To cCol
                If .Cells(1, i).Value = Trim(vField) Then vFieldNo(j) = i: j = j + 1
            Next
        Next
  5. 입력한 ID의 각 필드정보를 배열로 입력한 뒤, 함수의 결과값으로 반환 후 명령문을 종료합니다.
        For i = 2 To cRow
            If .Cells(i, 1).Value = ID Then
                For j = 0 To UBound(vFieldNo)
                    vFieldNo(j) = .Cells(i, vFieldNo(j))
                Next
                Exit For
            End If
        Next
     
    Get_Records = vFieldNo
     
    End With
5 2 투표
게시글평점
2 댓글
Inline Feedbacks
모든 댓글 보기
2
0
여러분의 생각을 댓글로 남겨주세요.x