首页 > 解决方案 > 在两个不同的excel文件vb.net的两个不同列中查找重复数据

问题描述

我的代码根据行以两个不同的方式突出显示两列中的重复值。如果更改列顺序,它以某种方式无法找到重复的值。建议?

Public Sub CompareColumns(sourceCol As String, targetCol As String, sourceExcelFile As String, targetExcelFile As String)

        Try
            excelApp = New Excel.Application()
            excelApp.Visible = False
         excelWorkbook = excelApp.Workbooks.Open(sourceExcelFile)
            excelWorkbook2 = excelApp.Workbooks.Open(targetExcelFile)
            excelWorkSheet1 = excelWorkbook.ActiveSheet
            excelWorkSheet2 = excelWorkbook2.ActiveSheet

            lastLineSource = excelWorkSheet1.UsedRange.Rows.Count
            LastLineTarget = excelWorkSheet2.UsedRange.Rows.Count

            For row As Integer = 1 To lastLineSource
                If excelWorkSheet1.Range(sourceCol & row.ToString()).Value = excelWorkSheet2.Range(targetCol & row.ToString()).Value Then
                     excelWorkSheet2.Range(targetCol & row.ToString()).Interior.Color = 5296274


                End If
            Next

            excelWorkbook.Save()
            excelWorkbook2.Save()
            excelWorkbook.Close()
            excelWorkbook2.Close()


            excelApp.Quit()
        Catch
            Throw
        End Try
    End Sub

预期的输出是在源工作簿中找到的目标工作簿中的所有重复值都将被突出显示,而不管列顺序(排序)

标签: excelvb.netloops

解决方案


所以我认为你应该使用字典: https ://www.dotnetperls.com/dictionary-vbnet

您可以遍历第一个工作簿中的所有值并将其添加到字典中。然后你应该遍历第二个工作簿中的所有单元格,如果你在字典中找到值,那么你有重复,如果没有,那么没有重复。

无论顺序(排序)它都可以工作并且速度非常快。


推荐阅读