Board logo

標題: [發問] 請問能否使用巨集取代人工之輸入 感謝能者大力幫助 [打印本頁]

作者: lcctno    時間: 2015-9-22 18:08     標題: 請問能否使用巨集取代人工之輸入 感謝能者大力幫助

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

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


[attach]22054[/attach]





[attach]22053[/attach]
作者: lcctno    時間: 2015-9-22 22:34

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

我知道"麻辣家族討論版" 有很多高手
或許您們認為我只想吃魚 而不想自己學釣魚
我只能說 若造成您們有這種看法 非我所願
我知道 會的人 很快就能完成這簡單的 for next ...
但我弄了 3個星期 還是無法完成 所以只好厚顏發帖"求救了"
懇請回復者 能附上'附註 這樣才能幫助到初學者(或接觸不久之人) 引導能自己學釣魚 謝謝您們了
若在股票交易的策略 有想要我提供意見(操作心法) 我可提供我的20年來不敗的經驗 請發短消息給我
作者: 准提部林    時間: 2015-9-22 23:31

本帖最後由 准提部林 於 2015-9-22 23:33 編輯

回復 2# lcctno


1.還看不懂下單的時機,是否L欄錢足夠了就下單,以能買的張數為限(含證交稅)?
2.IF((C12+D12)>=0.001,1,0) 什麼意思?
3.IF(K12=1,0.0002,0)+IF(K12=2,0.0004,0)+IF(K12=3,0.0006,0) 何意?直接 K12*0.0002不行嗎?

也許公式就可以,再研究看看∼∼

問問題都太簡略,應詳細說明需求流程,
看問題的人好像要兼外科醫生,解剖後拿器官一一看!^ ^
作者: GBKEE    時間: 2015-9-23 07:22

本帖最後由 GBKEE 於 2015-9-23 07:28 編輯

回復 2# lcctno
或許您們認為我只想吃魚 而不想自己學釣魚
我只能說 若造成您們有這種看法 非我所願

你18:08發文22:36再發此文,你太心急了,
這論壇是不收費用的,靠的是熱心在回文的.
看問題的人好像要兼外科醫生,解剖後拿器官一一看!^ ^

說的好   回文不只要有熱心,還要有耐心
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Range, i As Integer
  4.     With Range("c12:c" & Range("i" & Rows.Count).End(xlUp).Row)
  5.         For Each E In .Cells
  6.             If E.Cells(1, 10) > 0 Then
  7.                 i = Int(E.Cells(1, 10) / (E.Cells(1, 3) * 1000))
  8.                 If i > 0 Then
  9.                     E = i
  10.                     '這樣應可輸入
  11.                     '但工作表上有一些像N欄的公式
  12.                     '=IF(N11="累計投資金額",-(I12+J12),-(I12+J12)+N11)
  13.                     '看不懂
  14.                 End If
  15.             End If
  16.         Next
  17.     End With
  18. End Sub
複製代碼

作者: lcctno    時間: 2015-9-23 08:02

回復 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點以上 )

謝謝您的熱心 希望以上說明能讓您明白
作者: lcctno    時間: 2015-9-23 08:39

回復 4# GBKEE

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



[attach]22056[/attach]

[attach]22056[/attach]
作者: 准提部林    時間: 2015-9-23 10:48

回復 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
複製代碼

作者: lcctno    時間: 2015-9-23 11:16

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

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



[attach]22059[/attach]
作者: 准提部林    時間: 2015-9-23 12:55

回復 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 有時會差一元,請自行選擇何種方式!
 
附件:
[attach]22060[/attach]
作者: lcctno    時間: 2015-9-23 13:18

本帖最後由 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張)
謝謝您的用心與幫助
作者: 准提部林    時間: 2015-9-23 14:27

回復 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
 
作者: lcctno    時間: 2015-9-23 15:26

回復 12# 准提部林

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

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


[attach]22062[/attach]

[attach]22063[/attach]

最後完成檔
[attach]22064[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)