이 페이지에서
구문
Insert_Record 시트, 값1, [값2], ...
인수구분
형식 설명
시트
필수
Worksheet
데이터베이스가 입력된 시트입니다.
현재 통합문서에서 사용 중인 시트를 시트명으로 받아오려면 ThisWorkBook.WorkSheets("시트명") 으로 입력합니다.
값1, 값2, ...
필수
Variant
새롭게 추가할 데이터를 머릿글 순서에 맞춰 차례대로 입력합니다.
ID가 1씩 자동으로 증가하는 연속된 순번일 경우, ID는 제외하고 값만 입력하는 것에 주의합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요Sub Insert_Record(WS As Worksheet, ParamArray vaParamArr() As Variant)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'수정 및 배포 시 출처를 반드시 명시해야 합니다.
'■ Insert_Record 함수
'■ 데이터베이스가 입력된 시트에 새로운 데이터를 추가합니다.
'■ 사용방법
'Insert_Record ThisWorkBook.WorkSheets("시트명"), "이름", "나이", "지역", ...
'▶ 인수 설명
'_____________WS : 새로운 데이터를 추가할 대상 시트입니다.
'_____________값 : 새롭게 추가할 데이터를 머릿글 순서에 맞춰 차례대로 입력합니다. 새로 추가할 ID는 머릿글 우측에 입력되어 있어야하며, 값이 추가될 때마다 1씩 자동으로 증가합니다.
'###############################################################
Dim cID As Long
Dim cRow As Long
Dim vaArr As Variant: Dim i As Long: i = 2
With WS
cRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If InStr(1, .Cells(1, 1).Value, "ID") > 0 Then
cID = .Cells(1, .Columns.Count).End(xlToLeft).Value
.Cells(1, .Columns.Count).End(xlToLeft).Value = .Cells(1, .Columns.Count).End(xlToLeft).Value + 1
.Cells(cRow, 1).Value = cID
For Each vaArr In vaParamArr
.Cells(cRow, i).Value = vaArr
i = i + 1
Next
Else
For Each vaArr In vaParamArr
.Cells(cRow, i - 1).Value = vaArr
i = i + 1
Next
End If
End With
End Sub
활용 예제
직원목록을 관리하는 데이터베이스 시트에 신규 데이터 추가
'시트명 : 직원목록DB
'머릿글 : ID | 사번 | 이름 | 부서 | 나이 | 연락처
Insert_Record ThisWorkBook.WorkSheets("직원목록DB"), "OPD011", "김하늘", "인사팀", 32, "010-1234-1234"
ID가 연속된 순번이 아닌 데이터베이스에 신규 데이터 추가
'시트명 : 제품규격DB
'머릿글 : 규격 | 하위단위 | 단위수량
Insert_Record ThisWorkBook.WorkSheets("제품규격DB"), "BOX", "EA", 150
안내사항
시트의 데이터베이스는 반드시 A1 셀부터 시작해야 하고, 병합된 셀 없이 머릿글은 1행·ID는 A열에 입력되어 있어야 합니다.
ID가 1씩 자동으로 증가하는 연속된 숫자일 경우 머릿글에 "ID" 라는 문자가 포함되어야 합니다.
이때 머릿글 오른쪽에 새롭게 추가될 ID 숫자가 입력되어 있어야 합니다.
질문이 있는데, 병합이 이루어진 시트에서는 해당 내용을 적용을 못시키던데 혹시 무조건 마지막 행에 데이터를 계속 입력되게끔 할 수는 없을까요?
병합된 셀은 DB 형태로 관리하는 것이 불가능합니다. 만약 병합된 셀을 포함해서 DB를 관리해야 할 경우, 병합된 셀을 고려해서 직접 매크로 코드를 작성해주셔야 합니다.
마지막 행을 찾는 방법은 아래 코드를 참고해보세요.
https://www.oppadu.com/%ec%97%91%ec%85%80-vba-%eb%a7%88%ec%a7%80%eb%a7%89-%ec%85%80-%ec%b0%be%ea%b8%b0-%eb%a7%88%ec%a7%80%eb%a7%89-%ed%96%89-%ec%b0%be%ea%b8%b0/
.Cells(1, .Columns.Count)를 통해서 머릿글 우측이 지정됐으니 바로 .Value를 쓰는줄 알았는데, End(xlToLeft)를 쓰게 되면 다시 선택된 셀에서 가장 좌측에 있는 셀을 선택하는 게 아닌가요??
.Cells(1,16384) -> XFD1 셀에서, 왼쪽으로 이동 (머리글의 마지막 셀) 후 값을 반환합니다.^^
아래 링크를 확인해보시길 바랍니다.
엑셀 자동 입력 보고서, 1분 안에 만드는 방법 - 오빠두엑셀
ChatGPT를 활용해서 함수를 직접 수정 수 사용해보세요. :)
감사합니다.
아래 영상을 참고해보시길 바랍니다.
https://www.oppadu.com/%ec%97%91%ec%85%80-%ec%9e%ac%ea%b3%a0%ea%b4%80%eb%a6%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8/