Variant 변수에 날짜데이타를 넣을 때
VBA
작성자
saechang
작성일
2023-11-05 22:57
조회
202
Variant 변수에 날짜데이타를 넣을 때 #2023-11-01# 이런 형식으로 저장이 됩니다.
그런데 알고보니 저게 윈도우에서 설정된 기본 날짜 형식이더군요.
즉 윈도우에서 날짜 표시 형식을 바꾸면 저것도 바뀐다는 말입니다.
기본날짜형식을 yyyy-mm-dd-ddd 로 세팅해놓으면 #2023-11-01-수# 이렇게 저장이 됩니다.
저렇게 세팅해놓은 컴퓨터에서 자꾸 이상 동작이 발생해서 일주일 동안 끙끙대다가 조금 전에 알아냈습니다.
제 컴퓨터에서는 이상 없이 동작되는지라 환장하겠더군요.
안되는 컴퓨터를 가져와서 (민감한 자료 때문에 복잡한 일이 많았습니다.) 제 컴퓨터랑 나란히 놓고 뭐가 다른가 비교해보다가 알아냈습니다.
그 부분이 join 과 split 을 쓰는 부분이라 날짜데이타가 string 으로 저장되는 바람에 오작동이 생긴 겁니다.
일단 임시방편으로 left 함수를 써서 수정을 해놓긴 했지만 말 그대로 임시방편일 뿐.
질문 : 윈도우 날짜형식에 상관없이 날짜데이타를 변수에 입력할 때 저장 형식을 지정할 수 있을까요?
#2023-11-01# 이런 형식으로 저장되는 것을 상정하고 VBA를 작성했기 때문에 표시형식이 다른 컴퓨터에서는 오작동이 생깁니다.
format 함수로는 안되더군요.
답변 부탁드립니다.
전체 13,331
번호 | 카테고리 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (236)
![]() ![]() |
![]() ![]() |
2022.02.03 | 514 | 260122 | ||
공지사항 | 문서서식 |
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐
(197)
오빠두엑셀
|
2021.10.28
|
추천 280
|
조회 17878
|
![]() ![]() |
2021.10.28 | 280 | 17878 |
64437 | 함수/공식 |
New [다중조건 index large row] 함수가 적용이 안되네요
![]() ![]() ![]() |
![]() |
11:53 | - | 11 |
64433 | VBA |
New 셀레니움 세부 내용 가져오는 방법
![]() |
![]() |
10:26 | - | 10 |
64432 | 함수/공식 |
New Min if 함수 오류 해결 부탁드립니다.
![]() ![]() |
![]() |
09:50 | - | 17 |
64429 | 함수/공식 |
New [해결방법문의] 여러시트에서 이름에따른 금액을 검색하고 싶습니다.
![]() ![]() |
![]() |
03:10 | - | 26 |
64427 | 차트/그래프 |
New 막대그래프의 선을 따서 반전시키는 방법 문의
![]() ![]() ![]() |
![]() |
01:36 | - | 17 |
64423 | 함수/공식 |
New 이름,주소 월 별로 비교해서 변경사항 있으면 IF 중첩함수로 추출하는 방법
![]() ![]() |
![]() |
2023.12.01 | - | 31 |
64420 | 기능/도구 |
New ㅠㅠㅠㅠㅠ.... 어제부터 몇시간째 못풀고 있습니다.. 나열되어 있는표 교차행(?)으로 만드는법
![]() ![]() |
![]() |
2023.12.01 | - | 39 |
64417 |
New 달 바뀌면 자동으로 적용되는 서식궁금합니다.
![]() ![]() ![]() |
![]() |
2023.12.01 | - | 40 | |
64415 |
New 거래명부에서 가져온 정보로 거래명세서 자동채우기. 같은날 다수거래처, 다수품목 일때 오류 관련
![]() ![]() |
![]() |
2023.12.01 | - | 37 | |
64414 | 함수/공식 |
New 연차현황 관련
![]() ![]() |
![]() |
2023.12.01 | - | 43 |
64411 | 함수/공식 |
New 가장 가까운 좌표 리스트업
![]() ![]() ![]() |
![]() |
2023.12.01 | - | 40 |
64410 | VBA |
New 앞 단어의 받침 유무에 따라 잘못 사용된 (을/를) 검사 매크로 만들기 질문
![]() ![]() |
![]() |
2023.12.01 | - | 38 |
64405 | 함수/공식 |
New 한 좌표값(a,b)이랑 가장 가까운 좌표값 찾기
(4)
![]() |
![]() |
2023.12.01 | - | 39 |
64404 | 함수/공식 |
New 구매리스트 관련문의 (VLOOKUP 중복 건너뛰고 표기하기)
![]() ![]() |
![]() |
2023.12.01 | - | 43 |
64396 | 함수/공식 |
New 표준편차 계산시 특정월의 데이터만 계산하고 싶습니다(X방향)
![]() ![]() ![]() |
![]() |
2023.12.01 | - | 38 |
64393 | 함수/공식 |
New 엑셀 함수 값 관련 질문
(2)
![]() |
![]() |
2023.12.01 | - | 36 |
64387 | VBA |
New 아실 크롤링 관련 문의
(1)
![]() |
![]() |
2023.11.30 | - | 42 |
64384 | VBA |
New VBA PivotItem 문의
(1)
![]() |
![]() |
2023.11.30 | - | 43 |
64382 | 파워쿼리/피벗 |
New [파워쿼리] 쿼리안에서 구분기호 기준으로 열분할을 하고 난 후, 아래로 채우기가 안됩니다.!!
(6)
답변완료
![]() |
![]() |
2023.11.30 | - | 50 |
64381 | 함수/공식 |
New row()가 자동으로 변경될 수 있도록....
![]() ![]() |
![]() |
2023.11.30 | - | 47 |
64377 | 피벗테이블 |
New 엑셀 피벗 행/열 비율 산출 질문
(2)
![]() |
![]() |
2023.11.30 | - | 33 |
64376 | VBA |
New 견적서 내용을 리스트업 하는 VBA
![]() ![]() ![]() |
![]() |
2023.11.30 | - | 44 |
64371 | 구글시트 |
New 두 개 시트 연동
(4)
답변완료
![]() |
![]() |
2023.11.30 | - | 48 |
64370 | 함수/공식 |
New 모든시트를 선택하는 함수가 있을까요?ㅠㅠ
(2)
![]() |
![]() |
2023.11.30 | - | 61 |
64367 | VBA |
New 특정셀에 여러 변수 값을 대입하여 나오는 계산 값을 변수에 맞게 한번에 출력되게 하는 방법이 있을까요??
![]() ![]() ![]() |
![]() |
2023.11.30 | - | 46 |
64366 | 문서서식 |
New 전체인쇄와 시트1개 인쇄시 이미지 품질 저하문제
![]() ![]() |
![]() |
2023.11.30 | - | 31 |
64360 | 함수/공식 |
New 각 열의 텍스트를 비교하여 일치율에 따라 관련열 값 가져오기
![]() ![]() |
![]() |
2023.11.30 | - | 43 |
64359 | 구글시트 |
New 엑셀 또는 구글시트 - 다른시트 데이터의 새로운값만 순차적으로 가져오는방법..
(3)
![]() |
![]() |
2023.11.30 | - | 37 |
64355 | 함수/공식 |
New sumifs 문의 드립니다.
(2)
답변완료
![]() |
![]() |
2023.11.30 | - | 43 |
64353 | 함수/공식 |
New 엑셀 수식이 안 먹어요~
![]() ![]() |
![]() |
2023.11.30 | - | 60 |
@saechang 님 로캘 설정과 상관없이 Format함수는 정상적으로 사용됩니다.

