excel - 循环的大型电子表格比较。有更快的方法吗?
问题描述
我目前正在使用 For 循环遍历 10k 行电子表格,并将数据与另一个类似大小的电子表格进行比较。正如您可能已经猜到的那样,这需要相当长的时间。有更快的方法吗?
我尝试使用从一张纸的顶部开始的 For 循环,然后使用 Find 方法将每一行的信息与第二张纸进行比较。我无法使用自动筛选方法以任何方式缩短搜索范围。
Private Sub Import_NewReport()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Set wb1 = ThisWorkbook
Set wb2 = Application.Workbooks.Open("C:\Users\Owner\Desktop\Order Entry
Summary - Detail Report.csv")
Set ws1 = wb1.Worksheets("Master")
Set ws2 = wb2.Worksheets("Order Entry Summary - Detail Re")
ws1LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
ws2LastRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row
ws2.AutoFilterMode = False
i = 1
For ws2Row = 2 To ws2LastRow
JN = ws2.Cells(ws2Row, "D").Text ' Job Number from New Report
If ws1.Range("D:D").Find(JN) Is Nothing Then
ws1.Cells(ws1LastRow + i, "A").EntireRow.Value = ws2.Cells(ws2Row, "A").EntireRow.Value
ws1.Cells(ws1.Range("D:D").Find(JN).Row, "BB").Value = GetGUID
i = i + 1
Else
rTo = ws1.Range("D:D").Find(JN).Row
ws2.Cells(ws2Row, "A").Resize(, 10).Value = ws1.Cells(rTo, "A").Resize(, 10).Value
ws2.Cells(ws2Row, "M").Resize(, 2).Value = ws1.Cells(rTo, "M").Resize(, 2).Value
ws2.Cells(ws2Row, "Z").Value = ws1.Cells(rTo, "Z").Value
ws2.Cells(ws2Row, "AH").Value = ws1.Cells(rTo, "AH").Value
ws2.Cells(ws2Row, "AB").Value = ws1.Cells(rTo, "AB").Value
ws2.Cells(ws2Row, "AX").Value = ws1.Cells(rTo, "AX").Value
If ws1.Cells(rTo, "BB").Value = "" Then
ws1.Cells(rTo, "BB").Value = GetGUID
End If
End If
Next ws2Row
End Sub
解决方案
推荐阅读
- javascript - 什么是常量 { }
- java - 如何将 Spring 配置文件传递给 Jenkins Job 运行的 Spring Boot 应用程序?
- apache-spark - 过滤后不出现值,但在 groupBy 中出现
- ruby - 如何在没有反斜杠转义的情况下在 Ruby 中执行字符串替换
- c# - 在 C# 控制台应用程序中下载将部署为 Azure WebJob 的文件
- go - Golang toString 用于接口和结构实现
- javascript - 在 Javascript/HTML 中将 Firebase 数据显示为数组
- opencl - 如何在 OpenCL 中使用 __local 变量?
- python - 检查子字符串匹配并创建新列表
- android - 如何使用基本适配器为网格视图项制作上下文菜单?