繁体   English   中英

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

[英]Going through columns and setting a range with “Do while” loop in Vba

我有一个时间序列的数据范围,其中日期在A列,价格在B列。

此数据的前200行具有“ N / A”(字符串,不是错误)(此数字不准确,每次运行文件时都会更改,因此无法直接引用它)。

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

问题:由于某种原因,我的“ i”计数器未求和。 循环从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,但是我已经尝试过不为其分配值,但是出现错误。

意见2:由于此函数从子程序接收参数,因此SourceWorksheet是用户将输入的参数。

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

除了我们已经解决的许多其他问题之外,如果单元格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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM