比较两个excel文件vba
寻找一个VBA代码,在这里我可以比较来自两个不同excel文件的数据,并在第三个excel文件中添加输出 文件可以包含N个列和N个行,它必须进行验证比较两个excel文件vba,excel,vba,Excel,Vba,寻找一个VBA代码,在这里我可以比较来自两个不同excel文件的数据,并在第三个excel文件中添加输出 文件可以包含N个列和N个行,它必须进行验证 我有一个代码来比较两张表,但我需要输出如下。 (此vba代码将打开excel文件以读取数据) 输出要求如下 其他代码没有打开该文件,但我需要比较数据并获得如上所述的输出 || 子GetDataFromSingleCell(单元格为字符串) 输出文件包含供参考使用的VBA代码 也许像上面那样读取与excel文件相同的txt文件会很好。试试这个 在运
子比较()
变暗Rng1作为范围,Rng2作为范围,arr1,arr2,ARROT
变暗rw为长,col为长,c为长,v1,v2
'打开工作簿并指定范围
设置Rng1=工作簿。打开(“F:\Learning\Book1.xlsx”)。工作表(1)。UsedRange
设置Rng2=工作簿。打开(“F:\Learning\Book2.xlsx”)。工作表(1)。UsedRange
“检查范围是可比较的
如果Rng1.Rows.Count Rng2.Rows.Count或_
Rng1.Columns.Count Rng2.Columns.Count然后
MsgBox“范围大小不同!”
出口接头
如果结束
'从阵列读取的速度更快。。。
arr1=Rng1.值
arr2=Rng2.值
'输出大小数组(每个输入列需要3个输出列)
雷迪姆区域(1至UBound(arr1,1),1至3*UBound(arr1,2))
对于rw=1至UBound(arr1,1)
c=1'输出数组中的起始列位置
对于col=1到UBound(arr1,2)
v1=arr1(rw,col)
v2=arr2(rw,col)
如果rw=1,则
'此处的列标题。。。
arrOut(rw,c)=v1&“\u book1”
arrOut(rw,c+1)=v2&“第二册”
区域(rw,c+2)=“比较”
其他的
'列值比较
arrOut(rw,c)=v1
区域(rw,c+1)=v2
区域(rw,c+2)=IIf(v1=v2,“通过”、“失败”)
如果结束
c=c+3
下一列
下一个rw
'将结果数组放在工作表上
使用此工作簿.Sheets(“比较”)
.UsedRange.ClearContents
.范围(“A1”).调整大小(UBound(arrOut,1),UBound(arrOut,2))。值=arrOut
以
端接头
旁注:。由于数据量巨大,无法打开excel文件。因此,我需要一个VBA代码来帮助我。您需要提供有关如何比较这两个文件的详细信息。它们的结构是否相同?行的顺序是否相同?两个文件是否包含相同数量的数据?为什么一个比较“通过”,另一个比较“正确/错误”?这里缺少很多必要的信息。是的。结构化行和行的顺序相同。谢谢,更新了那些正确/错误的内容。如果我有30000000行,但我只想验证10000行。你能告诉我应该在哪里添加它吗@Tim Williamsabove logic我们可以在不打开excel文件的情况下申请代码吗@tim Williamsin代替For rw=1 To UBound(arr1,1)
使用For rw=1 To 10000
否此代码将要求您打开文件。有没有类似于上述的方法而不打开excel文件,应该完成上述任务?如果我只想添加失败的列以输出excel,我需要更新哪些代码@蒂姆威廉姆斯
Sub Compare()
Dim WorkRng1 As Range, WorkRng2 As Range, Rng1 As Range, Rng2 As Range
Set objWorkbook1 = Workbooks.Open("F:\Learning\Book1.xlsx")
Set objWorkbook2 = Workbooks.Open("F:\Learning\Book2.xlsx")
Set objWorksheet1 = objWorkbook1.Worksheets(1)
Set objWorksheet2 = objWorkbook2.Worksheets(1)
Set WorkRng1 = objWorksheet1.UsedRange
Set WorkRng2 = objWorksheet2.UsedRange
For Each Rng1 In WorkRng1
Rng1.Value = Rng1.Value
For Each Rng2 In WorkRng2
If Rng1.Value = Rng2.Value Then
Exit For
End If
Next
Next
End Sub
Name_Book1 | Name_Book2 | Compare | Amount_book1 | Amount_book2| Compare
Store_1 | Store_1 | Pass | 362 | 420 | Fail
Store_2 | Store_2 | Pass | 400 | 360 |Fail
Store_3 | Store_3 | Pass | 922 | 520 | Fail
Store_4 | Store_4 | Pass | 600 | 320 | Fail
Store_5 | Store_5 | Pass | 400 | 400 | Pass
Dim srcCN As Object ' ADODB.Connection
Dim srcRS As Object ' ADODB.Recordset
Set srcCN = CreateObject("ADODB.Connection")
Set srcRS = CreateObject("ADODB.Recordset")
srcCN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & CStr("F:\Learning\Book1.xlsx") & _
";" & "Extended Properties=""Excel 12.0;HDR=No;"";"
srcRS.Open "SELECT * FROM [Sheet1$" & cell & ":" & cell & "];", srcCN, 3, 1 'adOpenStatic, adLockReadOnly
srctxt = srcRS.Fields(0).Value
Dim trgCN As Object ' ADODB.Connection
Dim trgRS As Object ' ADODB.Recordset
Set trgCN = CreateObject("ADODB.Connection")
Set trgRS = CreateObject("ADODB.Recordset")
trgCN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & CStr("F:\Learning\Book2.xlsx") & _
";" & "Extended Properties=""Excel 12.0;HDR=No;"";"
trgRS.Open "SELECT * FROM [Sheet1$" & cell & ":" & cell & "];", trgCN, 3, 1 'adOpenStatic, adLockReadOnly
trgtxt = trgRS.Fields(0).Value
If srctxt = trgtxt Then
Sheet1.Cells(1, 2) = "Passed"
Else
Sheet1.Cells(1, 2) = "Failed"
End If
End Sub