用于将列中的每个单元格与另一列中的每个单元格进行比较的代码

时间:2016-03-31 13:26:52

标签: excel vba excel-vba

我有两列随机时间,时间来自两个不同的来源,所以列没有相同数量的数据点。我想在第一列中第一次开始,并将其与第二列中的每次比较。如果时间匹配,我想提取相关数据。找到匹配后(如果有)我希望代码转到第一列中的第二个单元格并将其与第二列中的每个值进行比较,依此类推。

这是我到目前为止的代码:

Sub TransferInfo()

'Activate the Sub to Convert and Format Dates
Call ConvertDates

'Define Variables
Dim st As Worksheet
Dim ts As Worksheet
Dim lastrow As Long
Dim i As Integer
j = 2

'Find and set the last used row
Set st = ThisWorkbook.Worksheets("Data Table")
lastrow = st.Cells(st.Rows.Count, "B").End(xlUp).Row
Set ts = ThisWorkbook.Worksheets("ShopFloor")

'Cycle through/compare Row J, Column 18 based on each cell in Row I, Column 14
For i = 2 To lastrow
    Do Until IsEmpty(ts.Cells(j, 8)) Or IsEmpty(st.Cells(j, 2))
        If st.Cells(i, 14).Value = ts.Cells(j, 18).Value Then  
    st.Cells(i, 15).Value = ts.Cells(j, 2).Value
    Exit Do
    Else
    st.Cells(i, 15).Value = ""
    End If
    j = j + 1
  Loop
j = 2
Next i

End Sub

我在此子句开头调用的另一个子项只是将每列中的时间四舍五入到最接近的15分钟间隔,以增加列之间匹配的可能性。

我的问题是:代码不会复制和粘贴任何更多信息,尽管两列之间有时匹配。为什么我的代码不起作用?此外,对于更大的数据集,我担心这个代码可能会崩溃Excel,因为我在循环中有一个循环试图很多次处理大量数据,但我不知道更有效的方法没有这个代码就能完成我的努力。

如果有人对此代码无效的原因有任何见解,我将非常感谢您的帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的代码,您看起来只需要一个INDEX / MATCH公式。在O2中使用它并复制下来:

=IFERROR(INDEX(B:B,MATCH(N2,R:R,0)),"")

不需要VBA