在VBA中使用“Do while”循环遍历列和设置范围

我有一个时间序列的数据范围,列A的date和列B的价格。

这个数据在前200行中有“N / A”(一个string,而不是错误)(这个数字不是精确的,每次运行文件都会改变,所以我不能直接引用它)。

为了能够从没有“N / A”的范围进行graphics绘制,我使用“Do While”循环遍历行,直到它不等于“N / A”,然后设置范围。

问题:出于某种原因,我的“我”计数器没有求和。 循环开始,然后以i = 1结束,应该是i =最后一个“N / A”的行号。

代码的相关部分是:

i = 1 If SourceWorksheet = "Ret" Or SourceWorksheet = "Vol" Then Do While w.Sheets(SourceWorksheet).Cells(i, 2) = "N/A" i = i + 1 '****Problem IS HERE, IT IS NOT SUMMING TO i Loop Set RetRange = w.Sheets(SourceWorksheet).Range(Cells(i + 1, 1), Cells(xlLastCell)) Else Set RetRange = w.Sheets(SourceWorksheet).UsedRange End If 

Obs 1:在这种情况下,我设置i = 1,但我已经尝试没有为它分配一个值,但有一个错误。

Obs 2:由于这是一个从sub接收参数的函数,所以SourceWorksheet是一个将由用户input的参数。

关于这个代码有什么问题的任何想法?

除了我们已经解决了很多其他问题,如果单元格B1不包含“N / A”(例如由于标题),您的循环将失败。

试试这个修改的代码:

 With w.Sheets(SourceWorksheet) If SourceWorksheet = "Ret" Or SourceWorksheet = "Vol" Then i = 2 ' or i=3, whatever row contains your first item of data Do While .Cells(i, 2).Value = "N/A" i = i + 1 Loop Set RetRange = .Range(.Cells(i, 1), .Cells.SpecialCells(xlCellTypeLastCell)) Else Set RetRange = .UsedRange End If End With