我有一张带有交易代码的表(A),一年中的工作日(B),开盘价(C),高值(D),低值(E),收盘价(F)和音量(E)。数据是按工作日时间顺序排列的,而按股票代码是按字母顺序排列的(是的,它与我之前提交的问题有关)。
我正在尝试运行一个子例程,该例程将查找代码符号出现的第一行编号(年份的开始值)。使用相应的行和列号,拉开值。然后使用该值根据我在单独的列中创建的年度增量创建百分比。
下面的代码可以正常工作,直到表的一部分的开头值为0。直到表中的晚些时候,相关的股票代号才会出现非零价格(例如,股票代号的IPO发生在年中...)。我希望可以有一个简单的IF语句来解释这个问题,并为正在查找的股票代号添加第一个非零值。
从其他在线问题中,我仅找到了将索引或匹配到不等于零的列中的值的解决方案。但是,我发现是否存在0的方式是引用代码出现在第一行。我还没有找到将任何其他解决方案合并到我的代码中的方法。
Sub Percent()
'Column Header
Cells(1, 11).Value = "Percent Change"
'Set dims
Dim Summary_Table_Row3 As Integer
Summary_Table_Row3 = 2
LastRow3 = Cells(Rows.Count, 10).End(xlUp).Row
'Find start row with unique Ticker
Dim TickStartRow As Double
'Loop through all unique tickers
For I = 2 To LastRow3
'Find start row
TickStartRow = Range("A:A").Find(what:=Cells(I, 9), after:=Range("A1"),
LookAt:=xlWhole).Row
'If the yearly change is 0, set percentage to 0
If Cells(I, 10) = 0 Then
Cells(I, 11) = 0
'''ElseIf statement to find first non-zero value if opening value = 0 ?
'Create percentage for all other non-zero percentages
Else
Cells(I, 11) = Cells(I, 10) / Cells(TickStartRow, 3)
End If
Cells(I, 11).NumberFormat = "0.00%"
'Add one to the summary table row
Summary_Table_Row1 = Summary_Table_Row1 + 1
Next I
End Sub
答案 0 :(得分:0)
.Find
仅适用于可见单元格,因此对于您而言,仅在触发{{1}之前,以编程方式应用.AutoFilter
并以0过滤出值可能会更容易}函数。
类似
.Find
就在您的If Worksheets(1).AutoFilterMode = False Then 'Replace Worksheets(1) with a reference to your sheet
Worksheets(1).Cells.AutoFilter
End If
Worksheets(1).Range("A:Z").AutoFilter Field:=10, Criteria1:="<>0" 'Again, replace Worksheets(1) and Range("A:Z") with applicable values
循环会工作。然后只取滤波器了与
For-Next
环的端部的外侧。
编辑:
如果你没有一起工作Cells.AutoFilter
之前,值得注意的是,.AutoFilter
的标准为Field
是根据指定的范围内的相对折射率。也就是说,.AutoFilter
为Field:=1
将适用于列A中的过滤器,但Range("A:B")
为Field:=1
将应用过滤器上的列F。