首页 > 解决方案 > 用宏比较两个excel文件

问题描述

我需要比较两个excel文件。我有第 S-1 周的数据,我需要知道在下周 S1 中我的数据发生了什么变化。

我的数据与称为“代码功能”的分组

对于每个“代码功能”,我需要知道转换是什么(修改、添加的行或删除的行)。

我试图制作一个代码,我使用逻辑来比较每行的行,并且我设定了“代码功能”在比较的行中必须相同的条件。但是代码没有给我想要的结果。

Option Explicit
Private Sub CommandButton1_Click()
Dim strRepFicA As String, strRepFicB As String
Dim wbFicA As Workbook, wbFicB As Workbook, wbFicAna As Workbook
Dim wsFicA As Worksheet, wsFicB As Worksheet, wsFicAna As Worksheet
Dim lgLig As Long, lgCol As Long
Dim lgLigDeb As Long

' Répertoire et Fichier
strRepFicA = ThisWorkbook.Path & "\" & "S-1.xlsx"
strRepFicB = ThisWorkbook.Path & "\" & "S1.xlsx"

' Classeur d'analyse
Set wbFicAna = ThisWorkbook
Set wsFicAna = wbFicAna.ActiveSheet

' Vérifier que les fichiers A et B se trouvent dans le répertoire
If Dir(strRepFicA) = "" Or Dir(strRepFicB) = "" Then
    MsgBox "Le fichier A et/ou le fichier B sont introuvables", vbCritical + vbOKOnly, "Problème de fichiers..."
    Exit Sub
End If

Application.ScreenUpdating = False

' Ouverture du fichier A et définition de la feuille de traitement
Set wbFicA = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "S-1.xlsx")
Set wsFicA = wbFicA.Worksheets("Sheet1")

' Ouverture du fichier B et définition de la feuille de traitement
Set wbFicB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "S1.xlsx")
Set wsFicB = wbFicB.Worksheets("Sheet1")

' Vider les lignes du fichier d'analyse
wsFicAna.Range("A2:U" & Cells.Rows.Count).ClearContents

' Première ligne d'affichage des résultats dans le fichier d'analyse
lgLigDeb = 2

' Traitement des lignes des 2 fichiers
' Lignes : 2 à 1250
For lgLig = 2 To 7000
    ' Colonnes : D à AO

        ' Une différence est trouvée dans une ligne
        'wsFicA.Cells(lgLig, lgCol).Value <> wsFicB.Cells(lgLig, lgCol).Value
        If wsFicA.Cells(lgLig, 9).Value <> wsFicB.Cells(lgLig, 9).Value And wsFicA.Cells(lgLig, 5).Value = wsFicB.Cells(lgLig, 5).Value Then
            ' Affichage du nom du fichier en colonne A
            wsFicAna.Range("A" & lgLigDeb).Value = wbFicA.Name
            ' Copier la ligne du fichier A dans le fichier d'analyse
            wsFicA.Range("B" & lgLig & ":" & "U" & lgLig).Copy _
                Destination:=wsFicAna.Range("B" & lgLigDeb)

            ' Affichage du nom du fichier en colonne A
            wsFicAna.Range("A" & lgLigDeb + 1).Value = wbFicB.Name
            ' Copier la ligne du fichier B dans le fichier d'analyse
            wsFicB.Range("B" & lgLig & ":" & "U" & lgLig).Copy _
                Destination:=wsFicAna.Range("B" & lgLigDeb + 1)

            lgLigDeb = lgLigDeb + 2

        End If


Next lgLig

' Fermer les fichiers A et B
wbFicA.Close savechanges:=False
wbFicB.Close savechanges:=False

MsgBox "Traitement terminé"

Application.ScreenUpdating = True
End Sub

标签: exceldatabasevba

解决方案


推荐阅读