메뉴
실무 위키VBA 코드Get_Records

Get_Records

Function

시트에서 지정한 ID를 만족하는 필드 값을 배열로 반환하는 VBA 사용자 지정 함수입니다.

Get_Records 코드 미리보기
구문 = Get_Records ( 시트, ID, 필드명, [필드갯수조절] )
인수구분 형식 설명
시트 필수 Worksheet
특정 ID의 데이터를 불러올 대상 시트입니다. 워크시트를 직접 지정합니다.
시트에 입력된 데이터는 반드시 A1셀부터 시작해야 합니다.
ID 필수 Variant
조회할 ID 입니다. 숫자 또는 문자일 수 있습니다.
필드명 필수 Variant
ID를 만족할 경우 불러올 필드명입니다. 1행에 입력된 머릿글을 입력합니다.
여러개의 필드를 불러와야 할 경우 쉼표로 구분하여 입력합니다.
필드갯수조절 선택 Long
새로운 ID 번호를 관리하는 필드가 데이터베이스 우측에 포함되어 있을 경우 -1로 입력합니다. 기본값은 0 입니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

사원번호가 OPD001인 직원의 이름·나이·부서 받아오기
Dim vArr as Variant
Dim WS as WorkSheet
Set WS = ThisWorkBook.WorkSheets("직원시트")
vArr = Get_Records(WS, "OPD001", "이름, 나이, 부서")
받아온 값 중 부서를 메시지 박스로 출력하기
Dim vArr as Variant
Dim WS as WorkSheet
Set WS = ThisWorkBook.WorkSheets("직원시트")
vArr = Get_Records(WS, "OPD001", "이름, 나이, 부서")
MsgBox vArr(2)

안내사항

결과값을 배열로 반환하므로 변수에 담아 사용하며, 입력한 ID나 필드명이 시트에 없으면 비어있는 배열을 반환합니다.
데이터베이스 우측으로 새로운 ID번호를 관리하는 값이 있을 경우 마지막 인수를 -1 로 입력해야 예상치 못한 오류를 방지할 수 있습니다.
댓글 2
5 (2개 평가)
Shark Baek
Shark Baek 2021.04.22 10:31
유용한정보 감사합니다.
갈길이 너무 머네요..^^
강민준🤗
강민준🤗 2024.08.11 12:19
좋은 강의 감사합니다.
스크랩 완료