[257회 라이브 공지] 이번 주 라이브는 `3/4(수) 오후 8시` 에 진행합니다! 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

데이터베이스 신규 데이터 추가 :: Insert_Record 명령문 사용법 총정리

시트에 입력된 데이터베이스에 새로운 데이터를 추가하는 Insert_Record 함수의 사용법 및 동작원리를 살펴봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 04. 15. 16:39
URL 복사
메모 남기기 : (13)

데이터베이스 신규 데이터 추가 :: Insert_Record 명령문 사용법 총정리

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

엑셀 Insert_Record 함수는 시트에 입력된 데이터베이스에 새로운 데이터를 추가하는 함수입니다.

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

예제파일 다운로드

오빠두엑셀의 모든 강의 예제파일은 회원 여러분께 무료로 제공됩니다.

상세 설명

엑셀 Insert_Record 함수는 시트에 입력된 데이터베이스에 새로운 데이터를 추가하는 사용자 지정 함수입니다. Insert_Record 함수는 아래 규칙에 따라 입력된 시트에서 올바르게 동작합니다.

Insert_Record 예제
Insert_Record 함수에 사용할 시트 데이터 입력시 주의사항
  1. 시트에 입력된 데이터베이스는 반드시 A1 셀부터 시작해야 합니다.
  2. 병합된 셀이 없어야 합니다.
  3. 머릿글은 1행, ID는 A열에 입력되어야 합니다.
  4. 데이터가 추가될 때마다 ID가 자동으로 1씩 증가하는 연속된 숫자일 경우,
    - 머릿글에는 반드시 ID라는 문자가 포함되어야 합니다. (예: ID, ID직원, ID_구분, 등..)
    - 시트에 입력된 데이터 머릿글의 오른쪽으로 새롭게 추가될 ID 숫자가 입력되어야 합니다.
  5. ID가 연속된 숫자가 아닐 경,
    - 머릿글에는 ID라는 문자가 포함되지 않아야 합니다.
    - Insert_Record 함수의 첫번째 값으로 ID를 포함하여 입력합니다.

Insert_Record 함수는 데이터베이스 관련 VBA 함수 중 하나입니다. 더 다양한 종류의 데이터베이스 관련 함수는 아래 링크에서 자세히 확인할 수 있습니다.

실전 사용 예제
  1. 직원목록을 관리하는 데이터베이스 시트에 신규 데이터 추가
    '시트명 : 직원목록DB
    '머릿글 : ID | 사번 | 이름 | 부서 | 나이 | 연락처
    Insert_Record ThisWorkBook.WorkSheets("직원목록DB"), "OPD011", "김하늘", "인사팀", 32, "010-1234-1234"
  2. 제품구분을 관리하는 시트에 신규 데이터 추가
    '시트명 : 제품구분DB
    '머릿글 : ID | 제품구분
    Insert_Record ThisWorkBook.WorkSheets("제품구분DB"), "가전제품"
  3. ID가 연속된 순번이 아닌 데이터베이스에 신규 데이터 추가
    '시트명 : 제품규격DB
    '머릿글 : 규격 | 하위단위 | 단위수량
    Insert_Record ThisWorkBook.WorkSheets("제품규격DB"), "BOX", "EA", 150

데이터베이스 새로운 데이터 추가, Insert_Record 함수 동작원리

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
명령문 동작원리 단계별 알아보기
  1. 변수를 선언하고 변수의 기본값을 설정합니다.
    Dim cID As Long
    Dim cRow As Long
    Dim vaArr As Variant: Dim i As Long: i = 2
  2. 시트에서 사용 중인 범위의 마지막 행에서 1을 더한 값을 받아옵니다. (새로운 값을 추가할 행 번호)
    With WS
        cRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
  3. ID 머릿글에 ID라는 문자가 포함되었을 경우, 머릿글 우측에 입력된 ID를 참고하여 새로운 데이터를 추가합니다.
        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
  4. ID 머릿글에 ID라는 문자가 포함되지 않았을 경우, ID부터 시작하여 데이터를 하나씩 추가합니다.
        Else
            For Each vaArr In vaParamArr
                .Cells(cRow, i - 1).Value = vaArr
                i = i + 1
            Next
        End If
     
    End With
댓글 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/