返回列表 上一主題 發帖

[發問] 請問能否使用巨集取代人工之輸入 感謝能者大力幫助

[發問] 請問能否使用巨集取代人工之輸入 感謝能者大力幫助

本帖最後由 lcctno 於 2015-9-22 18:10 編輯

請問能否使用巨集取代人工之輸入 感謝能者大力幫助
1.這是股票購買配置程式 原本我是使用人工慢慢輸入(於黃色格內) 我想應該可以使用巨集來執行 麻煩高手相助 先謝謝您了
2.原檔案太大無法上傳 故縮減成部分程式(本人VBA能力不好 故紫色部分請勿使用 或其他有用到的地方也儘量不要動到)
3.買張數(只能使用整數) 由空白或0到 I=I+1 到不能讓剩餘金額小於0
4.C12到C2571為VBA輸入買張數之位置








股票配置.zip (252.45 KB)

回復 12# 准提部林

感謝完美的完成我所需要的結果

測試回報 試誤法費時約是不到2倍的時間 但也不超過10秒 可以算是很完美了






最後完成檔
股票配置V3-2.zip (290.47 KB)

TOP

回復 11# lcctno

試填法:改如下,速度更慢
For Each xR In .Cells
  If xR(1, 8) <= 0 Then GoTo 101
  SU = Int(xR(1, 8) / xR / 1000)
  If SU <= 0 Then GoTo 101
  xR(1, -1) = SU
  If xR(1, 8) < 0 Then SU = SU - 1
  If SU > 0 Then xR(1, -1) = SU Else xR(1, -1) = ""
  'If xR(1, -1) <> "" Then xR(1, -1).Select
101: Next
 

TOP

本帖最後由 lcctno 於 2015-9-23 13:19 編輯

回復 10# 准提部林
退佣=手續費*退佣率 這是一般人的認知 我以前也是這樣認為
經向卷商查證 得到結果為
例一:
1000 *15.4=15400
當日計算 :
已收手續費=15400*0.001425=21.945   ===> 21

每月折讓處理:
折讓後應收手續費=15400 * .0.001425 *0.28=6.1446 ==>  6

折讓金= 21-6 =15
--------------------------------------------------------------------------------------------------------------------------------------------------
例二:
1000 * 11.64=11640
當日計算 :
已收手續費=11640*0.001425=16.587   ===> 16(小於20以20計算) ===>20

每月折讓處理:
折讓後應收手續費=(11640 * .0.001425)(小於20以20計算) *0.28=5.6 ==>  5

折讓金= 20-5 =15
------------------------------------------------------------------------------------------------------------------------------------------------------
例三:
3000 * 11.64=34920
當日計算 :
已收手續費=34920*0.001425=49.761   ===> 49

每月折讓處理:
折讓後應收手續費=(34920 * .0.001425) *0.28=13.93308 ==> 13

折讓金= 49-13 =36

我自行將公式設為我的退佣方式(應該是對的)
折讓公式=IF(-(-C12-D12)*E12*1000*$H$10<20,20-TRUNC(20*(1-$E$10)),-G12-TRUNC(ABS(F12)*$H$10*(1-$E$10)))*IF(C12+D12=0,0,1)
C12 = 買張數
D12 = 賣張數
E12 = 成交價
F12 = 買 or 賣淨價
$H$10 = 券商買賣手續費率
$E$10 = 券商折讓率

可不可以將vba寫成試誤法 也就是給C欄輸入參考買張數時 接著檢查對應之L欄(剩餘金額)之值是否小於0 若小於0時 買張就減1張 並重新輸入數值
這樣就不用管手續費 折讓 稅率等之問題 就如同我用人工逐一看綠色來輸入 當輸入格變成紅色時就重新輸入(少1張)
謝謝您的用心與幫助

TOP

回復 9# lcctno
  1. Sub TEST()
  2. Dim xR As Range, SS, ST, SU, SX
  3. With Range([E12], Cells(Rows.Count, "E").End(xlUp)(2))
  4.   .Offset(0, -2).ClearContents
  5. For Each xR In .Cells
  6.   If xR(1, 8) <= 0 Then GoTo 101
  7.  
  8.   SU = Int(xR(1, 8) / xR / 1000) '預計可購買張數
  9.   If SU <= 0 Then GoTo 101
  10.  
  11.   SS = Round(xR * SU * 1000, 0) '可買張數總股價
  12.   ST = Application.Max(20, Int(SS * [H10]))  '計算手續費, 最低20
  13.   SX = Int(ST * [E10])  '退佣=手續費*退佣率
  14.  
  15.   If SS + ST - SX > xR(1, 8) Then SU = SU - 1 '(總股價+手續費-退佣)超過時, 少買一張
  16.   If SU > 0 Then xR(1, -1) = SU:  xR(1, -1).Select
  17. 101: Next
  18. End With
  19. End Sub
