db 배열안에 날자 데이터가 포함되어 있는데 바로 전에 가장 가까운 날자를 선택할수 있을까요?

VBA
작성자
후훗
작성일
2022-11-25 15:10
조회
79
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

안녕하세요

액셀 재고관리 툴 만들기 8시간 풀동영상 보면서 만들고
제가 원하는 기능이 있어서 바꿔보고 있습니다.

밑에 사진 보시면 db에 4번째 값이 날자 값입니다.
오늘이 11.25일이면 저 db 값중에서 바로 전 가장 가까운 날자를 필터링해서 빨간 네모의 값을 얻고 싶은데
아무리 짱구를 굴려봐도 답이 안나오네요

도움 부탁드립니다. ㅜㅜ

 

 

혹시 몰라 강좌에서 쓰인 get_db 함수하고 riltered_db 함수 밑에 포함합니다.

'########################
' 특정 시트의 DB 정보를 배열로 반환 (이번 예제파일에서만 사용)
' Array = Get_DB(Sheet1)
'########################
Function Get_DB(ws As Worksheet, Optional NoID As Boolean = False, Optional IncludeHeader As Boolean = False) As Variant

Dim cRow As Long
Dim cCol As Long
Dim offCol As Long

If NoID = False Then offCol = -1

With ws
cRow = Get_InsertRow(ws) - 1
cCol = Get_ColumnCnt(ws, offCol)
Get_DB = .Range(.Cells(2 + Sgn(IncludeHeader), 1), .Cells(cRow, cCol))
End With

End Function

==================================================================

'########################
' 특정 배열에서 Value를 포함하는 레코드만 찾아 다시 배열로 반환
' Array = Filtered_DB(Array, "검색값", False)
'########################
Function Filtered_DB(db, Value, Optional FilterCol, Optional ExactMatch As Boolean = False) As Variant

Dim cRow As Long
Dim cCol As Long
Dim varr As Variant: Dim s As String: Dim filterArr As Variant: Dim Cols As Variant: Dim Col As Variant: Dim Colcnt As Long
Dim isDateVal As Boolean
Dim vReturn As Variant: Dim vResult As Variant
Dim Dict As Object: Dim dictKey As Variant
Dim i As Long: Dim j As Long
Dim Operator As String

Set Dict = CreateObject("Scripting.Dictionary")

If Value <> "" Then
cRow = UBound(db, 1)
cCol = UBound(db, 2)
ReDim varr(1 To cRow)
For i = 1 To cRow
s = ""
For j = 1 To cCol
s = s & db(i, j) & "|^"
Next
varr(i) = s
Next

If IsMissing(FilterCol) Then
filterArr = varr
Else
Cols = Split(FilterCol, ",")
ReDim filterArr(1 To cRow)
For i = 1 To cRow
s = ""
For Each Col In Cols
s = s & db(i, Trim(Col)) & "|^"
Next
filterArr(i) = s
Next
End If

If left(Value, 2) = ">=" Or left(Value, 2) = "<=" Or left(Value, 2) = "=>" Or left(Value, 2) = "=<" Then
Operator = left(Value, 2)
If IsDate(Right(Value, Len(Value) - 2)) Then isDateVal = True
ElseIf left(Value, 1) = ">" Or left(Value, 1) = "<" Then
Operator = left(Value, 1)
If IsDate(Right(Value, Len(Value) - 1)) Then isDateVal = True
Else: End If

