지정한 항목의 데이터 반환 :: 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 입니다. |
예제파일 다운로드
- [엑셀VBA함수] GetRecords 함수예제파일
상세 설명
엑셀 Get_Records 함수는 시트의 지정한 항목(ID)을 만족하는 필드의 데이터를 반환하는 VBA 사용자 함수입니다. 여러개의 필드를 배열로 반환합니다. 만약 시트에 입력한 ID나 필드명이 존재하지 않을경우, Get_Records 함수는 비어있는 배열을 반환합니다.
Get_Records 함수의 마지막 인수는 필드갯수를 조절합니다. 따라서 시트에 입력된 데이터 베이스 우측으로 새로운 ID번호를 관리하는 값이 포함되어 있을 경우, Get_Records 함수의 마지막인수는 -1 로 입력해야 예상치 못한 오류를 방지할 수 있습니다. 필드갯주조절의 기본값은 0 입니다.
데이터베이스 우측으로 ID 값이 있을 경우 필드갯수조절을 -1로 입력합니다. Get_Records 함수는 결과값으로 배열을 반환하는 것에 주의해서 사용합니다. Get_Records 함수는 데이터베이스 관련 VBA 함수 중 하나입니다. 더 다양한 종류의 데이터베이스 관련 함수는 아래 링크에서 자세히 확인할 수 있습니다.
엑셀 데이터베이스 관련 VBA 함수 목록 및 사용법실전 사용 예제
- 직원목록시트에서 사원번호가 OPD001인 직원의 이름, 나이, 부서를 받아오기
Dim vArr as Variant Dim WS as WorkSheet Set WS = ThisWorkBook.WorkSheets("직원시트") vArr = Get_Records(WS, "OPD001", "이름, 나이, 부서")
- 사원번호가 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
명령문 동작원리 단계별 알아보기
- 명령문에 사용할 변수를 선언합니다.
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
- 입력한 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
- 직원목록시트에서 사원번호가 OPD001인 직원의 이름, 나이, 부서를 받아오기