Добрый вечер всем. Есть два файла "старый" и "новый" с одинаковыми столбцами. А вот строки еженедельно добавляются. Нужно сравнивать старый и новый файл по столбцу "F" на предмет появления в новом файле новых значений (строк), которых нет в старом и выделять эти значения цветом. И важно что данные таблиц находятся именно на Листе2.
В "новом" файле в столбе "F" я для наглядности выделила значения которых нет в "старом" файле желтым цветом. Заранее благодарю за любую помощь и советы.
Добрый вечер всем. Есть два файла "старый" и "новый" с одинаковыми столбцами. А вот строки еженедельно добавляются. Нужно сравнивать старый и новый файл по столбцу "F" на предмет появления в новом файле новых значений (строк), которых нет в старом и выделять эти значения цветом. И важно что данные таблиц находятся именно на Листе2.
В "новом" файле в столбе "F" я для наглядности выделила значения которых нет в "старом" файле желтым цветом. Заранее благодарю за любую помощь и советы.ShagiDasha
Для работы этого макроса, оба файла должны находиться в одной папке. Старый файл закройте. Новый файл откройте, перейдите на лист 2 и запустите макрос. В конце работы макроса появится сообщение "Готово".
[vba]
Код
Sub Сравнить_и_закрасить()
Dim shNew As Worksheet, shOld As Worksheet Dim arrNew(), collOld As New Collection Dim arr(), lr As Long, i As Long
Application.ScreenUpdating = False Set shNew = ActiveSheet Set shOld = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\Старый.xlsx", ReadOnly:=True).Worksheets("Лист2") shNew.Columns("F").Interior.ColorIndex = xlColorIndexNone lr = shNew.Cells(shNew.Rows.Count, "A").End(xlUp).Row arrNew() = shNew.Range("F1:F" & lr).Value lr = shOld.Cells(shOld.Rows.Count, "A").End(xlUp).Row arr() = shOld.Range("F1:F" & lr).Value shOld.Parent.Close SaveChanges:=False On Error Resume Next For i = 2 To UBound(arr) collOld.Add Item:="", Key:=CStr(arr(i, 1)) Next i On Error GoTo 0 On Error Resume Next For i = 2 To UBound(arrNew) If collOld(CStr(arrNew(i, 1))) = "" Then End If If Err.Number <> 0 Then shNew.Cells(i, "F").Interior.Color = 65535 Err.Number = 0 End If Next i On Error GoTo 0 Application.ScreenUpdating = True MsgBox "Готово!", vbInformation
End Sub
[/vba]
Для работы этого макроса, оба файла должны находиться в одной папке. Старый файл закройте. Новый файл откройте, перейдите на лист 2 и запустите макрос. В конце работы макроса появится сообщение "Готово".
[vba]
Код
Sub Сравнить_и_закрасить()
Dim shNew As Worksheet, shOld As Worksheet Dim arrNew(), collOld As New Collection Dim arr(), lr As Long, i As Long
Application.ScreenUpdating = False Set shNew = ActiveSheet Set shOld = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\Старый.xlsx", ReadOnly:=True).Worksheets("Лист2") shNew.Columns("F").Interior.ColorIndex = xlColorIndexNone lr = shNew.Cells(shNew.Rows.Count, "A").End(xlUp).Row arrNew() = shNew.Range("F1:F" & lr).Value lr = shOld.Cells(shOld.Rows.Count, "A").End(xlUp).Row arr() = shOld.Range("F1:F" & lr).Value shOld.Parent.Close SaveChanges:=False On Error Resume Next For i = 2 To UBound(arr) collOld.Add Item:="", Key:=CStr(arr(i, 1)) Next i On Error GoTo 0 On Error Resume Next For i = 2 To UBound(arrNew) If collOld(CStr(arrNew(i, 1))) = "" Then End If If Err.Number <> 0 Then shNew.Cells(i, "F").Interior.Color = 65535 Err.Number = 0 End If Next i On Error GoTo 0 Application.ScreenUpdating = True MsgBox "Готово!", vbInformation
Karataev, спасибо за такой быстрый ответ. Вот попробовала макрос на своих файлах. И только сейчас поняла, что существуют дублированные значения по столбцу "F". Например: ячейка с цифрой 18 встречается в файле "старый" два раза, а в файле "новый" три. Но, как я поняла макрос для моего условия из первого сообщения работает по принципу есть совпадение, или нет. А поскольку цифра 18 встречается и в файле "старый" и в файле "новый", то оно и не выделяет цифру 18, которая в файле "новый" встречается третий раз.
Руками я делаю это так: добавляю столбец "G" в файл "новый" в этот столбец копирую столбец "F" из файла "старый", и смотрю где идет несовпадение по двум столбцам добавляю вниз пустые ячейки по столбцу "G". Таким образом выравниваю два столбца и вижу какие значения появились в файле "новый", которых нет в файле "старый". Может такую логику можно как то зашить в макрос? В порядке бреда, мне кажется логику того, что я делаю руками можно описать так: первая несостыковка по столбцам "F" обоих файлов идет на строке 1713. В файле "новый" в ячейке F1713 расположено значение "2260", а в файле "старый" в ячейке F1713 расположено значение "2060". И раз они не совпадают, значит в файле "новый" нужно выделить ячейку F1713. Но при таком сравнении все ячейки идущие после номера 1713 в файле "новый" будут выделены желтым цветом...
Или все-таки нужно предварительно делать уникальное значение в обоих файлах (например сцеплять значения столбца "F" и "G" из примеров первого сообщения), по которому сверять предложенным макросом? Прилагаю файл "новый" с добавленными в нем действиями, которые я проделываю руками. Может так будет понятней...
Karataev, спасибо за такой быстрый ответ. Вот попробовала макрос на своих файлах. И только сейчас поняла, что существуют дублированные значения по столбцу "F". Например: ячейка с цифрой 18 встречается в файле "старый" два раза, а в файле "новый" три. Но, как я поняла макрос для моего условия из первого сообщения работает по принципу есть совпадение, или нет. А поскольку цифра 18 встречается и в файле "старый" и в файле "новый", то оно и не выделяет цифру 18, которая в файле "новый" встречается третий раз.
Руками я делаю это так: добавляю столбец "G" в файл "новый" в этот столбец копирую столбец "F" из файла "старый", и смотрю где идет несовпадение по двум столбцам добавляю вниз пустые ячейки по столбцу "G". Таким образом выравниваю два столбца и вижу какие значения появились в файле "новый", которых нет в файле "старый". Может такую логику можно как то зашить в макрос? В порядке бреда, мне кажется логику того, что я делаю руками можно описать так: первая несостыковка по столбцам "F" обоих файлов идет на строке 1713. В файле "новый" в ячейке F1713 расположено значение "2260", а в файле "старый" в ячейке F1713 расположено значение "2060". И раз они не совпадают, значит в файле "новый" нужно выделить ячейку F1713. Но при таком сравнении все ячейки идущие после номера 1713 в файле "новый" будут выделены желтым цветом...
Или все-таки нужно предварительно делать уникальное значение в обоих файлах (например сцеплять значения столбца "F" и "G" из примеров первого сообщения), по которому сверять предложенным макросом? Прилагаю файл "новый" с добавленными в нем действиями, которые я проделываю руками. Может так будет понятней...ShagiDasha