複製代碼
所謂的〔稅.費〕,買入時只是〔手續費〕,無礙程式計算,這不能省略
退佣=手續費*退佣率
另.計算函數 int, round 有時會差一元,請自行選擇何種方式!
 
附件:
股票配置V3-1.rar (207.24 KB)

TOP

回復 7# 准提部林
    ST = Application.Max(20, Int(SS * [H10]))  '計算稅費, 最低20
其實不需要有計算稅費 因為買是不用繳稅 但要考慮 J欄[券商折讓(退款)] 因為買與賣都會有退款
但我將計算稅費移除 就有少數買超之現象
目前以加入券商折讓(退款)之函數公式(尚未完全確定公式的可靠性) 還請您將就來測試



股票配置V3.zip (287.42 KB)

TOP

回復 7# 准提部林
回報高手
目前執行起來很正確 感謝您的幫助
但請問 若J欄[券商折讓(退款)] 有加入函數公式時(也就是有退款值時) 是否仍能正常使用
因為目前還在研究該函數公式 故還沒放進去函數公式

TOP

回復 5# lcctno


有時不是想的那麼簡單, 有些層面還是要考慮的:
例如:預估可買3張,但加入〔稅.費〕後,就會呈個位數的負數,這時就只能少買一張,
   加入〔稅.費〕才是重點~~
另.
N12公式:=-(I12+J12)+N(N11) → N(??),遇文字為0,遇數值則為該數值,其它類推
  1. Sub TEST()
  2. Dim xR As Range, SS, ST, SU
  3. With Range([E12], Cells(Rows.Count, "E").End(xlUp)(2))
  4.   .Offset(0, -2).ClearContents
  5. For Each xR In .Cells
  6.   If xR(1, 8) <= 0 Then GoTo 101
  7.  
  8.   SU = Int(xR(1, 8) / xR / 1000) '預計可購買張數
  9.   If SU <= 0 Then GoTo 101
  10.  
  11.   SS = Round(xR * SU * 1000, 0) '可買張數總股價
  12.   ST = Application.Max(20, Int(SS * [H10]))  '計算稅費, 最低20
  13.  
  14.   If SS + ST > xR(1, 8) Then SU = SU - 1 '(總股價+稅費)超過時, 少買一張
  15.   If SU > 0 Then xR(1, -1) = SU:  xR(1, -1).Select
  16. 101: Next
  17. End With
  18. End Sub
複製代碼

TOP

回復 4# GBKEE

'=IF(N11="累計投資金額",-(I12+J12),-(I12+J12)+N11)
這是為了讓全部N欄的公式能全部相同
謝謝您的用心 看來已經很接近我所要的 但有少數幾比買單超支了
如附件(C欄內之部分格為紅底色) 還請您能繼續修正它 謝謝



股票配置V2.zip (247.86 KB)

股票配置V2.jpg (270.91 KB)

股票配置V2.jpg

TOP

回復 3# 准提部林
1.下單的時機
其實可以不要理會 一大堆內含 只要輸入買張數(C欄) 但剩餘金額(L欄)不能為負值 也就是不能讓C欄之格變紅色 當買超過可投資金額時會變紅色

2.(C12+D12)>=0.001 那是零股 不足一張股票 其實您可以不要理那些 只要顧到(C欄)與(L欄)之關係就可

3. k12 是 證所稅稅率類別 1 , 2 , 3 (目前用不到)
證所稅稅率類別 0 (賣出前一日的台股收盤指數8499.99點或8499.99點以下)
證所稅稅率類別 1 (賣出前一日的台股收盤指數8500點-9499點)
證所稅稅率類別 2 (賣出前一日的台股收盤指數9500點-10499點)
證所稅稅率類別 3  (賣出前一日的台股收盤指數10500點或10500點以上 )

謝謝您的熱心 希望以上說明能讓您明白

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題