根据行上方和下方的行输入行中的值(上下多行)

时间:2014-06-17 19:02:29

标签: excel excel-vba rows infinite-loop vba

我正在尝试通过查看其上方和下方的行来识别电子表格中的批次行,有时超过20以上和以下。我将我的电子表格排序,以便将所有策略编号组合在一起,我想要的是一个宏,它将查看共享该策略编号的所有行,并查看行的范围是否包含至少一个行中的某个值另一栏。

因此,一列有政策编号,一个有风险ID。我希望突出显示批量匹配的策略编号(它们已按策略编号排序,因此已分组),如果批处理中的至少一行包含策略编号的相邻列中的值“BINT”。

这是我尝试过的。我在第一列PolicyNumbers中命名了策略编号的范围。宏将正确运行第一个值并输出RED(根据需要)到第三列,但之后它似乎进入某种无限循环然后excel崩溃。我无法弄清楚为什么

Sub fixit()
    Dim rcell As Range
    Dim counter As Integer

    For Each rcell In Range("PolicyNumber")
        Do Until rcell <> Range("A" & rcell.Row + 1)
            rowset = rcell.Row + 1

            If Range("Q" & rcell.Row) = Range("Q" & rowset) Then
                Range("R" & rowset) = "RED"
            Else
                Range("R" & rowset) = "GREEN"
            End If
        Loop
    Next rcell
End Sub

3 个答案:

答案 0 :(得分:0)

如果我已经做到了这一点,那么你可以用公式做到这一点: 假设数据达到第100行(待调整),请将其放在C列中,例如:

=SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="bint"))

如果任何行,其中A = x且B =“bint”,则会将1放入C中的所有行,其中A = x。

答案 1 :(得分:0)

Sub test()

Dim PNR As Integer
Dim RowN As Integer


PNR = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row

RowN = 2

For Each Cell In Range("A2:A" & PNR)

    If Cells(RowN, 1) = Cells(RowN + 1, 1) Or Cells(RowN, 1) = Cells(RowN - 1, 1) Then
    Cells(RowN, 2).Value = "Green"
    Else
    Cells(RowN, 2).Value = "Red"
    End If

RowN = RowN + 1
Next Cell

End Sub

我相信这正是你想要实现的目标。

答案 2 :(得分:0)

当我在每个新的策略批次

之间插入一个空行时,这成功了
    Sub test()

Dim PNR As Long
Dim RowN As Long
Dim str As String
Dim str1 As String

 str1 = "Green"
 str = "BINT"

PNR = Worksheets("Page1_1").Cells(Rows.Count, 1).End(xlUp).Row

RowN = 2

For Each Cell In Range("A2:A" & PNR)

    If Cells(RowN, 1) = Cells(RowN + 1, 1) Or Cells(RowN, 1) = Cells(RowN - 1, 1) Then

        If Cells(RowN, 17).Value = str Or Cells(RowN - 1, 18).Value = str1 Then
            Cells(RowN, 18).Value = "Green"

        Else
            Cells(RowN, 18).Value = "Red"
        End If
    End If

RowN = RowN + 1
Next Cell

End Sub