Excel 如何在VBA中查找条件循环中的第一个和最后一个值
我正在制作一份关于股票指数的报告,在那里我应该得到市场上每只股票从开盘到收盘的年度股价净变化。我有每年每天观察每只股票的面板数据。我目前正在使用一个条件for循环来创建年度总量。我有没有办法在选择股票年度开盘和收盘的条件中选择第一个和最后一个值?第1列是股票的名称,所以我用它作为股票变化的条件。以下是我到目前为止的情况。第4栏为每日开放栏,第5栏为每日关闭栏Excel 如何在VBA中查找条件循环中的第一个和最后一个值,excel,vba,loops,if-statement,Excel,Vba,Loops,If Statement,我正在制作一份关于股票指数的报告,在那里我应该得到市场上每只股票从开盘到收盘的年度股价净变化。我有每年每天观察每只股票的面板数据。我目前正在使用一个条件for循环来创建年度总量。我有没有办法在选择股票年度开盘和收盘的条件中选择第一个和最后一个值?第1列是股票的名称,所以我用它作为股票变化的条件。以下是我到目前为止的情况。第4栏为每日开放栏,第5栏为每日关闭栏 'Establish variables Dim ticker As String Dim change_price As Double
'Establish variables
Dim ticker As String
Dim change_price As Double
Dim change_percent As Double
Dim volume As Double
Dim annual_open As Double
Dim annual_close As Double
' Keep track of each stock the summary table
Dim Summary_Table_Row As Integer
Summary_Table_Row = 2
For i = 2 To 800000
If Cells(i + 1, 1).Value <> Cells(i, 1).Value Then
'create a list of stocks
ticker = ticker + Cells(i, 1).Value
'total volume for each stock
volume = volume + Cells(i, 7).Value
'annual_open = ?
'annual_close = ?
' Print the stock in the Summary Table
Range("H" & Summary_Table_Row).Value = ticker
' Print the stock volume to the Summary Table
Range("I" & Summary_Table_Row).Value = volume
' Add one to the summary table row
Summary_Table_Row = Summary_Table_Row + 1
'reset the stock name
ticker = ""
' Reset the Brand Total
volume = 0
' If the cell immediately following a row is the same stock...
Else
' Add to the stock total
volume = volume + Cells(i, 7).Value
End If
Next i
建立变量
作为字符串的Dim-ticker
将价格更改为双倍
变暗百分比为双倍
将音量调暗为双倍
开为双倍
黯淡的年报接近双倍
'跟踪汇总表中的每种股票
Dim Summary\表\行为整数
汇总表行=2
对于i=2至800000
如果单元格(i+1,1)。给单元格(i,1)赋值。然后给单元格赋值
'创建一个股票列表
股票代码=股票代码+单元格(i,1)。数值
“每种股票的总成交量
体积=体积+单元(i,7)。数值
“年度公开赛=”?
'年度关闭=?
'打印汇总表中的库存
范围(“H”和汇总表行)。值=股票代码
'将库存量打印到汇总表
范围(“I”和汇总表行)。值=体积
'将一个添加到汇总表行
汇总表行=汇总表行+1
'重置股票名称
ticker=“”
“重置品牌总数
体积=0
'如果紧跟在一行之后的单元格是同一个存储单元。。。
其他的
"计入存量总额,
体积=体积+单元(i,7)。数值
如果结束
接下来我
如果您添加数据布局的屏幕截图,会更加清晰。还有,需要澄清一下——第一个和最后一个值是什么?这些是最小值和最大值吗
或者是在适当的列中第一个“打开”事件和最后一个“关闭”?如果是这样,您可以尝试这样做:
' This will be first stock's open
annual_open = Cells(2, 4).Value
For i = 2 To 800000
If Cells(i + 1, 1).Value <> Cells(i, 1).Value Then
'[Your code]
' Here, i is the last row of the current stock, so assign it
annual_close = Cells(i, 5).Value
'''''''''''''''''''''''''''''''''''''''''''''''''
' Handler for your "annual_open" and "annual_close"
' because lines after will overwrite "annual_open" with new value
' [Add code here]
'''''''''''''''''''''''''''''''''''''''''''''''''
' Here, i + 1 is the first row of next stock
' so assign it
annual_open = Cells(i + 1, 4).Value
'[Your code]
Else
' If stock is the same do nothing to "annual_open" and "annual_close"
'[Your code]
End If
Next i
“这将是第一只股票的开盘价
年度开放=单元格(2,4)。数值
对于i=2至800000
如果单元格(i+1,1)。给单元格(i,1)赋值。然后给单元格赋值
“[你的代码]
'这里,我是当前股票的最后一行,因此分配它
年平均值=单元格(i,5)。数值
'''''''''''''''''''''''''''''''''''''''''''''''''
'处理您的“年度开放”和“年度关闭”
'因为后面的行将用新值覆盖“年度打开”
“[在此处添加代码]
'''''''''''''''''''''''''''''''''''''''''''''''''
'这里,i+1是下一个股票的第一行
“那就分配它吧
年度开放=单元格(i+1,4)。数值
“[你的代码]
其他的
如果股票是相同的,不要对“年度未平仓”和“年度未平仓”进行任何操作
“[你的代码]
如果结束
接下来我
通过sql语句T(按股票分组的Sum()、Count()、Min()、Max())获取这些值,。避免使用对“ActiveSheet”的隐式引用(例如,在没有显式定义工作表(和工作簿)的情况下使用Cells()、Range()!请查看以获取相关提示。