查找两个非连续值是否相同的vba

时间:2015-03-22 00:19:05

标签: excel vba if-statement

我有一列数据,其中包括" UP"," DOWN"或""作为价值观。我正在尝试编写代码,说明对于所有行,如果第一个单元格是" UP"然后检查下一行,直到我来到" DOWN"或者" UP",即如果下一行有""然后检查下一行,直到我来到" DOWN"或者" UP"。 我是VBA的新手,并尝试了各种选择,但似乎只能在连续的" UP" s或者#34; DOWNS"而不是有一个" UP",多行""然后另一个" UP"。

这是我的代码:

    Range("z1:z250").Select
    Selection.ClearContents

    For Row = 2 To 250
        If Range("Y" & Row).Value = "UP" Then
            For sRow = 3 To 250
                If Range("Y" & Row + 1).Value = "UP" Then
                    Range("Z" & Row) = "MT-UP"
                ElseIf Range("Y" & Row + 1).Value = "" Then
                End If
            Next
        End If
    Next
End Sub

我尝试添加For Each c in Range (“Y3”:”Y250”)之类的代码,但这并没有让它找到下一个UP,并使其变得非常慢。我也试过GoTo next cell(虽然似乎明白这是不赞成的!)但这也不起作用。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

如果这是你想要的,那么不是100%清楚但是看看......

在遇到“DOWN”之前,我使用一个标志来标记何时找到第二个连续的“UP”,而不是嵌套循环。根据您的描述,似乎无需检查空单元格(“”)。

Sub MTTest()

    Dim Row As Long
    Dim MTRow As Long
    Dim MTFlag As Boolean

    Range("Z1:Z250").ClearContents

    For Row = 2 To 250

        If Range("Y" & Row).Value = "UP" Then
            If MTFlag = True Then
                Range("Z" & MTRow) = "MT-UP"
                MTFlag = Flase
            Else
                MTFlag = True
                MTRow = Row
            End If
        Else
            If Range("Y" & Row).Value = "DOWN" Then MTFlag = False
        End If
    Next
End Sub