返回列表 上一主題 發帖

[發問] 求助~關於vba的程式!

[發問] 求助~關於vba的程式!

本帖最後由 candy516 於 2011-1-17 18:26 編輯

各位你們好~
    我是VBA的超級新手,因為是念商科的,對VBA完全沒概念!
研究VBA好幾天後,真的還是沒辦法寫出什麼東西來!
    不知道有沒有大大可以幫我起各頭,或是提點我一下,我真得是太笨了!= =:'(
我是要做填權息的研究,附檔中有MARK黃底的代表除(權)息日,我要去驗證,(從第二個SHEET開始)
在除權息當天的收盤價是否會大於除權息前一日的收盤價,如果有即表示有填權息現象,
如妥在除權息當日沒有填權息則繼續往上找,看到第幾天時會填權息。
    請問有沒有先進可以提示我一下,小妹我真的是想破了頭還是想不太出來!= =
拜託了各位~
^^:loveliness:

test(2003).rar (369.9 KB)

現金股利Part1.rar (948.17 KB)

現金股利Part2.rar (328.81 KB)

本帖最後由 hugh0620 於 2011-1-14 09:25 編輯

回復 1# candy516


    xx~ 想一下~ 看看能不能幫妳~ 因為我也是新手
學習才能提升自己

TOP

謝謝您~我也持續的在研究中!^^

TOP

你好~
已經改成2003版的檔案了!
謝謝你!
^^

TOP

回復 4# candy516
最主要是看不懂你所謂除權息的標是要填在哪裡?
請試舉例來說明,你資料要怎麼填法
學海無涯_不恥下問

TOP

本帖最後由 candy516 於 2011-1-16 23:44 編輯

舉例來說:像是2010年1225 福懋油的除權日是9/7(黃底),所以我去比較1225 福懋油9/7的收盤價是否大於等於9/8,如果沒有,就繼續找,9/6的收盤價是否大於等於9/8的收盤價,直到找到為止!最後得到需要幾天的時間,可以完成填權(某日的收盤價大於等於除權日(9/8))。最後新增一欄,將結果顯示在除權日(黃底旁)!
:)

TOP

本帖最後由 Hsieh 於 2011-1-17 16:20 編輯

回復 6# candy516

我不懂的是,Sheet1記載是2010/9/7  是除權日
但妳敘述時又是變成2010/9/8
若條件沒成立是往前找或是往後找
找到後要在C85寫入什麼值?
萬一除權後都沒回升又該如何?
學海無涯_不恥下問

TOP

Hsieh 大大你好:
    Sheet1原始資料,像是SGEET1的A2的福懋油,他的除權日2010/9/7,我就先把SHEET2的B85用黃底標示出來,我要計算的是SHEET2的B85(9/7)是否大於等於B86(9/6)(填權的意思是說:除權當日的收盤價是否大於等於除權日前一日的收盤價),如果以這個例子來說,除權日當天則已經填權,就不要再繼續找9/8,但如果9/7沒有大於9/6,則必須再去看9/8是否大於等於9/6,C85這個儲存格我是想顯示出;需要幾天的時間可以完成填權。(像是福懋油則顯示1,因為他當天即完成填權)
    不知道大大懂不懂我的意思,真的是很不好意思,想請教你還把檔案搞得你看不懂!
謝謝你的幫忙!^^

TOP

回復 8# candy516
  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Application.ScreenUpdating = False
  4. With Sheet1
  5.    For Each a In .Range(.[A2], .[A2].End(xlDown))
  6.       d(a & Year(a.Offset(, 1))) = Array(a.Offset(, 1), a.Offset(, 2))
  7.    Next
  8. End With
  9. For y = 2001 To 2010
  10.   With Sheets(CStr(y))
  11.     If Application.CountBlank(.Range(.[B1], .[IV1].End(xlToLeft))) > 0 Then .Range(.[B1], .[IV1].End(xlToLeft)).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
  12.     .Range(.[IV1].End(xlToLeft).Offset(, 1), .[IV1]).EntireColumn.Clear
  13.     k = 2
  14.     Do Until .Cells(1, k) = ""
  15.     .Columns(k + 1).Insert
  16.        mystr = .Cells(1, k) & y
  17.        Set a = .Columns("A").Find(d(mystr)(0))
  18.        If Not a Is Nothing Then
  19.        cnt = 0
  20.          r = a.Row
  21.          test = .Cells(r - 1, k)
  22.          r = r + 1
  23.          cnt = cnt + 1
  24.          Do Until .Cells(r, k) >= test Or .Cells(r, k) = ""
  25.          cnt = cnt + 1
  26.          r = r + 1
  27.          Loop
  28.          If .Cells(r, 1) = "" Then
  29.          .Cells(a.Row, k + 1) = "無填權"
  30.          Else
  31.          .Cells(a.Row, k + 1) = cnt
  32.          End If
  33.        End If
  34.        k = k + 2
  35.     Loop
  36.   End With
  37. Next
  38. Application.ScreenUpdating = True
  39. End Sub
複製代碼
學海無涯_不恥下問

TOP

Hsieh大大你好~
    哇,你真的好厲害唷!我才把尋找儲存格底色的方法研究出來,你就寫出來了!真是太感謝了!
不過我的解釋好像還是不夠清楚= = !我再說清楚一點:
像是福懋要他是9/7日除權,所以第一步驟就是用9/7的收盤價和9/6的比(14.3>14.26),所以在C85填上1(天)!
再來是1235興泰,他的除權日是9/13,所以我先用9/13和9/10
(9/13的收盤價46.1<9/10的收盤價46.89),所以再繼續比
(9/14的收盤價46.3<9/10的收盤價46.89),所以要再繼續比
(9/15的收盤價48.75>9/10的收盤價46.89),
在這一天則找到完成填權的!所以就再D81填上"3"(天)
    不知道大大這樣了解我的意思嗎?真的不好意思,表達能力不是很好!
真心的謝謝你!^^

TOP

        靜思自在 : 要比誰更受誰.不要比誰更怕誰。
返回列表 上一主題