Я нашел макрос Excel из этого источника: https://www.mrexcel.com/board/threads/macro-compare-two-sheet-with-rows-in-different-order-using-one-column-as-id.877804/ Я также приложил комментарии автора здесь. Макрос сравнивает два листа Excel из одного файла (с именами Sheet1 и Sheet2), а цвета изменяют ячейки желтого цвета и добавляют строки красного цвета.
Чтобы запустить этот макрос Excel, запустите часть программы «RunCompare» и установить ярлык для него. «Мне удалось создать макрос, который я искал, и вот код на случай, если кому-то понадобится что-то похожее. У него также есть функция очистки всех выделенных ячеек на одном листе или на всех листах. Теперь я буду работать с этим кодом, чтобы сделать то же самое более чем на двух листах.
Sub compare_two_excel_sheets_added_rows()
End Sub
Sub RunCompare()
Call compareSheets("Sheet1", "Sheet2")
End Sub
Sub compareSheets(shtSheet1 As String, shtSheet2 As String)
Dim c As Integer, j As Integer, i As Integer, mydiffs As Integer, cnt1 As Integer, cnt2 As Integer
Dim noexist As Integer
cnt2 = ThisWorkbook.Worksheets("Sheet2").Cells.SpecialCells(xlCellTypeLastCell).Row
cnt1 = ThisWorkbook.Worksheets("Sheet1").Cells.SpecialCells(xlCellTypeLastCell).Row
'For each cell in Sheet2 that is not the same in Sheet1, color it yellow
For i = 1 To cnt2
For j = 1 To cnt1
If ActiveWorkbook.Worksheets(shtSheet2).Cells(i, 1).Value=ActiveWorkbook.Worksheets(shtSheet1).Cells(j, 1).Value Then
For c = 2 To 22
If Not ActiveWorkbook.Worksheets(shtSheet2).Cells(i, c).Value = ActiveWorkbook.Worksheets(shtSheet1).Cells(j, c).Value Then
ActiveWorkbook.Worksheets(shtSheet2).Cells(i, c).Interior.Color = vbYellow
mydiffs = mydiffs + 1
End If
Next
Exit For
End If
If j = cnt1 Then
ActiveWorkbook.Worksheets(shtSheet2).Cells(i, 1).Interior.Color = vbRed
End If
Next
Next
'Display a message box to demonstrate the differences and if there is a new entry on the second sheet
MsgBox mydiffs & ":differences found, " & noexist & ":no exist", vbInformation
ActiveWorkbook.Sheets(shtSheet2).Select
End Sub
Sub Clear_Highlights_this_Sheet()
ActiveSheet.UsedRange. _
Interior.ColorIndex = xlNone
End Sub
Sub Clear_Highlights_All_Sheets()
Dim sht As Worksheet
For Each sht In Sheets
sht.UsedRange.Interior.ColorIndex = xlNone
Next
End Sub
Я задал автору вопрос на исходном сайте, но он / она не отвечает, поэтому я задаю здесь несколько вопросов. Наиболее важные для меня важно то, что этот макрос должен обнаруживать добавленные строки и по-прежнему распознавать измененные ячейки после / ниже добавленных строк (вместо того, чтобы окрашивать все ячейки в желтый после добавленной строки, поскольку они изменились в файле .. .).
1) На каком языке кода этот код находится в точности? VBA?
2) Как изменить код, чтобы он обнаруживал добавленные столбцы так же, как теперь для строк?
3) Почему макрос не всегда работает при обнаружении добавленных строк (он должен окрашивать их в красный цвет)? Он работал нормально, когда я вручную набирал ячейки для двух листов, а затем вручную изменил несколько ячеек из Sheet2, но, кажется, он не всегда работает, когда я копирую (огромное количество) данных (тысячи строк) из двух внешних файлов / листов Excel в новый файл Excel, переименуйте листы в Sheet1 & Sheet2 и запустите макрос для их сравнения (эти два источника данных имеют незначительные изменения, и я должен запустить макрос для распознавания добавленных строк).