在VBA中循环数据

问题描述 投票:0回答:1

我的问题的数据如下:

#define apple
#define mango
#define banana
animals{
dog,
cat,
bird
#define guava
#define avocado

#define的字符串设置为颜色索引= 50,其余字符串设置为颜色索引= 23

我想要做的是我想找到“动物”这个词,我希望它能看到下一栏,直到下一栏有#define。如果下一列没有#define,则将其编号为“0”,下一列为“1”,依此类推,因此结果如下:

#define apple
#define mango
#define banana
animals{
dog, 0
cat, 1
bird 2
#define guava
#define avocado

我的代码如下,但它没有按计划移动到下一列。

For Each cell In DataRange.Cells
    If InStr(cell.Value, "animals") <> 0 Then
        Do Until ActiveCell.Font.ColorIndex = 50
            cell.Value = cell.Value & o
            o = o + 1
            cell.Offset(0, 1).Select
        Loop
    End If
Next

谢谢

vba excel-vba excel
1个回答
2
投票

通常,代码中的错误是您没有选择要循环的单元格。这可能是理解循环如何工作的一个很好的例子。

我不想成为编写此代码的人,但请尝试:

For Each cell In DataRange.Cells
    cell.Select
    If InStr(cell.Value, "animals") <> 0 Then
        Do Until ActiveCell.Font.ColorIndex = 50
            cell.Value = cell.Value & o
            o = o + 1
            cell.Offset(0, 1).Select
        Loop
    End If
Next

如果它有效,请在阅读之后尝试重构它:How to avoid using Select in Excel VBA

尝试通过将ActiveCell设置为Range并且不使用Select而不是ActiveCell来避免选择。您可以考虑水平循环的第二个Range变量。试试看!


像这样的东西可能会好的:

Public Sub TestMe()

    Dim myCellH         As Range
    Dim myCellV         As Range
    Dim DataRange       As Range
    Dim o               As Long

    Set DataRange = Range("A1:A10")

    For Each myCellH In DataRange.Cells
        If InStr(myCellH, "animals") <> 0 Then
            Set myCellV = myCellH
            Do Until myCellV.Font.ColorIndex = 50
                myCellV.Value = myCellV.Value & o
                o = o + 1
                Set myCellV = myCellV.Offset(0, 1)
            Loop
        End If
    Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.