【问题标题】:Vlookup Dates in Excel VBAExcel VBA中的Vlookup日期
【发布时间】:2015-04-27 20:26:31
【问题描述】:

我正在使用 3 张 Excel 表格。在 工作表起始页 我有 从 A4 列开始的日期 向下。宏 V 在工作表 Fund Trend 中查找位于列 A11 到 lastrow 中的相同日期并偏移 3 列,并将值复制到工作表 "Accrued从 Range("C7") 开始的费用"。宏循环直到 sheet("Start page") Range("A4") 中的最后一行。

问题是宏在某些情况下没有将值填充到应计费用表中。 它没有找到日期。我的代码如下:

Sub NetAsset_Value()
Dim result As Double
Dim Nav_Date As Worksheet
Dim fund_Trend As Worksheet
Dim lRow As Long
Dim i As Long

Set Nav_Date = Sheets("Start page")
Set fund_Trend = Sheets("Fund Trend")
lRow = Sheets("Start page").Cells(Rows.Count, 1).End(xlUp).row

 For i = 4 To lRow



result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False)

            Sheets("Accrued Expenses").Range("C" & i + 3).Value = result
             Sheets("Accrued Expenses").Range("C" & i + 3).NumberFormat = "0.00"
         Sheets("Accrued Expenses").Range("C" & i + 3).Style = "Comma"




    Next i

End Sub

错误陷阱:

On Error Resume Next

result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False)

        If Err.Number = 0 Then

            Sheets("Accrued Expenses").Range("C" & i + 3).Value = result
             Sheets("Accrued Expenses").Range("C" & i + 3).NumberFormat = "0.00"
         Sheets("Accrued Expenses").Range("C" & i + 3).Style = "Comma"
        End If


        On Error GoTo 0

为了解决日期问题,我有这个子不知道这是否有效?

Sub dates()
Sheets("Start page").Range("A4", "A50000").NumberFormat = "dd-mm-yyyy"
Sheets("Fund Trend").Range("A11", "A50000").NumberFormat = "dd-mm-yyyy"
End Sub

我现在遇到的问题是,当输入像 2015 年 11 月 2 日这样的日期时,它会切换到 2015 年 2 月 11 日。但它并非发生在所有日期

克服问题。我放置了一个工作表函数来强制日期列为文本。目前正在工作。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets("Start page").Range("A4", "A50000").NumberFormat = "@"
Sheets("Fund Trend").Range("A11", "A50000").NumberFormat = "@"
End Sub

【问题讨论】:

  • 这些日期是否有效,区域设置是否与列中的内容一致?
  • 您已经描述了两个不同的问题。一方面,你说它没有返回结果值——你调试过这个吗?在这些情况下,result 是什么?如果有错误,它应该使用WorksheetFunction 类适当地引发。如果找不到日期,那肯定是 1004 错误。您可以通过一些错误捕获来解决这个问题,但首先要查看@AnthonyHorne 的建议。
  • @AnthonyHome 宏运行时,它从外部系统获取数据。我一直在尝试将两张表中的日期标准化。
  • 它正在从 Excel 工作表中获取数据。现在,这可能是在较早的时间来自外部系统,但在运行时,它是 Excel 工作表的一部分(即使它是从外部源返回数据的公式 API),并且不是来自另一个系统。
  • @DavidZemens 我收到运行时错误 1004 - 无法获取工作表函数类的 vlookup 属性。但是我自己解决了这个错误陷阱。但没有价值。

标签: vba excel


【解决方案1】:

要避免 1004 错误,您可以使用 Application.VLookup 函数,该函数允许错误类型作为返回值。使用此方法测试是否有错误,如果没有错误,则返回结果。

为此,您必须Dim result as Variant,因为(在此示例中)我在result 中放置了一个文本/字符串值以帮助识别错误发生。

If IsError(Application.Vlookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False)) Then
    result = "date not found!"
Else
    result = Application.WorksheetFunction.VLookup(Nav_Date.Range("A" & i), fund_Trend.Range("A11:C1544"), 3, False)
End If

“工作表中没有打印结果”需要您进一步调试。对于任何给定的查找值,您是否已单步执行代码以确保 result 是您所期望的?如果没有错误,那么几乎肯定发生的是您输入的公式返回一个空字符串并且该值被放入单元格中。

【讨论】:

  • 没有返回错误。完美的。未找到数据的原因我认为其工作表中的日期类型不同。我需要想办法解决这个问题。
  • 但是当“没有错误返回”时你仍然需要调试result是什么,因为如果没有错误引发,那么日期 IS 找到,这表明如果您期望返回值,您的公式有问题。
  • 现在,日期也可能采用不同的格式,这可能会导致某些 1004/未找到错误,但这完全是另一个问题。如果结果是空字符串,则需要调试并找出为什么,因为那不是代码中的错误,这是您的逻辑中的错误,我没有数据示例将无法调试。
  • 我正在努力将两张表中的日期格式化为相同,并将其合并到我的代码中
  • 日期格式不同,我认为这绝对是我认为的问题。我正在尝试对其进行编码,在 vlookup 运行之前,两列的格式相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多