(15分): Excel macro, 寫個可以搜尋特定日期的Macro

2007-06-11 3:43 am







請各位指教,














回答 (2)

2007-06-13 11:55 pm
✔ 最佳答案

我撰寫了一個稱為DLOOKUP的巨集來解決這問題,用法如下:




圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup01.jpg





傳回值:




日期 —— 執行成功,傳回相對的交易日期


#VALUE! —— 算式語法錯誤或引數不正確


#N/A —— 找不到相對的交易日期




在儲存格A3、A4、A5及A6輸入下列算式:





圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup02.jpg





執行結果:





圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup03.jpg





下面是該巨集的原碼:







圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup04.jpg




圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup05.jpg




圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup06.jpg




圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup07.jpg




圖片參考:http://i206.photobucket.com/albums/bb265/a048042l/dlookup08.jpg







下載原碼: dlookup.xls



參考: 原創
2007-06-15 9:20 am
自定義函數 dset 代碼:
Function dset(rge As Range, dd As Date, Optional pp As Integer) As Date
If rge.Columns.Count < 4 Then Exit Function
If IsMissing(pp) Then pp = 1
Select Case pp
Case 2
d = dd - Day(dd)
Case 3
d = dd - Weekday(dd)
Case 4
d = dd - 1
Case Else
d = DateSerial(Year(dd) - 1, 12, 31)
End Select
For t = 1 To rge.Rows.Count
If rge.Cells(t, 4) <> "R" Then
dx = rge(t, 1)
End If
If rge.Cells(t, 1) >= d Then
dset = dx
Exit Function
End If
Next
End Function

在 計算表
A3輸入 =dset(日曆!A3:D60000,A1,1)
A4輸入 =dset(日曆!A3:D60000,A1,2)
A5輸入 =dset(日曆!A3:D60000,A1,3)
A6輸入 =dset(日曆!A3:D60000,A1,4)

公式結構:
dset(資料庫範圍,目標日期,[選擇性參數: 1=上年;2=上月;3=上週;4=上日])
忽略參數, 參數大于4, 或小于1, 將被默認為1, 即上年
如有輸入錯誤或找不到, 傳回 1900/1/0

另我覺得將資料庫的範圍放在公式上是有必要的, 好處是可隨時轉用其他工作表/資料庫, 而資料庫內容如有編輯, 公式亦可馬上自動更新。

樓上的巨集, 正統及做足程序, 可作教材。
但編程猶如作家寫文章, 各人有各人風格/佈局/用詞, 我只將我這個自學消閑的老人家所寫的自家風格代碼供樓主多一個選擇。


收錄日期: 2021-04-12 19:54:16
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070610000051KK04449

檢視 Wayback Machine 備份