【问题标题】:VLOOKUP formula and/or VBA code to automaticall search files named by dateVLOOKUP 公式和/或 VBA 代码自动搜索按日期命名的文件
【发布时间】:2015-02-25 21:40:45
【问题描述】:

我使用 Excel 2013 提交每周报告,其中文件名包含当前日期作为其名称的一部分。例如,“02.16.15 负载板”。我正在尝试创建一个 VLOOKUP 公式,该公式将自动比较本周文件和前一周文件之间的任务到期日期。我上次使用的公式示例是:

=+VLOOKUP(B560,'[02.09.15 Load Board.xlsm]Master Sheet'!$B$4:$P$953,6,FALSE)。

比较“02.16.15 加载板”和“02.09.15 加载板”的任务到期日期差异。

这很好用。但是是否有 VLOOPUP 公式或 VBA 代码可以根据报告日期的名称自动执行此操作?是否可以在报告名称中减去 7 天以自动选择 7 天前的报告?谢谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我假设您知道如何插入文件名。然后,此片段会将您的数据转换为实际日期,这些日期又可用于创建前一周的实际文件名(无论月份或年份如何变化)。
    附: “ww”代表弱者。
    附言smartass 免责声明:仅适用于 2000 年 1 月 8 日至 2 月 31 日,9 099。

    Sub ert()
    Dim wbname As String
    'wbname = InputBox("What is the name of the report file?") '"02.16.15 Load Board.xlsm"
    wbyear = CLng(2000 + Mid(wbname, 7, 2))
    wbmonth = CLng(Left(wbname, 2))
    wbday = CLng(Mid(wbname, 4, 2))
    
    datemod = DateValue(wbday & "/" & wbmonth & "/" & wbyear)
    datemod = DateAdd("d", -7, datemod)
    
    wbyear = Right(CStr(DatePart("yyyy", datemod)), 2)
        If Len(wbyear) < 2 Then wbyear = "0" & wbyear
    wbmonth = DatePart("m", datemod)
        If Len(wbmonth) < 2 Then wbmonth = "0" & wbmonth
    wbday = DatePart("d", datemod)
        If Len(wbday) < 2 Then wbday = "0" & wbday
    x = wbmonth & "." & wbday & "." & wbyear & Right(wbname, Len(wbname) - 8)
    'MsgBox (x)
    End Sub
    

    【讨论】:

    • 关于插入文件名,你的意思是在输入框中,对吗?使用输入框是个好主意。谢谢!我不确定“x”是什么。抱歉,我对这一切还是很陌生。
    • 顺便说一句,我没有提到这段代码很棒!
    • 它基于一个通用的解决方案,你也可以使用 wbname = ActiveWorkbook.Name
    • x 可能是 wbname2,它是输出名称
    • 这太棒了!非常感谢。我唯一的最后一个问题是我不需要实际创建前一周的文件。我需要访问/打开已在同一文件夹中创建的内容。然后我需要执行 VLOOKUP 或其他操作来比较两个文件的截止日期列,以确保后一个文件中的日期没有从前一个文件更改。到目前为止你所拥有的太棒了!谢谢你,感谢你帮助解决最后一个问题。
    【解决方案2】:
    Sub ert()
    Dim wbname As String
    wbname = InputBox("What is the name of the outdated report file?") '"02.16.15 Load Board.xlsm"
    wbyear = CLng(2000 + Mid(wbname, 7, 2))
    wbmonth = CLng(Left(wbname, 2))
    wbday = CLng(Mid(wbname, 4, 2))
    
    datemod = DateValue(wbday & "/" & wbmonth & "/" & wbyear)
    datemod = DateAdd("d", +7, datemod)
    
    wbyear = Right(CStr(DatePart("yyyy", datemod)), 2)
        If Len(wbyear) < 2 Then wbyear = "0" & wbyear
    wbmonth = DatePart("m", datemod)
        If Len(wbmonth) < 2 Then wbmonth = "0" & wbmonth
    wbday = DatePart("d", datemod)
        If Len(wbday) < 2 Then wbday = "0" & wbday
    x = wbmonth & "." & wbday & "." & wbyear & Right(wbname, Len(wbname) - 8)
    ActiveSheet.Cells.Replace What:="" & wbname & "", Replacement:="" & x & "", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    End Sub
    

    【讨论】:

    • VLOOKUP 公式放置怎么样 - 抱歉,我的意思是问。
    • 这应该可以正常工作。确保新公式将引用的工作簿是 open 并且这应该可以解决问题。 wbname 没有扩展名,就像它在你的公式中一样(你想替换它)。在这种情况下,它是 02.09.15 负载板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多