【问题标题】:How to find values that fall between two dates?如何找到两个日期之间的值?
【发布时间】:2020-03-02 19:59:09
【问题描述】:

我有一个“我正在尝试查找的值”、我的“数据”以及它们所属的日期范围的键。

如何创建一个函数或 VBA 工具来查找与“我正在尝试查找的值”匹配的值以及两个日期之间的值?

我还想用逗号分隔输出,因为可以根据日期范围从键匹配多个值。

我尝试了一个 INDEX 函数(我认为我输入了错误的引用):

=INDEX($I$3:$I$18,MATCH($I$3:$I$18,K2:L2351,IF(E2>=K$2:K$2351,IF(F2<=K$2:K$2351,IF(Value=K$2:K$2351,1))),0))

我是 excel 初学者,任何帮助将不胜感激。

我在另一个论坛上看到了这个 vba,但它没有包含 match/vlookup 功能。

    Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby20150824
    Dim I As Long
    Dim xRet As String
    For I = 1 To LookupRange.Columns(1).Cells.Count
        If LookupRange.Cells(I, 1) = LookupValue Then
            If xRet = "" Then
                xRet = LookupRange.Cells(I, ColumnNumber) & Char
            Else
                xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
            End If
        End If
    Next
    SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function

【问题讨论】:

  • 您要在 G 列中返回什么值?
  • 抱歉延迟回复。我试图只用我的关键列 I 中的代码填充 G,但出现在日期范围列 E 和 F 中。这些代码/日期的来源是列 K 和 L。
  • 所以这个函数可以工作,但是我怎样才能将匹配函数合并到这个函数中,以便它只显示我的键中的值? =INDEX(P$3:P$2351,SMALL(IF($O$3:$O$2351>=$J$1,IF($O$3:$O$2351

标签: excel vba indexing match vlookup


【解决方案1】:

终于弄明白了,代码如下:

    Sub Populate_Data()


ActiveSheet.Range("$A$1:$AE$2350").AutoFilter Field:=13, Criteria1:=Array( _
        "S48", "SX3", "P49", "S25", "P28", "T50", "TBF", "TB5"), Operator:=xlFilterValues
    ActiveSheet.Range("$A$1:$AE$2350").AutoFilter Field:=10, Operator:= _
        xlFilterValues, Criteria2:=Array(0, "1/3/2020", 0, "12/31/2019")

Range("J:J,M:M,T:T").SpecialCells(xlCellTypeVisible).Copy

curName = ActiveSheet.Name

updatedsheet = curName + " 2019-2020"

ThisWorkbook.Sheets.Add

ActiveSheet.Name = updatedsheet

Range("B1").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False

ActiveSheet.Range("A2:A100" & var1a).Formula = _
Replace("=B2-DAY(B2)+1{SOME_VAR}", "{SOME_VAR}", var1a)


ActiveSheet.Range("G1" & var1a).Formula = _
Replace("1/1/2019{SOME_VAR}", "{SOME_VAR}", var1a)


With Range("G1")
.AutoFill Destination:=Range("G1:G13"), Type:=xlFillMonths

End With


Range("H1").FormulaArray = "=TEXTJOIN("","",TRUE,IF($A$1:$A$53=G1,$C$1:$D$53,""""))"
Range("H1:H13").FillDown

ActiveSheet.Range("I1" & var1a).Formula = _
Replace("=SUMIFS($D$2:$D$5,$A$2:$A$5,""=""&G1){SOME_VAR}", "{SOME_VAR}", var1a)

Range("I1:I13").FillDown

Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多