If Operator <> "" Then
If isDateVal = False Then
Select Case Operator
Case ">"
For i = 1 To cRow
If CDbl(left(filterArr(i), Len(filterArr(i)) - 2)) > CDbl(Right(Value, Len(Value) - 1)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case "<"
For i = 1 To cRow
If CDbl(left(filterArr(i), Len(filterArr(i)) - 2)) < CDbl(Right(Value, Len(Value) - 1)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case ">=", "=>"
For i = 1 To cRow
If CDbl(left(filterArr(i), Len(filterArr(i)) - 2)) >= CDbl(Right(Value, Len(Value) - 2)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case "<=", "=<"
For i = 1 To cRow
If CDbl(left(filterArr(i), Len(filterArr(i)) - 2)) <= CDbl(Right(Value, Len(Value) - 2)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
End Select
Else
Select Case Operator
Case ">"
For i = 1 To cRow
If CDate(left(filterArr(i), Len(filterArr(i)) - 2)) > CDate(Right(Value, Len(Value) - 1)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case "<"
For i = 1 To cRow
If CDate(left(filterArr(i), Len(filterArr(i)) - 2)) < CDate(Right(Value, Len(Value) - 1)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case ">=", "=>"
For i = 1 To cRow
If CDate(left(filterArr(i), Len(filterArr(i)) - 2)) >= CDate(Right(Value, Len(Value) - 2)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
Case "<=", "=<"
For i = 1 To cRow
If CDate(left(filterArr(i), Len(filterArr(i)) - 2)) <= CDate(Right(Value, Len(Value) - 2)) Then: varr(i) = left(varr(i), Len(varr(i)) - 2): vReturn = Split(varr(i), "|^"): Dict.Add i, vReturn
Next
End Select
End If
Else
If ExactMatch = False Then
For i = 1 To cRow
If filterArr(i) Like "*" & Value & "*" Then
varr(i) = left(varr(i), Len(varr(i)) - 2)
vReturn = Split(varr(i), "|^")
Dict.Add i, vReturn
End If
Next
Else
For i = 1 To cRow
If filterArr(i) Like Value & "|^" Then
varr(i) = left(varr(i), Len(varr(i)) - 2)
vReturn = Split(varr(i), "|^")
Dict.Add i, vReturn
End If
Next
End If
End If

If Dict.Count > 0 Then
ReDim vResult(1 To Dict.Count, 1 To cCol)
i = 1
For Each dictKey In Dict.Keys
For j = 1 To cCol
vResult(i, j) = Dict(dictKey)(j - 1)
Next
i = i + 1
Next
End If

Filtered_DB = vResult
Else
Filtered_DB = db
End If

End Function

스크랩
공유
회원등급 : 2레벨
포인트 : 55 EP
총질문 : 1 개 (마감율 : 0%)
채택답변 : 0 개
전체 0

전체 9,312
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[🔥선착순 판매] 2023년 엑셀 공부, "8시간 로드맵"으로 마스터하세요! (6)
오빠두엑셀 | 2023.01.25 | 추천 6 | 조회 2084
오빠두엑셀 2023.01.25 6 2084
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (122)
오빠두엑셀 | 2021.10.28 | 추천 155 | 조회 9704
오빠두엑셀 2021.10.28 155 9704
48417 함수/공식
New 텍스트 결합 문의 및 데이터 표로 만들기 문의 엑셀파일첨부파일
사랑찾기 | 20:33 | 추천 0 | 조회 6
사랑찾기 20:33 - 6
48414 함수/공식
New 세로순서 검색 방법문의 첨부파일
작은소녀 | 19:20 | 추천 0 | 조회 10
작은소녀 19:20 - 10
48395 피벗테이블
New 누적 데이터를 피벗 테이블로 표시할 때 그 피봇 테이블 자체에 함수를 적용 할 수 있나요??
딜레마 | 08:07 | 추천 0 | 조회 35
딜레마 08:07 - 35
48388 VBA
New 특정한 폴더의 특정셀값만 불러올 수 있을까요? 엑셀파일 (1)
wwg | 01:17 | 추천 0 | 조회 34
wwg 01:17 - 34
48379 함수/공식
New 같은 수식으로 여러 시트에 있는 자료를 VLOOKUP으로 끌고 올 수 있을까요? 엑셀파일 (2) 답변완료
redp**** | 2023.01.28 | 추천 0 | 조회 33
redp**** 2023.01.28 - 33
48367 피벗테이블
New 피벗테이블 새로고침시 행높이 자동바뀜 현상 질문드립니다. 엑셀파일첨부파일 (4)
월마리아 | 2023.01.28 | 추천 0 | 조회 32
월마리아 2023.01.28 - 32
48354 함수/공식
New 붙여 넣기 또는 자동채우기 작업 중 리소스 부족 에러
낑깡 | 2023.01.28 | 추천 0 | 조회 24
낑깡 2023.01.28 - 24
48351 함수/공식
New 2개 이상의 조건이 부합 시 결제일별로 순번을 매기고 싶어요. 엑셀파일첨부파일 (2) 답변완료
단팥 | 2023.01.28 | 추천 0 | 조회 41
단팥 2023.01.28 - 41
48333 문서서식
New 강의 자료 다운로드시 한셀로 열립니다. (2)
나 공부 | 2023.01.28 | 추천 0 | 조회 49
나 공부 2023.01.28 - 49
48292 함수/공식
New 글자수 (byte) 자르기 질문입니다. (1)
스타몰 | 2023.01.27 | 추천 0 | 조회 31
스타몰 2023.01.27 - 31
48284 함수/공식
New 초보적인 질문이라고 생각합니다만 도움 부탁드러요 엑셀파일첨부파일 (3)
오동 | 2023.01.27 | 추천 0 | 조회 47
오동 2023.01.27 - 47
48280 함수/공식
New countif 사용하면서, 배열 중 하나와 일치하면 카운트하는 방법은 없을까요? (1)
호호홋 | 2023.01.27 | 추천 0 | 조회 39
호호홋 2023.01.27 - 39
48278 문서서식
New 출장보고서 데이터 취합 및 분석을 위한 양식 문의건 엑셀파일첨부파일 (1)
아빠의꿈 | 2023.01.27 | 추천 0 | 조회 35
아빠의꿈 2023.01.27 - 35
48276 VBA
New 워드 (docx) 파일을 형식 그대로 엑셀로 변환이 가능할까요?
야너두엑셀할수있어 | 2023.01.27 | 추천 0 | 조회 31
야너두엑셀할수있어 2023.01.27 - 31
48272 함수/공식
New 서버에 있는 엑셀파일 참조 오류 (3)
매너겜 | 2023.01.27 | 추천 0 | 조회 37
매너겜 2023.01.27 - 37
48267 VBA
New 실시간 데이터 값이 같을때 그 값을 어떻게 기록하나요? 엑셀파일첨부파일 (7) 답변완료
나민준 | 2023.01.27 | 추천 0 | 조회 61
나민준 2023.01.27 - 61
48257 대시보드
New 대시보드) 타임라인 생성 후, 연도/월/일로 자유롭게 보고 싶은데 그렇게 하다보면 그래프가 잘 안떠요.
헤일리 | 2023.01.27 | 추천 0 | 조회 46
헤일리 2023.01.27 - 46
48253 함수/공식
New 2칸 건너서 총 합계 구하는 방법 엑셀파일 (2) 답변완료
유령회원 | 2023.01.27 | 추천 0 | 조회 57
유령회원 2023.01.27 - 57
48249 함수/공식
New 이름에 맞춰 자동 조건에 맞는 텍스트가 써질 수 있게 하는 방법 문의 엑셀파일첨부파일 (1) 답변완료
노랑 | 2023.01.27 | 추천 0 | 조회 55
노랑 2023.01.27 - 55
48248 VBA
New vba 리스트박스 다중선택값을 column별로 각각의 텍스트박스로 받기. 엑셀파일 (1) 답변완료
119구조대 | 2023.01.27 | 추천 0 | 조회 36
119구조대 2023.01.27 - 36
48247 함수/공식
New 평가 점수 관련 수식이 어렵습니다 도움부탁드립니다 ! 첨부파일 (1)
쫑월드 | 2023.01.27 | 추천 0 | 조회 37
쫑월드 2023.01.27 - 37
48245 함수/공식
New 정렬 관련 해결방법 (1)
oOo | 2023.01.27 | 추천 0 | 조회 40
oOo 2023.01.27 - 40
48243 함수/공식
New sum함수 뒤에 이어서 붙이라는데 모르겠어요. 엑셀파일 (4)
jhti**** | 2023.01.27 | 추천 0 | 조회 42
jhti**** 2023.01.27 - 42
48242 차트/그래프
New 차트 값이 없을때 데이터레이블 없애는법 첨부파일
실무자 | 2023.01.27 | 추천 0 | 조회 28
실무자 2023.01.27 - 28
48239 차트/그래프
New 간트차트에서 오차막대 서식 저장 문의
아닛호옹이 | 2023.01.27 | 추천 0 | 조회 35
아닛호옹이 2023.01.27 - 35
48233 VBA
New S로 시작하는 엑셀파일을 여는 VBA 명령문 첨부파일 (2) 답변완료
나지 | 2023.01.27 | 추천 0 | 조회 45
나지 2023.01.27 - 45
48231 기능/도구
New 크롤링 할때 로그인 필요한 URL (3) 답변완료
빌딩 | 2023.01.27 | 추천 0 | 조회 58
빌딩 2023.01.27 - 58
48228 함수/공식
New countifs 로 4개 조건검색하기 첨부파일 (2)
뉴질랜드산소 | 2023.01.27 | 추천 0 | 조회 60
뉴질랜드산소 2023.01.27 - 60
48222 함수/공식
New 중복된 값 제거 관련 문제(조건부 서식, 중복된 항목 제거 모두 안됩니다) 첨부파일 (4) 답변완료
oOo | 2023.01.27 | 추천 0 | 조회 53
oOo 2023.01.27 - 53
48220 기능/도구
New 원하는 갯수만큼 값 넣는 방법 (3)
꿀꿀 | 2023.01.27 | 추천 0 | 조회 55
꿀꿀 2023.01.27 - 55