如何确定股票交易持仓区间的价格最值及max公式的单元格范围
解决股票持仓区间价格极值计算问题
嘿,我来帮你搞定这个在交易表格里确定Apples股票持仓区间内价格最大/最小值的需求!结合你提到的遍历交易编号列(Range)的痛点,我给你准备了两种实用的方案:
一、公式法(无需编程,直接在单元格使用)
假设你的表格结构如下(可根据实际列调整):
- A列:交易编号(Range),空单元格表示属于上一个交易的持仓记录
- B列:股票名称(比如"Apples")
- C列:价格(Price)
- D列:存放对应持仓区间的最高价
- E列:存放对应持仓区间的最低价
在第一个交易编号所在的行(比如A2)的D2单元格输入以下公式,然后下拉填充即可:
=MAX(C2:INDEX(C:C,IFERROR(MATCH(TRUE,A3:A$1048576<>"",0)+ROW()-1,ROWS(C:C))))
对应的最低价公式:
=MIN(C2:INDEX(C:C,IFERROR(MATCH(TRUE,A3:A$1048576<>"",0)+ROW()-1,ROWS(C:C))))
公式逻辑说明:
MATCH(TRUE,A3:A$1048576<>"",0):找到当前行下方第一个非空的交易编号单元格的位置INDEX(C:C, ...):把这个位置转化为C列的行号,作为持仓区间的结束行IFERROR(...,ROWS(C:C)):如果是最后一个持仓,直接取C列最后一行作为结束- 最后用
MAX/MIN计算当前行到结束行的价格极值
二、VBA宏方法(适合复杂场景,自动化遍历)
如果你需要更灵活的控制(比如自动筛选Apples股票、批量处理),可以用VBA代码实现遍历和计算:
Sub CalculateApplesHoldExtremes() Dim ws As Worksheet Dim lastRow As Long Dim startRow As Long Dim i As Long ' 指定你的工作表,把"交易记录"改成实际表名 Set ws = ThisWorkbook.Worksheets("交易记录") ' 获取A列最后一行数据的行号 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row startRow = 2 ' 假设表头在第1行,数据从第2行开始 For i = 2 To lastRow ' 触发计算的条件:下一行有新交易编号,或者当前是最后一行 If (i = lastRow) Or (Trim(ws.Cells(i + 1, "A").Value) <> "") Then ' 只处理Apples股票的持仓 If Trim(ws.Cells(startRow, "B").Value) = "Apples" Then ' 计算最高价并写入D列对应行 ws.Cells(startRow, "D").Value = Application.Max(ws.Range("C" & startRow & ":C" & i)) ' 计算最低价并写入E列对应行 ws.Cells(startRow, "E").Value = Application.Min(ws.Range("C" & startRow & ":C" & i)) End If ' 更新起始行到下一个持仓的第一行 startRow = i + 1 End If Next i End Sub
使用说明:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 插入一个新模块,把上面的代码粘贴进去
- 修改代码里的工作表名称("交易记录")为你实际的表名
- 运行这个宏,就能自动计算出所有Apples持仓区间的价格极值
内容的提问来源于stack exchange,提问作者Lawrence Horner
相关产品推荐
相关产品推荐

