VBA查找函数不返回零值

时间:2019-02-01 20:52:00

标签: excel vba find

我有一张带有交易代码的表(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

1 个答案:

答案 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是根据指定的范围内的相对折射率。也就是说,.AutoFilterField:=1将适用于列A中的过滤器,但Range("A:B")Field:=1将应用过滤器上的列F。