对于Next循环使用If Then inside无法正常工作

时间:2016-10-07 16:33:01

标签: excel vba excel-vba

这是我的工作表的参考图像,以便每个人都可以看到格式。

http://imgur.com/a/dacIB

这样做的目的是对匹配到列中的数据进行排序。我正在寻找的标准位于右侧,而我正在查看的数据库数据位于左侧。这是我的循环代码。

Dim i As Long
Dim Counter As Long
Dim WS_Count As Long
Dim k As Long

WS_Count = Worksheets.Count
    For k = 4 To WS_Count
            With Worksheets(k)
                For Counter = 0 To ActiveSheet.Rows(1).Cells.Find("QQQ").Offset(0, -1) - 1
                    For i = 0 To ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row - 2
                        If Cells(2 + i, 5).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 1) And _
                            Cells(2 + i, 2).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 3) And _
                            Cells(2 + i, 1).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 2) Then
                              Cells(2 + i, Counter + 7).Value = Cells(2 + i, 4).Value
                        End If
                    Next i
                Next Counter
            End With
     Next k

我需要将D列中的值放入与右侧条件相关的列中。列G:O,编号为1-9,与列T编号1-9匹配。

我不能为我的生活弄清楚为什么,在第4排,它一直都是0。它应按此顺序排列第一列中的所有行>第二列中的所有行> ...>下一张。如果有任何不清楚的地方,请告诉我。

编辑:所以我的Counteri多头略有偏离,所以我做了一些调整。他们应该是正确的,但我的代码仍然没有正确执行。它没有看到它应该的匹配。我的If Then必须弄乱一些方法。

1 个答案:

答案 0 :(得分:1)

Dim i As Long
Dim Counter As Long
Dim WS_Count As Long
Dim k As Long

WS_Count = Worksheets.Count
    For k = 4 To WS_Count
            With Worksheets(k)
                For Counter = 0 To .Rows(1).Cells.Find("QQQ").Offset(0, -1).Value - 1
                    For i = 0 To .Range("A" & .Rows.Count).End(xlUp).Row - 2
                        If .Cells(2 + i, 5).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 1) And _
                            .Cells(2 + i, 2).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 3) And _
                            .Cells(2 + i, 1).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 2) Then
                                  .Cells(2 + i, Counter + 7).Value = .Cells(2 + i, 4).Value
                        End If
                    Next i
                Next Counter
           End With
    Next k

好的,现在就可以了。我认为现在很难搞清楚从哪些表中提取语句。请注意.Cells(.....该句点将单元格定义为ActiveSheet。我还将.Rows(i+2)...更改为.Rows(Counter+2)标准单元格位置将随每个新i向下移动,从而无法进行匹配。屏幕截图中的那个恰巧是巧合。谢谢,希望这能帮助将来的某个人。