返回列表 上一主題 發帖

相同股票自動輸入

本帖最後由 Andy2483 於 2023-3-31 11:20 編輯

回復 8# coafort

謝謝前輩回復
後學藉此帖練習觸發與字典,學習方案如下,請前輩參考

執行前:


輸入8的執行結果:


'工作表模組:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
     On Error Resume Next
     Names("_AAA").Delete
     On Error GoTo 0
     If .Row < 3 Or .Value = "" Then Exit Sub
     If .Column Mod 7 <> 1 Then Exit Sub
     Cancel = True
     Names.Add "_AAA", Target.Value
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
   If .Row < 3 Or .Count > 1 Then Exit Sub
   If .Column Mod 7 = 4 Then
      Call 填入配息_多個同股名
   
      If Val(Y(.Offset(0, -3) & "|")) > 1 Then
         Application.EnableEvents = False
         Y(.Offset(0, -3) & "/").Value = .Value
         Application.EnableEvents = True
         Application.Goto Y(.Offset(0, -3) & "/")
         Set Y = Nothing
      End If
   End If
   If .Column Mod 7 = 6 Then
      Call 填入配股_多個同股名
   
      If Val(Y(.Offset(0, -5) & "|")) > 1 Then
         Application.EnableEvents = False
         Y(.Offset(0, -5) & "/").Value = .Value
         Application.EnableEvents = True
         Application.Goto Y(.Offset(0, -5) & "/")
         Set Y = Nothing
      End If
   End If
End With
End Sub

'Module1:
Option Explicit
Public Y
Sub 填入配息_多個同股名()
Dim Brr, C&, i&, R&
Set Y = CreateObject("Scripting.Dictionary")
Brr = ActiveSheet.UsedRange
For C = 1 To UBound(Brr, 2) Step 7
   For R = 3 To UBound(Brr)
      Y(Brr(R, C) & "|") = Y(Brr(R, C) & "|") + 1
      If Y(Brr(R, C) & "/") = "" Then
         Set Y(Brr(R, C) & "/") = Cells(R, C + 3)
         Else
            Set Y(Brr(R, C) & "/") = Union(Y(Brr(R, C) & "/"), Cells(R, C + 3))
      End If
   Next
Next
End Sub

Sub 填入配股_多個同股名()
Dim Brr, C&, i&, R&
Set Y = CreateObject("Scripting.Dictionary")
Brr = ActiveSheet.UsedRange
For C = 1 To UBound(Brr, 2) Step 7
   For R = 3 To UBound(Brr)
      Y(Brr(R, C) & "|") = Y(Brr(R, C) & "|") + 1
      If Y(Brr(R, C) & "/") = "" Then
         Set Y(Brr(R, C) & "/") = Cells(R, C + 5)
         Else
            Set Y(Brr(R, C) & "/") = Union(Y(Brr(R, C) & "/"), Cells(R, C + 5))
      End If
   Next
Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  coafort

謝謝前輩回復
後學藉此帖練習觸發與字典,學習方案如下,請前輩參考

執行前:


輸入 ...
Andy2483 發表於 2023-3-31 11:18


報告大大
出現錯誤
謝謝大大

TOP

回復 12# coafort


    謝謝前輩回復
測試檔如下,請前輩參考

ETF成分股_20230331_1.zip (40.32 KB)
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  coafort


    謝謝前輩回復
測試檔如下,請前輩參考
Andy2483 發表於 2023-3-31 11:36


非常感謝大大
已經可以了:lol

TOP

回復  coafort


    謝謝前輩回復
測試檔如下,請前輩參考
Andy2483 發表於 2023-3-31 11:36


請問大大
如果未來我再增加新的欄位
要改哪裡呢?
謝謝大大

TOP

回復 15# coafort


    世事難料,千金難買早知道,情境難測,請前輩撥空研究一下,自己試改看看
不順遂如意時有論壇眾前輩可以請教,一起學習
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復  coafort


    世事難料,千金難買早知道,情境難測,請前輩撥空研究一下,自己試改看看
不順遂如意 ...
Andy2483 發表於 2023-3-31 15:32


謝謝大大
到時候我再嘗試看看
如有問題再麻煩大大

TOP

回復  coafort


    世事難料,千金難買早知道,情境難測,請前輩撥空研究一下,自己試改看看
不順遂如意 ...
Andy2483 發表於 2023-3-31 15:32


大大您好
我發現有個問題
就是判斷是從0056那邊開始
如果從00713那邊輸入,0056,00878這邊的數值不會跟著變動
請問大大有解嗎
謝謝

TOP

回復  coafort


    世事難料,千金難買早知道,情境難測,請前輩撥空研究一下,自己試改看看
不順遂如意 ...
Andy2483 發表於 2023-3-31 15:32


大大您好
我發現有個問題
就是判斷是從最左邊0056那邊開始
如果儲存格空白,從00713那邊輸入,相同股票的0056,00878這邊的數值不會跟著出現
請問大大有解嗎
謝謝

TOP

本帖最後由 Andy2483 於 2023-4-6 09:05 編輯

回復 19# coafort


    謝謝前輩
後學學藝不精又偷懶的結果
1.請將兩處的程式碼   If Y(Brr(R, C) & "/") = "" Then 改為
If Not Y.Exists(Brr(R, C) & "/") Then

Sorry
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 有智慧才能分辨善惡邪正;有謙虛才能建立美滿人生。
返回列表 上一主題