유저폼으로 표에 데이타를 입력하는 방법
Private Sub btn1_Click() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("DATA") Dim tblDATA As ListObject Set tblDATA = sh.ListObjects("DATA") Dim newRow As Long newRow = tblDATA.ListRows.Count + 1 With 입력 tblDATA.ListColumns("날짜").DataBodyRange(newRow, 1).Value = .TextBox1.Value tblDATA.ListColumns("입출").DataBodyRange(newRow, 1).Value = .TextBox2.Value tblDATA.ListColumns("업무번호").DataBodyRange(newRow, 1).Value = .TextBox3.Value tblDATA.ListColumns("업체").DataBodyRange(newRow, 1).Value = .TextBox4.Value tblDATA.ListColumns("제품명").DataBodyRange(newRow, 1).Value = .TextBox5.Value tblDATA.ListColumns("제품번호").DataBodyRange(newRow, 1).Value = .TextBox6.Value tblDATA.ListColumns("제품수량").DataBodyRange(newRow, 1).Value = .TextBox7.Value tblDATA.ListColumns("제품단가").DataBodyRange(newRow, 1).Value = .TextBox8.Value tblDATA.ListColumns("모델넘버").DataBodyRange(newRow, 1).Value = .TextBox9.Value tblDATA.ListColumns("제조원가").DataBodyRange(newRow, 1).Value = .TextBox10.Value tblDATA.ListColumns("입고가격").DataBodyRange(newRow, 1).Value = .TextBox11.Value tblDATA.ListColumns("출고가격").DataBodyRange(newRow, 1).Value = .TextBox12.Value tblDATA.ListColumns("입고날짜").DataBodyRange(newRow, 1).Value = .TextBox13.Value tblDATA.ListColumns("보관장소").DataBodyRange(newRow, 1).Value = .TextBox14.Value tblDATA.ListColumns("담당부서").DataBodyRange(newRow, 1).Value = .TextBox15.Value End With End Sub
아주 간단하게 이런 식으로 데이타를 입력하고 있습니다. (유저폼이 대충 만든 거라서 조악합니다. 죄송)
이렇게 쓰다보니 문제가 몇개 발생해서 조언을 구합니다.
1. 속도가 느립니다.
- 유저폼에는 생략했지만 원래 테이블에 있는 No. 번호 에도 다 입력을 합니다. 즉 위의 코드보다 항목이 훨씬 더 많습니다. 코드에서는 생략했지만 No.번호 항목은 for 문을 돌립니다. 번호라서 가능한 부분이죠.
문제점은 항목이 많다보니 속도가 엄청 느립니다. 항목이 모두 70개가 넘으니 버튼 한번 누르면 입력되는데 한 세월입니다.
application.screenupdate 였나... 이걸 써봐도 느립니다. 컴퓨터가 구려서 그런 건지도 모르겠지만...
그러다가 배열로 입력하면 빠르다는 말을 듣고 배열을 정의해서 각 항목을 배열에 담고 뿌려보았습니다. 속도가 빨라졌습니다.
배열에 대해 잘 몰라서 좀 불안하지만 괜찮은 것 같았습니다. 그런데...
2. 원본데이타 표의 항목이 순서가 변경될 때가 있어서 배열을 못 쓰고 있습니다.
업무가 데이타를 받아서 거기에 유저폼으로 입력하는 방식입니다. 문제는 가끔 받는 데이타가 순서가 변경되어서 오는 때가 있다는 겁니다.
제품명-제품번호-제품단가 이런 순서에서 제품번호-제품명-세부구분 이런 식으로 순서가 변경될 때가 가끔 있어서 배열로는 오입력을 내게 됩니다. 그렇다고 입력하는 분에게 순서를 다시 원래대로 변경해서 입력하라고 할 수도 없습니다.
그래서 각 항목 이름으로 변수를 만들고 텍스트박스 값을 그 변수에 집어넣어서 입력하도록 했습니다
Private Sub btn2_Click() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("DATA") Dim tblDATA As ListObject Set tblDATA = sh.ListObjects("DATA") Dim 날짜, 입출, 업무번호, 업체, 제품명, 제품번호, 제품단가, 세부구분, 제조원가, 입고가격, 출고가격, 입고날짜, 보관장소, 담당부서, 제품수량 With 입력 날짜 = .TextBox1.Value 입출 = .TextBox2.Value 업무번호 = .TextBox3.Value 업체 = .TextBox4.Value 제품명 = .TextBox5.Value 제품번호 = .TextBox6.Value 제품단가 = .TextBox7.Value 세부구분 = .TextBox8.Value 제조원가 = .TextBox9.Value 입고가격 = .TextBox10.Value 출고가격 = .TextBox11.Value 입고날짜 = .TextBox12.Value 보관장소 = .TextBox13.Value 담당부서 = .TextBox14.Value 제품수량 = .TextBox15.Value End With Dim newRow As Long newRow = tblDATA.ListRows.Count + 1 tblDATA.ListColumns("날짜").DataBodyRange(newRow, 1).Value = 날짜 tblDATA.ListColumns("입출").DataBodyRange(newRow, 1).Value = 입출 tblDATA.ListColumns("업무번호").DataBodyRange(newRow, 1).Value = 업무번호 tblDATA.ListColumns("업체").DataBodyRange(newRow, 1).Value = 업체 tblDATA.ListColumns("제품명").DataBodyRange(newRow, 1).Value = 제품명 tblDATA.ListColumns("제품번호").DataBodyRange(newRow, 1).Value = 제품번호 tblDATA.ListColumns("제품단가").DataBodyRange(newRow, 1).Value = 제품단가 tblDATA.ListColumns("세부구분").DataBodyRange(newRow, 1).Value = 세부구분 tblDATA.ListColumns("제조원가").DataBodyRange(newRow, 1).Value = 제조원가 tblDATA.ListColumns("입고가격").DataBodyRange(newRow, 1).Value = 입고가격 tblDATA.ListColumns("출고가격").DataBodyRange(newRow, 1).Value = 출고가격 tblDATA.ListColumns("입고날짜").DataBodyRange(newRow, 1).Value = 입고날짜 tblDATA.ListColumns("보관장소").DataBodyRange(newRow, 1).Value = 보관장소 tblDATA.ListColumns("담당부서").DataBodyRange(newRow, 1).Value = 담당부서 tblDATA.ListColumns("제품수량").DataBodyRange(newRow, 1).Value = 제품수량 End Sub
제가 드릴 질문은 여기서부터입니다. 각 항목의 이름으로 지정된 변수를 배열에 넣으려면 column index 에 매핑을 해야하는데 도통 방법을 모르겠습니다. 조언 부탁드립니다.
혹시나 제 삽질보다 훨씬 좋은 방법이 있으시면 다른 방법도 알려주시면 감사하겠습니다.
번호 | 카테고리 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚10만부 출간 기념] 「진짜쓰는 실무엑셀」 한정판 리커버 + 8시간 로드맵 특별 부록
![]() ![]() |
![]() ![]() |
07:19 | 7 | 322 | ||
공지사항 | 문서서식 |
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐
(197)
오빠두엑셀
|
2021.10.28
|
추천 280
|
조회 18655
|
![]() ![]() |
2021.10.28 | 280 | 18655 |
64744 | 기능/도구 |
New 찾기/바꾸기
![]() |
![]() |
20:56 | - | 11 |
64741 | VBA |
New vba 사용자 입력값으로 trim 비율 설정이 불가한가요?
![]() ![]() ![]() |
![]() |
18:36 | - | 15 |
64737 | VBA |
New 평균을 역산하여 질문당 평가점수를 배점하는 문제
![]() ![]() ![]() |
![]() |
17:08 | - | 18 |
64733 | 차트/그래프 |
New 엑셀 그래프 축 문의
![]() ![]() |
![]() |
13:49 | - | 25 |
64732 | 함수/공식 |
New IF 다중조건 질문드립니다!!
![]() ![]() |
![]() |
13:49 | - | 22 |
64723 | 차트/그래프 |
New 월별 형식에 따른 오름차순 차이
![]() ![]() ![]() |
![]() |
01:31 | - | 29 |
64722 | 파워쿼리/피벗 |
New 피벗내 전년도대비 성장률 표기를 전체매출 내림차순으로 정렬하
![]() ![]() ![]() |
![]() |
01:14 | - | 23 |
64720 | 함수/공식 |
New 다중조건을 만족하는 값 가져오는 방법
![]() ![]() ![]() |
![]() |
2023.12.08 | - | 36 |
64718 | 함수/공식 |
New 엑셀 시트명 가져오기 함수 오류
(1)
![]() |
![]() |
2023.12.08 | - | 28 |
64714 | 함수/공식 |
New 특정 문자만 추출하는 방법
![]() ![]() |
![]() |
2023.12.08 | - | 38 |
64713 | 문서서식 |
New 파이썬이 기본탭에 안보입니다 추가하는 방법이 없을까요?
![]() ![]() |
![]() |
2023.12.08 | - | 28 |
64711 | 함수/공식 |
New 엑셀 함수 내용이 길어서 설정된칸이 다 가려집니다 ㅠㅠ
![]() ![]() |
![]() |
2023.12.08 | 1 | 29 |
64701 | 함수/공식 |
New 엑셀 함수 문의_숫자 자리수(5자리로 통일) 바꾸기 (근태자료 시간 형식 변경)
![]() ![]() |
![]() |
2023.12.08 | - | 32 |
64695 |
New 시작 날짜시간 / 끝 날짜 시간입력 받아 그 시간대의 데이터만 남기고 나머지는 삭제하는 VBA
![]() ![]() ![]() |
![]() |
2023.12.08 | - | 31 | |
64691 | 기능/도구 |
New 오류 표시는 설정 하는게 낫나요?
(1)
![]() |
![]() |
2023.12.08 | - | 23 |
64689 | 함수/공식 |
New 간단한 질문하나 드립니다ㅠㅠ
(1)
![]() |
![]() |
2023.12.08 | - | 33 |
64688 | 기능/도구 |
New 빠른실행도구 설정관련 문의 드려요!!
![]() ![]() |
![]() |
2023.12.08 | - | 33 |
64684 | 파워쿼리/피벗 |
New 쿼리결합으로 만든 테이블에 추가한 열이 새로고침 할 때마다 계속 바뀝니다.
(1)
![]() |
![]() |
2023.12.08 | - | 28 |
64682 | 함수/공식 |
New 너무 어려워요 ㅠㅠ날짜와 시각(콜론, 기호 구분 없이 숫자 4자리만 적혀있는,,,)으로 총 소요된 시간(분)을 구하고 싶습니다.
![]() ![]() |
![]() |
2023.12.08 | - | 33 |
64678 | 문서서식 |
New 특수문자(기호)입력 후 띄어쓰기 시 기호 바로 뒤에 생기는 동그라미를 없앨 수는 없을까요???
![]() ![]() |
![]() |
2023.12.08 | - | 26 |
64675 | VBA |
New 엑셀에서 메일 보낼때 서명란과 본문이 섞이는 문제..
(2)
![]() |
![]() |
2023.12.08 | - | 39 |
64672 | 문서서식 |
New 시트를 복사한 후, 모든 조건이 같은데도 인쇄 미리보기창이 길쭉해지는 문제
![]() ![]() |
![]() |
2023.12.08 | 1 | 44 |
64669 | 함수/공식 |
New 나눠진 셀을 하나의 셀 안에 취합하는 방법
![]() ![]() ![]() |
![]() |
2023.12.07 | - | 54 |
64666 | 함수/공식 |
New 중복값중 2번째 이후부터 나오는 값을 따로 추출하고 싶습니다
![]() ![]() |
![]() |
2023.12.07 | - | 30 |
64662 | 기능/도구 |
New 강의내용 엑셀 찾기 및 바꾸기
(1)
![]() |
![]() |
2023.12.07 | - | 49 |
64661 | 함수/공식 |
New 바로 위 숫자랑 비교해서 조건부서식 색칠하는 방법 질문입니다
![]() ![]() |
![]() |
2023.12.07 | - | 55 |
64658 | 함수/공식 |
New 2개회사 가입금액대비 보험료 월계산
![]() ![]() |
![]() |
2023.12.07 | - | 52 |
64654 | 함수/공식 |
New 날자별 집계하고 싶은데 ㅠㅠ 날자 부분이 달라서 값이 안나와요 도와주세요!!
![]() ![]() |
![]() |
2023.12.07 | - | 62 |
64653 | 함수/공식 |
New 연관된 상품들을 각 열에 정리하기
![]() ![]() |
![]() |
2023.12.07 | - | 49 |
64650 | 함수/공식 |
New 요일별 이용자 평균값을 구하고 싶어요
(2)
![]() |
![]() |
2023.12.07 | - | 43 |
@saechang 님
오빠두 엑셀님이 공유해 주시는 사용자 정의 함수 이용해 보세요. 작성하기 편하실 겁니다.