【问题标题】:How to determine the accumulated number of shares bought for a Trade?如何确定为交易购买的累计股票数量?
【发布时间】:2025-12-18 07:35:02
【问题描述】:

我在纳斯达克交易股票,每笔交易都有唯一的交易编号。每个唯一的交易编号都包含许多股票购买交易。

我正在尝试计算我为每个唯一交易编号购买的股票数量,并将每次股票购买交易的累积数量分配到相邻列。

例如:A 列所有交易编号按顺序列出,B 列购买的股票数量。我正在尝试确定我为每笔交易购买的累计股票数量,并将结果放在 C 列中。

Trade Number Number Shares Bought Accumulated Number of Shares Bought
1 1 1
1 None Must be blank
1 2 3
2 None Must be blank
2 1 1
2 3 4
2 None Must be blank

我创建了以下代码。 IF 语句不会在 C 列下产生所需的输出。

Sub SequentialShareNumber()

' ' SequentialShareNumber Macro ' Macro allocates a sequential number to each Share bought in a Trade

'Step 1: Declare variables Dim TradeRange As Range Dim TradeCell As Range

'Step 2: Define the Target Range Set TradeRange = Range("A2:A100")

'Step 3: Start looping through the range For Each TradeCell In TradeRange

'Step 4: If TradeCell.Value > 0 Then TradeCell.Select Dim ShareCounter As Integer ShareCounter = 0

'Step 5: Check if a Share was bought for this Trade Number in Column B TradeCell.Offset(0, 1).Range("A1").Select ActiveCell.Select

         If ActiveCell.Value = 1 Then
 
'Step 6: Allocate a sequential number to each Share bought for this Trade Number ShareCounter = ShareCounter + 1

'Step 7: Insert the sequential value in Column C ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.value = ShareCounter

        End If

End If
'Step 8: Get the next cell in the range Next TradeCell

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    注意事项:

    1. 完全限定您的代码

    2. 避免使用选择,您可以使用范围执行大多数操作(阅读How to avoid using Select in Excel VBA了解更多详细信息)

      Sub SequentialShareNumber()
          Dim shareCounter As Long
          Dim tradeNumber As Long
      
          Const rowStart As Long = 2 'Starting row
          Const rowEnd As Long = 1000 'Ending row
      
          Dim i As Long
          Dim n As Long
      
          With Sheet1 'Change to the correct worksheet reference
              For i = rowStart To rowEnd  'Loop from row 2 to 1000
                  If .Cells(i, 2).Value > 0 Then
                      tradeNumber = .Cells(i, 1).Value
                      For n = 2 To i ' Loop from starting row to the current for calculation
                          If .Cells(n, 1).Value = tradeNumber Then shareCounter = shareCounter + .Cells(n, 2).Value
                      Next n
                      .Cells(i, 3).Value = shareCounter
                      shareCounter = 0
                  End If
              Next i
          End With
      End Sub
      

    【讨论】:

    • 太棒了。感谢 Raymond 的巧妙方法。