这是我的工作表的参考图像,以便每个人都可以看到格式。
https://i.stack.imgur.com/9d4CY.jpg这样做的目的是将匹配的数据排序成列。我要找的标准在右边我要找的数据库数据在左边。这是我的循环代码。
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: 0,编号1-9,与列T编号1-9相匹配。
我无论如何也弄不明白,为什么在第4行,它的每一行都是0。它应该是这样的顺序第一列的所有行>第二列的所有行>…下一页。如果有什么不清楚的,请告诉我。
编辑:所以我的Counter
和i
的长度稍微偏离,所以我做了一些调整。他们应该是对的,但我的代码仍然没有正确执行。它没有看到它应该看到的比赛。我的If Then
肯定是坏了。
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(.....
,该周期使cell定义为ActiveSheet
。我还将.Rows(i+2)...
更改为.Rows(Counter+2)
,标准单元格位置将随着每个新的i
而向下移动,从而不可能有匹配。截图中的那个只是巧合。谢谢,希望这对将来的人有所帮助。