메뉴
실무 위키VBA 코드Insert_Record

Insert_Record

Sub

시트에 입력된 데이터베이스에 새로운 데이터를 추가하는 VBA 명령문입니다.

Insert_Record 코드 미리보기
구문 Insert_Record 시트, 값1, [값2], ...
인수구분 형식 설명
시트 필수 Worksheet
데이터베이스가 입력된 시트입니다.
현재 통합문서에서 사용 중인 시트를 시트명으로 받아오려면 ThisWorkBook.WorkSheets("시트명") 으로 입력합니다.
값1, 값2, ... 필수 Variant
새롭게 추가할 데이터를 머릿글 순서에 맞춰 차례대로 입력합니다.
ID가 1씩 자동으로 증가하는 연속된 순번일 경우, ID는 제외하고 값만 입력하는 것에 주의합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · Insert_Record
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 숫자가 입력되어 있어야 합니다.
댓글 13
5 (6개 평가)
끝인가요
끝인가요 2022.03.08 14:34
너무 유용하게 사용 중입니다. 감사합니다.
질문이 있는데, 병합이 이루어진 시트에서는 해당 내용을 적용을 못시키던데 혹시 무조건 마지막 행에 데이터를 계속 입력되게끔 할 수는 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2022.03.09 22:44
안녕하세요.
병합된 셀은 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/
끝인가요
끝인가요 2022.03.16 20:30
답변 감사합니다!~ 마지막 행 찾는 방법은 활용도가 진짜 높은거 같아요
낄렵낄렵
낄렵낄렵 2022.04.04 17:22
cID = .Cells(1, .Columns.Count).End(xlToLeft).Value
머릿글 우측 데이터를 사용할 때 중간에 왜 End(xlToLeft) 가 사용되는지 잘 모르겠습니다....
.Cells(1, .Columns.Count)를 통해서 머릿글 우측이 지정됐으니 바로 .Value를 쓰는줄 알았는데, End(xlToLeft)를 쓰게 되면 다시 선택된 셀에서 가장 좌측에 있는 셀을 선택하는 게 아닌가요??
오빠두엑셀
오빠두엑셀 작성자 2022.04.12 16:57
columns.count는 시트 전체 열 개수를 반환합니다. 따라서 위 명령문은
.Cells(1,16384) -> XFD1 셀에서, 왼쪽으로 이동 (머리글의 마지막 셀) 후 값을 반환합니다.^^
강민준🤗
강민준🤗 2024.08.11 12:30
좋은 자료 감사합니다.🙇‍♂️
마루아범
마루아범 2024.11.06 12:47
새로운 데이터를 아래로 추가하는 법말고, 새로운 데이터를 위에 삽입하고 기존데이터는 밑으로 밀려가는 방법은 없을 까요?
오빠두엑셀
오빠두엑셀 작성자 2024.11.08 00:47
안녕하세요.
아래 링크를 확인해보시길 바랍니다.
엑셀 자동 입력 보고서, 1분 안에 만드는 방법 - 오빠두엑셀
궁디팡팡
궁디팡팡 2025.03.17 23:53
너무 유용하게 사용하고 있는데요, 링크가 걸려있는 데이터는 링크없이 text만 복사해 가는것 같습니다 링크도 같이 복사해가는 방법 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2025.03.18 00:01
안녕하세요. Insert_record 함수는 텍스트만 복사할 수 있습니다. 하이퍼링크를 동시에 복사하려면 함수를 수정 후 사용해야 합니다.
ChatGPT를 활용해서 함수를 직접 수정 수 사용해보세요. :)
감사합니다.
궁디팡팡
궁디팡팡 2025.03.18 11:30
넵 감사합니다.
kimhj
kimhj 2026.02.06 12:25
강의영상은 없나요
오빠두엑셀
오빠두엑셀 작성자 2026.02.09 22:10
안녕하세요.
아래 영상을 참고해보시길 바랍니다.
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/
스크랩 완료