2014-03-30 56 views
0

我有一排交易日期,存儲在列A中。它包含交易日,因此它不包含一年中的所有日子。我想獲得特定的日期並從中刪除一年。我想找到同一列中的newdate單元格的索引。如果不可能,我想找到下一個最接近的日期。如何獲得日期 - 1年vba

我迄今爲止嘗試:

Dim date1 As Double 
date1 = Sheets("Part2").Cells(i, 1).Value 
Dim matchRow As Integer 
matchRow = 3 
While Sheets("1.A").Cells(matchRow, 1).Value <> date1 
matchRow = matchRow + 1 
Wend 

我能夠得到片某一特定日期,但現在我需要獲得之日起一年之前,之後,如果沒有下一個最近的日期。

需要一些指導來做到這一點。

也試過: 表(「Part2」)。Cells(i,1).Value -365。它不工作..

回答

2

使用DateAdd

DateAdd("yyyy",-1,Sheets("Part2").Cells(i, 1).Value) 

UPD因爲你的日期存儲格式爲 「yyyymmdd」 文本,並從排№3開始,用這一個:

Dim date1 As Date 
Dim srtDate1 As String, srtDate2 As String 
Dim matchRow 

strDate1 = Sheets("Part2").Cells(i, 1).Value 
date1 = DateSerial(Left(strDate1, 4), Mid(strDate1, 3, 2), Right(strDate1, 2)) 
srtDate2 = Format(DateAdd("yyyy", -1, date1), "yyyymmdd") 

matchRow = Application.Match(CDbl(srtDate2), Sheets("Part2").Range("A:A"), 1) 
If IsError(matchRow) Then 
    matchRow = 3 
Else 
    matchRow = matchRow + 1 
End If 

MsgBox "new date: " & Sheets("Part2").Range("A" & matchRow) 
+0

如果找不到下一個最近的日期? - >如何做到這一點? – lakesh

+0

它給出了類型不匹配的錯誤。 – lakesh

+0

你可以選擇嗎?如果'date1-1year'不在列表中(列A),那麼得到最近的日期?在哪個方向最近? –