@saechang 님 cdate 나 cdbl로 형식을 통일시키는걸 고려해보십시오
두 분 모두 감사하지만 제가 원하는 바는 아니로군요.
제가 원하는 건 변수에 yyyy-mm-dd 형식으로 저장되는 거였습니다.
올려주신 화면에서도 지역창에 보면 변수에 요일까지 포함되어 있고요.
제가 만든 함수가 표에서 여러 항목을 배열로 받아서 그 해당 항목의 내용을 join 하여 처리한 후
다시 split 해서 배열로 다른 함수에 반환하는 로직입니다.
예를 들면 표에서 날짜, 업체, 제품, 코드, 이렇게 4개를 선택하면 그 4개 항목을 join 해서
"2023-10-31 | 삼성제과 | 밀가루 | XXX-Powder" 이렇게 문자열로 만들어서 처리하는 거죠.
그리고 선택 항목은 언제든지 순서와 항목이 변경될 수 있습니다. 날짜가 안 들어갈 수도 있고요.
항목의 갯수가 많고 데이타형도 다 다르기 때문에 일부러 몽땅 string 으로 처리하는 겁니다.
그런데 날짜항목만 예외처리를 할 수가 없는 구조입니다.
할 수는 있지만 코드가 지저분해지고 그럼 애초에 이 함수를 만들 이유가 없어지게 되거든요.
일단 다시 한번 차근차근 생각해봐야겠습니다.
다시 한번 두 분께 감사드립니다.
해결했습니다.
cells 로 받는게 아니라 cells.text 로 받으면 되는 문제였습니다.
표의 날짜 항목을 yyyy-mm-dd 형식으로 해야 하지만 그 정도는 양해할 수 있는 문제입니다.
일주일 동안 머리 싸맨 것이 5분만에 해결되어 버렸네요. 분명히 기뻐해야 하는데 오히려 허무합니다. 내 일주일~~ (-_-)
기본기가 중요하다는 것을 다시 한 번 절감했습니다. (후~~)
@saechang 님 Cells.Text를 사용할 경우 주의가 필요합니다.
날짜 형식인데 셀 너비가 작아서 ###로 표시될 경우 해당 셀의 Cells.Text는 "###"가 되어 버립니다.
JOIN을 할 때, 자료를 어떻게 받아서 사용하는지 궁금하네요...
@원조백수 님 그런 문제가 있었군요. 몰랐습니다.
함수 실행 전에 columns.autofit 을 넣었습니다. 그럼 문제 없을 듯하네요.
함수는 별거 없습니다. 고유값을 추출하는 함수입니다.
고급필터나 중복제거를 쓰면 간단한데 이건 일단 시트에 뿌린 다음에 처리해야 하고
if 처리가 안되는 것 같더군요. (제가 잘 몰라서 그러겠지만...)
특정 날짜나 특정 조건을 만족하는 것 등...
게다가 고유값 추출 항목이 일정하지 않습니다.
날짜만, 혹은 날짜, 제품, 혹은 제품, 업체, 날짜, 제품패키지... 이런 식으로 항목 숫자랑 순서가 바뀌다보니
좀 범용적인 함수가 필요해서요. 쉬운 방법이 있는데 제가 몰라서 그런지...
그래서 항목마다 and 조건을 걸려니 답이 없어서 선택된 항목 값을 모두 join 해서 1차원배열로 만들어
중복검사를 처리한 후 다시 split 해서 반환합니다. 그 와중에 오작동이 난 거구요
아뭏든 다시 한번 감사드립니다.
@원조백수 님
제가 짠 코드입니다. 많이 어설픈데 한 번 보시고 개선할 점이 있는지 좀 봐주시면 감사하겠습니다.
@원조백수 님 마지막 부분이 수정 전의 코드가 올라갔군요.
@saechang 님 데이터 한 행을 JOIN으로 연결하여 고유값을 확인하신다면,
Dictionary에 넣어 두고, oDict.Exists(sKey) 처럼 중복을 확인하는 것이 좋을 듯 합니다.