首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBA中的Vlookup日期

Excel VBA中的Vlookup日期
EN

Stack Overflow用户
提问于 2015-04-27 20:26:31
回答 1查看 1.8K关注 0票数 2

我正在使用3 excel sheets。在sheet Start Page中,从A4列开始的日期下降。从Range("C7").开始,在基金趋势表中查找相同日期的宏,该日期位于A11列中,到最后一行并抵消3列,并将该值复制到“应计费用”中。宏循环,直到在工作表中的最后一行(“开始页”)范围(“A4”)。

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

代码语言:javascript
复制
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

错误陷阱:

代码语言:javascript
复制
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

为了克服日期问题,我有这个小组,不知道这是否有效?

代码语言:javascript
复制
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月11日这样的日期时,它会切换到2015年11月2日。但并不是所有的日子都是这样

克服了这个问题。I被放置了一个工作表函数,以强制日期列为文本。目前正在起作用。

代码语言:javascript
复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets("Start page").Range("A4", "A50000").NumberFormat = "@"
Sheets("Fund Trend").Range("A11", "A50000").NumberFormat = "@"
End Sub
EN

回答 1

Stack Overflow用户

发布于 2015-04-27 20:42:05

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

要做到这一点,您必须使用Dim result as Variant,因为(在本例中)我在result中放置了一个文本/字符串值,以帮助识别出现的错误。

代码语言:javascript
复制
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是您所期望的,对于任何给定的查找值?如果没有错误,那么几乎(当然是)发生的是,您输入的公式是返回一个空字符串,并且该值被放入单元格中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29905297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档