Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个excel文件vba_Excel_Vba - Fatal编程技术网

比较两个excel文件vba

比较两个excel文件vba,excel,vba,Excel,Vba,寻找一个VBA代码,在这里我可以比较来自两个不同excel文件的数据,并在第三个excel文件中添加输出 文件可以包含N个列和N个行,它必须进行验证 我有一个代码来比较两张表,但我需要输出如下。 (此vba代码将打开excel文件以读取数据) 输出要求如下 其他代码没有打开该文件,但我需要比较数据并获得如上所述的输出 || 子GetDataFromSingleCell(单元格为字符串) 输出文件包含供参考使用的VBA代码 也许像上面那样读取与excel文件相同的txt文件会很好。试试这个 在运

寻找一个VBA代码,在这里我可以比较来自两个不同excel文件的数据,并在第三个excel文件中添加输出

文件可以包含N个列和N个行,它必须进行验证

  • 我有一个代码来比较两张表,但我需要输出如下。 (此vba代码将打开excel文件以读取数据)
  • 输出要求如下

  • 其他代码没有打开该文件,但我需要比较数据并获得如上所述的输出
  • ||

    子GetDataFromSingleCell(单元格为字符串)

    输出文件包含供参考使用的VBA代码

    也许像上面那样读取与excel文件相同的txt文件会很好。

    试试这个

    在运行代码的工作簿中,您需要一个名为“Compare”的工作表

    子比较()
    变暗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