In this post, you will see how to drag and drop two Excel files to compare.
- Download source code — 24.3 KB
Introduction
Drag and drop two Excel files to compare.
The changes will be highlighted in yellow. Use ExcelCompare.vbs to compare cells.
If your Excel files might have new rows or columns, use ExcelRowCompare.vbs.
Using the Code
ExcelRowCompare.vbs compares rows, column and cells. You can modify the code to exclude some worksheets or to save the file at the end. The script might take a long time to run depending on the size of the files.
Const sFirstColData = "Calendar" Set fso = CreateObject("Scripting.FileSystemObject") Dim sFilePath1, sFilePath2 If WScript.Arguments.Count = 2 then sFilePath1 = WScript.Arguments(0) sFilePath2 = WScript.Arguments(1) Else MsgBox("Please drag and drop two excel files.") Wscript.Quit End If If fso.FileExists(sFilePath1) = False Then MsgBox "File 1 is missing: " & sFilePath1 Wscript.Quit End If If fso.FileExists(sFilePath2) = False Then MsgBox "File 2 is missing: " & sFilePath2 Wscript.Quit End If Dim sMissingSheets: sMissingSheets = "" Dim iDiffCell: iDiffCell = 0 Dim iDiffRow: iDiffRow = 0 Dim iDiffCol: iDiffCol = 0 Dim oExcel: Set oExcel = CreateObject("Excel.Application") oExcel.Visible = True oExcel.DisplayAlerts = false Set oWorkBook1 = oExcel.Workbooks.Open(sFilePath1) Set oWorkBook2 = oExcel.Workbooks.Open(sFilePath2) For Each oSheet in oWorkBook1.Worksheets If SheetExists(oWorkBook2, oSheet.Name) = False Then if sMissingSheets <> "" Then sMissingSheets = sMissingSheets & "," sMissingSheets = sMissingSheets & oSheet.Name Else oSheet.Activate Set oSheet2 = oWorkBook2.Worksheets(oSheet.Name) Set rs = GetExcelRecordset(oSheet) Set rs2 = GetExcelRecordset(oSheet2) CompareCells oSheet, rs, oSheet2, rs2 CompareCells oSheet2, rs2, oSheet, rs End If Next For Each oSheet in oWorkBook2.Worksheets If SheetExists(oWorkBook1, oSheet.Name) = False Then if sMissingSheets <> "" Then sMissingSheets = sMissingSheets & "," sMissingSheets = sMissingSheets & oSheet.Name End If Next Dim sDiff: sDiff = "" if iDiffCell <> 0 Then sDiff = sDiff & iDiffCell & " cell differences." End If if iDiffRow <> 0 Then if sDiff <> "" Then sDiff = sDiff & " " sDiff = sDiff & iDiffRow & " row differences." End If if iDiffCol <> 0 Then if iDiffCol <> "" Then sDiff = sDiff & " " sDiff = sDiff & iDiffCol & " column differences." End If If sMissingSheets <> "" Then if sDiff <> "" Then sDiff = sDiff & " " sDiff = sDiff & "Missing Worksheets: " & sMissingSheets & "." End If If sDiff = "" Then MsgBox "Files match" Else MsgBox "Found " & sDiff End If Sub CompareCells(oSheet, rs, oSheet2, rs2) ResetRs rs ResetRs rs2 Dim oColDiff: Set oColDiff = CreateObject("Scripting.Dictionary") Dim col: Set col = GetColDiff(oSheet,oSheet2) Dim iRow, iRow2 While rs.EOF = False iRow = rs("RowNumber").Value sFirstCol = rs("c1").value & "" If sFirstCol <> "" Then rs2.Filter = "c1 = '" & sFirstCol & "'" If rs2.RecordCount = 0 Then oSheet.Rows(iRow & ":" & iRow).Interior.Color = RGB(219, 255, 0) iDiffRow = iDiffRow + 1 ElseIf rs2.RecordCount = 1 Then iRow2 = rs2("RowNumber").Value For iCol = 1 to rs.Fields.Count - 1 iCol2 = iCol If col.Exists(iCol) Then iCol2 = col(iCol) End If If iCol2 = -1 Then If oColDiff.Exists(iCol) = False Then oSheet.Columns(iCol).Interior.Color = RGB(219, 255, 51) oColDiff(iCol) = True End If ElseIf iCol >= rs.Fields.Count Or iCol2 >= rs2.Fields.Count Then ElseIf rs(iCol).Value & "" <> rs2(iCol2).Value & "" Then oSheet.Cells(iRow, iCol ).Interior.Color = 65535 iDiffCell = iDiffCell + 1 End If Next End If End If rs.MoveNext Wend If oColDiff.Count > 0 Then iDiffCol = iDiffCol + oColDiff.Count End If End Sub Sub ResetRs(rs) rs.Filter = "" If rs.RecordCount > 0 Then rs.MoveFirst End If End Sub Function GetColDiff(oSheet,oSheet2) Dim oRet: Set oRet = CreateObject("Scripting.Dictionary") Dim oCols: Set oCols = GetExcelColumns(oSheet) Dim oCols2: Set oCols2 = GetExcelColumns(oSheet2) Dim iCol: iCol = 0 For Each sKey In oCols.Keys iCol = oCols(sKey) If oCols2.Exists(sKey) Then If iCol <> oCols2(sKey) Then oRet(iCol) = oCols2(sKey) End If Else oRet(iCol) = -1 End If Next Set GetColDiff = oRet End Function Function GetExcelColumns(oSheet) Dim oCols: Set oCols = CreateObject("Scripting.Dictionary") Dim iHeaderRow: iHeaderRow = 1 If sFirstColData <> "" Then For i = 1 to 100 If oSheet.Cells(i, 1).Value = sFirstColData Then iHeaderRow = i -1 Exit For End If Next End If Dim iColCount: iColCount = GetLastCol(oSheet) For iCol = 1 to iColCount sVal = oSheet.Cells(iHeaderRow, iCol).Value If sVal <> "" Then oCols(sVal) = iCol End If Next Set GetExcelColumns = oCols End Function Function GetExcelRecordset(oSheet) Dim iColCount: iColCount = GetLastCol(oSheet) Dim iRowsCount: iRowsCount = GetLastRowWithData(oSheet) Dim rs: Set rs= CreateObject("ADODB.recordset") rs.Fields.Append "RowNumber", 3 For iCol = 1 to iColCount rs.Fields.Append "c" & iCol, 200, -1 Next rs.Open For iRow = 1 to iRowsCount rs.AddNew rs("RowNumber") = iRow For iCol = 1 to iColCount rs("c" & iCol) = oSheet.Cells(iRow, iCol).Value Next Next rs.MoveFirst Set GetExcelRecordset = rs End Function Function GetLastRowWithData(oSheet) Dim iMaxRow: iMaxRow = oSheet.UsedRange.Rows.Count If iMaxRow > 500 Then iMaxRow = oSheet.Cells.Find("*", oSheet.Cells(1, 1), -4163, , 1, 2).Row End If Dim iRow, iCol For iRow = iMaxRow to 1 Step -1 For iCol = 1 to oSheet.UsedRange.Columns.Count If Trim(oSheet.Cells(iRow, iCol).Value) <> "" Then GetLastRowWithData = iRow Exit Function End If Next Next GetLastRowWithData = 1 End Function Function GetLastCol(st) GetLastCol = st.Cells.Find("*", st.Cells(1, 1), , 2, 2, 2, False).Column End Function Function SheetExists(oWorkBook, sName) on error resume next Dim oSheet: Set oSheet = oWorkBook.Worksheets(sName) If Err.number = 0 Then SheetExists = True Else SheetExists = False Err.Clear End If End Function
ExcelCompare.vbs compares cells. It is smaller and can be more easily understood.
Set fso = CreateObject("Scripting.FileSystemObject") Dim sFilePath1, sFilePath2 If WScript.Arguments.Count = 2 then sFilePath1 = WScript.Arguments(0) sFilePath2 = WScript.Arguments(1) Else MsgBox("Please drag and drop two excel files.") Wscript.Quit End If If fso.FileExists(sFilePath1) = False Then MsgBox "File 1 is missing: " & sFilePath1 Wscript.Quit End If If fso.FileExists(sFilePath2) = False Then MsgBox "File 2 is missing: " & sFilePath2 Wscript.Quit End If Dim sMissingSheets: sMissingSheets = "" Dim iDiffCount: iDiffCount = 0 Dim oExcel: Set oExcel = CreateObject("Excel.Application") oExcel.Visible = True oExcel.DisplayAlerts = false Set oWorkBook1 = oExcel.Workbooks.Open(sFilePath1) Set oWorkBook2 = oExcel.Workbooks.Open(sFilePath2) For Each oSheet in oWorkBook1.Worksheets If SheetExists(oWorkBook2, oSheet.Name) = False Then if sMissingSheets <> "" Then sMissingSheets = sMissingSheets & "," sMissingSheets = sMissingSheets & oSheet.Name Else oSheet.Activate Set oSheet2 = oWorkBook2.Worksheets(oSheet.Name) iColCount = GetLastCol(oSheet) iRowsCount = GetLastRowWithData(oSheet) For iRow = 1 to iRowsCount For iCol = 1 to iColCount If oSheet.Cells(iRow, iCol).Value <> oSheet2.Cells(iRow, iCol).Value Then oSheet.Cells(iRow, iCol).Interior.Color = 65535 oSheet2.Cells(iRow, iCol).Interior.Color = 65535 iDiffCount = iDiffCount + 1 End If Next Next End If Next For Each oSheet in oWorkBook2.Worksheets If SheetExists(oWorkBook1, oSheet.Name) = False Then if sMissingSheets <> "" Then sMissingSheets = sMissingSheets & "," sMissingSheets = sMissingSheets & oSheet.Name End If Next If iDiffCount = 0 Then MsgBox "Files match" Else MsgBox "Found " & iDiffCount & " differences" End If If sMissingSheets <> "" Then MsgBox "Missing Worksheets: " & sMissingSheets End If Function GetLastRowWithData(oSheet) Dim iMaxRow: iMaxRow = oSheet.UsedRange.Rows.Count If iMaxRow > 500 Then iMaxRow = oSheet.Cells.Find("*", oSheet.Cells(1, 1), -4163, , 1, 2).Row End If Dim iRow, iCol For iRow = iMaxRow to 1 Step -1 For iCol = 1 to oSheet.UsedRange.Columns.Count If Trim(oSheet.Cells(iRow, iCol).Value) <> "" Then GetLastRowWithData = iRow Exit Function End If Next Next GetLastRowWithData = 1 End Function Function GetLastCol(st) GetLastCol = st.Cells.Find("*", st.Cells(1, 1), , 2, 2, 2, False).Column End Function Function SheetExists(oWorkBook, sName) on error resume next Dim oSheet: Set oSheet = oWorkBook.Worksheets(sName) If Err.number = 0 Then SheetExists = True Else SheetExists = False Err.Clear End If End Function
History
- 18th November, 2020: Initial version
- 1st December, 2020: Added ExcelRowCompare.vbs
Igor is a business intelligence consultant working in Tampa, Florida. He has a BS in Finance from University of South Carolina and Masters in Information Management System from University of South Florida. He also has following professional certifications: MCSD, MCDBA, MCAD.
Skip to content
В этом руководстве вы познакомитесь с различными методами сравнения таблиц Excel и определения различий между ними. Узнайте, как просматривать две таблицы рядом, как использовать формулы для создания отчета о различиях, выделить несовпадения с помощью условного форматирования и многое другое.
Когда у вас есть две похожие книги Эксель или, лучше сказать, две версии одной и той же книги, что вы обычно хотите с ними делать в первую очередь? Сравнить их на предмет различий, а затем, возможно, объединить в один файл. Кроме того, такая операция может помочь вам обнаружить потенциальные проблемы, такие как битые ссылки, повторяющиеся записи, несогласованные формулы.
- Визуальное сравнение таблиц.
- Быстрое выделение различий.
- Использование формулы сравнения.
- Как вывести различия на отдельном листе.
- Как можно использовать функцию ВПР.
- Выделение различий условным форматированием.
- Сопоставление при помощи сводной таблицы.
- Сравнение таблиц при помощи Pover Query.
- Инструмент сравнения таблиц Ultimate Suite.
Итак, давайте более подробно рассмотрим различные методы сравнения таблиц Excel и выявления различий между ними.
Просмотр рядом, чтобы сравнить таблицы.
Если у вас относительно небольшие файлы и вы внимательны к деталям, этот быстрый и простой способ сравнения может вам подойти. Я говорю о режиме «Просмотр рядом», который позволяет расположить два окна Excel рядом. Вы можете использовать этот метод для визуального сравнения двух таблиц или двух листов из одной книги.
Сравните 2 книги.
Предположим, у вас есть отчеты о продажах за два месяца, и вы хотите просмотреть их оба одновременно, чтобы понять, какие товары показали лучшие результаты в этом месяце, а какие — в прошлом.
Чтобы просмотреть два файла Эксель рядом, сделайте следующее:
- Откройте оба файла.
- Перейдите на вкладку «Вид» и нажмите кнопку «Рядом». (1) Это оно!
По умолчанию два отдельных окна Excel отображаются горизонтально.
Чтобы разделить окна по вертикали, нажмите кнопку «Упорядочить все» (3) и выберите «Рядом» (4):
В результате два отдельных окна будут расположены, как на скриншоте.
Если вы хотите прокручивать оба листа одновременно, чтобы сравнивать данные строка за строкой, убедитесь, что параметр синхронной прокрутки (2) включен. Он обычно включается автоматически, как только вы активируете режим одновременного просмотра двух книг.
Расположите рядом несколько таблиц Excel.
Чтобы просматривать более двух файлов одновременно, откройте все книги, которые вы хотите сравнить, и нажмите кнопку «Рядом».
Появится диалоговое окно «Сравнить рядом», в котором вы выберете файлы, которые будут отображаться вместе с активной книгой.
Чтобы просмотреть все открытые файлы одновременно, нажмите кнопку «Упорядочить все» и выберите предпочтительное расположение: мозаичное, горизонтальное, вертикальное или каскадное.
Для небольших таблиц вы легко сможете визуально сравнить их данные. Хотя, конечно, риск ошибки из-за человеческого фактора здесь присутствует.
Сравните два листа в одной книге.
Иногда 2 листа, которые вы хотите сравнить, находятся в одной книге. Чтобы просмотреть их рядом, выполните следующие действия.
- Откройте файл, перейдите на вкладку «Вид» и нажмите кнопку «Новое окно».
- Это действие откроет тот же файл в дополнительном окне.
- Включите режим просмотра «Рядом», нажав соответствующую кнопку на ленте.
- Выберите лист 1 в первом окне и лист 2 во втором окне.
Быстрое выделение значений, которые различаются.
Это также не очень обременительный способ. Если вам просто нужно найти и удостовериться в наличии или же отсутствии отличий между записями, вам нужно на вкладке «Главная», выбрать кнопку «Найти и выделить», предварительно выделив диапазон, где надо сравнить данные в Эксель.
В открывшемся меню выберите пункт «Выделить группу ячеек…» и в появившемся диалоговом окне выберите «отличия по строкам».
К сожалению, это нормально работает только для сравнения 2 столбцов (или строк), а не всей таблицы целиком. Кроме того, строки должны быть одинаковым образом отсортированы, поскольку ячейки сравниваются построчно. Если у вас товары отсортированы по-разному, либо вообще различный ассортимент, то никакой пользы от этого метода не будет.
Формула сравнения.
Это самый простой способ соотнесения таблиц в Excel, который позволяет идентифицировать в них ячейки с разными значениями.
Простейший вариант – сопоставление двух таблиц, находящихся на одном листе. Можно соотносить как числовые, так и текстовые значения, всего-навсего прописав в одной из соседних ячеек формулу их равенства. В результате при тождестве ячеек мы получим сообщение ИСТИНА, в противном случае — ЛОЖЬ.
Предположим, у нас имеется два прайс-листа (старый и новый), в которых на некоторые товары различаются цены. При этом порядок следования товаров одинаков. Поэтому мы можем при помощи простейшей формулы прямо на этом же листе сравнить идентичные ячейки с данными.
=G3=C3
Результатом будет являться либо ИСТИНА (в случае совпадения), либо ЛОЖЬ (при отрицательном результате).
Таким же образом можно производить сравнение данных в таблицах, которые расположены на разных листах. Процедура сравнения практически точно такая, как была описана выше, кроме того факта, что при создании формулы придется переключаться между листами. В нашем случае выражение будет иметь следующий вид:
=G3=Лист2!C3
Если ваши таблицы достаточно велики, то довольно утомительно будет просматривать колонку I на предмет поиска слова ЛОЖЬ. Поэтому может быть полезным сразу определить — а есть ли вообще несовпадения?
Можно подсчитать общее количество расхождений и сразу вывести это число где-нибудь отдельно.
=СУММПРОИЗВ(—(C3:C25<>G3:G25))
или можно сделать это формулой массива
{=СУММ(—(C3:C25<>G3:G25))}
Если формула возвращает ноль, значит, данные полностью совпадают. Ну а ежели результат положительный, то нужны более детальные исследования. О них мы и поговорим далее.
Как произвести сравнение на отдельном листе.
Чтобы сравнить два листа Эксель на предмет различий, просто откройте новый пустой лист, введите следующую формулу в ячейку A1, а затем скопируйте ее вниз и вправо, перетащив маркер заполнения:
=ЕСЛИ(Лист1!A1 <> Лист2!A1; «Лист1:»&Лист1!A1&» — Лист2:»&Лист2!A1; «»)
Поскольку мы используем относительные ссылки на ячейки, формула будет меняться в зависимости от расположения столбца и строки. В результате формула в A1 будет сравнивать ячейки A1 в Лист1 и Лист2, формула в B1 будет сравнивать ячейку B1 на обоих листах и так далее. Результат будет выглядеть примерно так:
В результате вы получите отчет о различиях на новом листе. Думаю, это достаточно информативно.
Как вы можете видеть на приведенном выше рисунке, формула сравнивает 2 листа, находит ячейки с разными значениями и отображает различия в соответствующих местах.
Обратите внимание, что в отчете о различиях (ячейка D4) даты представлены числами, поскольку в таком виде они хранятся во внутренней системе Excel, что не очень удобно для анализа различий между ними.
Как сравнить две таблицы при помощи формулы ВПР.
Предположим, у нас снова 2 прайс-листа. Однако, в отличие от предыдущего примера, они содержат разное количество товаров, да и сами товары расположены в произвольном порядке. Поэтому описанный выше способ, когда мы построчно сравнивали две таблицы, здесь не сработает.
Нам необходимо последовательно взять каждый товар из одной таблицы, найти его во второй, извлечь оттуда его цену и сравнить с первоначальной ценой. Здесь нам не обойтись без формул поиска. Поможет нам функция ВПР.
Для наглядности расположим обе таблицы на одном листе.
Формула
=ЕСЛИОШИБКА(ВПР(F3;$B$3:$C$18;2;0);0)
берёт наименование товара из второго прайса, ищет его в первом, и в случае удачи извлекает соответствующую цену из первой таблицы. Она будет записана рядом с новой ценой в столбце H. Если поиск завершился неудачей, то есть такого товара ранее не было, то ставим 0. Таким образом, старая и новая цена оказываются рядом, и их легко сравнить простейшей операцией вычитания. Что и сделано в столбце I.
Аналогично можно сопоставлять и данные на разных листах. Просто нужно соответствующим образом изменить ссылки в формуле, указав в них имя листа.
Вот еще один пример. Возьмём за основу более новую информацию, то есть второй прайс. Выведем только сведения о том, какие цены и на какие товары изменились. А то, что не изменилось, выводить в итоговом отчёте не будем.
Разберём действия пошагово. Формула в ячейке J3 ищет наименование товара из первой позиции второй таблицы внутри первой. Если таковое найдено, извлекается соответствующая этому товару старая цена и сразу же сравнивается с новой. Если они одинаковы, то в ячейку записывается пустота «».
=ЕСЛИ(ЕСЛИОШИБКА(ВПР(F3;$B$3:$C$18;2;0);0)=G3;»»;ЕСЛИОШИБКА(ВПР(F3;$B$3:$C$18;2;0);0))
Таким образом, в ячейке J3 будет указана старая цена, если ее удастся найти, а также если она не равна новой.
Далее если ячейка J3 не пустая, то в I3 будет указано наименование товара —
=ЕСЛИ(J3<>»»;F3;»»)
а в K3 – его новая цена:
=ЕСЛИ(J3<>»»;G3;»»)
Ну а далее в L3 просто найдем разность K3-J3.
Таким образом, в отчёте сравнения мы видим только несовпадения значений второй таблицы по сравнению с первой.
И еще один пример, который может быть полезен. Попытаемся сравнить в итоговой таблице оба прайс-листа с эталонным общим списком товаров.
В ячейке B2 запишем формулу
=ЕСЛИ(ЕНД(ВПР(A2;Прайс1!$B$3:$B$19;1;0));»Нет»;ВПР(A2;Прайс1!$B$3:$C$19;2;0))
Так мы выясним, какие цены из второй таблицы встречаются в первой.
Для каждой цены из первого прайса проверяем, совпадает ли она с новыми данными —
=ЕСЛИ(ЕНД(ВПР(A2;Прайс2!$B$3:$B$22;1;0));»Нет»;ВПР(A2;Прайс2!$B$3:$C$22;2;0))
Эталонный список находится у нас в столбце A. В результате мы получили своего рода сводную таблицу цен – старых и новых.
Еще несколько примеров использования функции ВПР для сравнения таблиц вы можете найти в этой статье.
Выделение различий между таблицами цветом.
Чтобы закрасить ячейки с разными значениями на двух листах выбранным вами цветом, используйте функцию условного форматирования Excel:
- На листе, где вы хотите выделить различия, выберите все используемые ячейки. Для этого щелкните верхнюю левую ячейку используемого диапазона, обычно A1, и нажмите
Ctrl + Shift + End
, чтобы расширить выделение до последней использованной ячейки. - На вкладке Главная кликните Условное форматирование > Новое правило и создайте его со следующей формулой:
=A1<>Лист2!A1
Где Лист2 — это имя другого листа, который вы сравниваете с текущим.
В результате ячейки с разными значениями будут выделены выбранным вами цветом:
Если вы не очень хорошо знакомы с условным форматированием, вы можете найти подробные инструкции по созданию правила в следующем руководстве: Условное форматирование Excel в зависимости от значения ячейки.
Сравнение при помощи сводной таблицы.
Хороший вариант сравнения — объединить таблицы в единую сводную, и там уже сопоставлять данные между собой.
Вернемся к нашему примеру с двумя прайс-листами. Объединим наши данные на одном листе. Чтобы отличить данные одной таблицы от другой, добавим вспомогательный столбец D и укажем в нем, откуда именно взяты данные:
А теперь приступим к созданию сводной таблицы. Я не буду подробно останавливаться на том, как мы это будем делать. Все шаги подробно описаны в статье Как сделать сводную таблицу в Excel.
Поместим поле Товар в область строк, поле Прайс в область столбцов и поле Цена в область значений.
Как видно на скриншоте ниже, для каждого товара, встречающегося хотя бы в одном из прайсов, указана цена.
Сводная таблица автоматически сформирует общий список всех товаров из старого и нового прайсов и сортирует их по алфавиту. Причём, без повторов. У новых товаров нет старой цены, у удаленных товаров — новой цены. Легко увидеть изменения цен, если таковые были.
Общие итоги здесь смысла не имеют, и их можно отключить на вкладке Конструктор — Общие итоги — Отключить для строк и столбцов.
Если изменятся цены, то достаточно просто обновить созданную сводную, щелкнув по ней правой кнопкой мыши — Обновить. А вот если изменится список товаров или добавится новый файл для сравнения, то придется заново формировать исходный массив или же добавлять в него новые данные.
Плюсы: такой подход на порядок быстрее работает с большими объемами данных, чем ВПР. Можно сравнить данные нескольких таблиц.
Минусы: надо вручную копировать данные в одну большую таблицу и добавлять столбец с названием исходного файла.
Сравнение таблиц с помощью Power Query
Power Query — это бесплатная надстройка для Microsoft Excel, позволяющая загружать в него данные практически из любых источников и преобразовывать потом их желаемым образом. В Excel 2016 эта надстройка уже встроена по умолчанию на вкладке Данные, а для более ранних версий ее нужно отдельно скачать с сайта Microsoft и установить.
Перед загрузкой наших прайс-листов в Power Query их необходимо преобразовать сначала в умные таблицы. Для этого выделим диапазон с данными и нажмем на клавиатуре сочетание Ctrl+T
или выберем на ленте вкладку Главная — Форматировать как таблицу. Имена созданных таблиц можно изменить на вкладке Конструктор (я оставлю стандартные Таблица1 и Таблица2, которые генерируются по умолчанию).
Загрузите первый прайс в Power Query с помощью кнопки Из таблицы/диапазона на вкладке Данные.
После загрузки вернемся обратно в Excel из Power Query командой Закрыть и загрузить — Закрыть и загрузить в…
В появившемся затем окне выбираем «Только создать подключение».
Повторите те же действия с новым прайс-листом.
Теперь создадим третий запрос, который будет объединять и сравнивать данных из предыдущих двух. Для этого выберем на вкладке Данные — Получить данные — Объединить запросы — Объединить. Все шаги вы видите на скриншоте ниже.
В окне объединения выберем в выпадающих списках наши таблицы, выделим в них столбцы с названиями товаров и в нижней части определим способ объединения — Полное внешнее.
После нажатия на ОК должна появиться таблица из четырёх столбцов, где в четвертой колонке нужно развернуть вложенное содержимое с помощью двойной стрелки в шапке.
После нажатия вы увидите список столбцов из второго прайса. Выбираем Товар и Цена. Получаем следующую картину:
А теперь сравним цены. Идем на вкладку Добавление столбца и жмем на кнопку Условный столбец. А затем в открывшемся окне вводим несколько условий проверки с соответствующими им значениями, которые нужно отобразить:
Теперь осталось вернуться на вкладку Главная и нажать Закрыть и загрузить.
Получаем новый лист в нашей рабочей книге:
Примечание. Если в будущем в наших прайс-листах произойдут любые изменения (добавятся или удалятся строки, изменятся цены и т.д.), то достаточно будет лишь обновить наши запросы сочетанием клавиш Ctrl+Alt+F5
или кнопкой Обновить все на вкладке Данные.
Ведь все данные извлекаются из «умных» таблиц Excel, которые автоматически меняют свой размер при добавлении либо удалении из них какой-либо информации. Однако, помните, что имена столбцов в исходных таблицах не должны меняться, иначе получим ошибку «Столбец такой-то не найден!» при попытке обновить запрос.
Это, пожалуй, самый красивый и удобный способ из всех стандартных. Шустро работает с большими таблицами. Не требует ручных правок при изменении размеров.
Как видите, есть несколько способов сравнить две таблицы Excel, используя формулы или условное форматирование. Однако эти методы не подходят для комплексного сравнения из-за следующих ограничений:
- Они находят различия только в значениях, но не могут сравнивать формулы или форматирование ячеек.
- Многие из них не могут идентифицировать добавленные или удаленные строки и столбцы. Как только вы добавите или удалите строку / столбец на одном листе, все последующие строки / столбцы будут отмечены как отличия.
- Они хорошо работают на уровне листа, но не могут обнаруживать структурные различия на уровне книги Excel, к примеру добавление и удаление листов.
Эти проблемы решаются путем использования дополнений к Excel, о чем мы поговорим далее.
Как сравнить таблицы при помощи Ultimat Suite для Excel
Последняя версия Ultimate Suite включает более 60 новых функций и улучшений, самым интересным из которых является «Сравнение таблиц» — инструмент для сравнения листов или диапазонов данных в Excel.
Чтобы сделать сравнение более интуитивным и удобным, надстройка разработана следующим образом:
- Мастер шаг за шагом проведет вас через процесс и помогает настраивать различные параметры.
- Вы можете выбрать алгоритм сравнения, наиболее подходящий для ваших наборов данных.
- Вместо отчета о различиях сравниваемые листы отображаются в режиме просмотра различий, чтобы вы могли сразу просмотреть все различия и управлять ими по очереди.
Теперь давайте попробуем использовать этот инструмент на наших примерах электронных таблиц из предыдущего примера и посмотрим, отличаются ли результаты.
- Нажмите кнопку «Сравнить листы (Compare Two Sheets)» на вкладке «Данные Ablebits » в группе « Объединить »:
- Появится окно мастера с предложением выбрать два листа, которые вы хотите сравнить на предмет различий.
По умолчанию выбираются все листы, но вы также можете выбрать текущую таблицу или определенный диапазон , нажав соответствующую кнопку:
- На следующем шаге вы выбираете алгоритм сравнения:
- Без ключевых столбцов (по умолчанию) — лучше всего подходит для сложных документов, таких как счета-фактуры или контракты.
- По ключевым столбцам — подходит для таблиц, организованных по столбцам, которые имеют один или несколько уникальных идентификаторов, таких как номера заказов или артикулы товаров.
- По ячейке — лучше всего использовать для сравнения таблиц с одинаковым макетом и размером, таких как балансы или статистические отчеты.
Совет. Если вы не уверены, какой алгоритм подходит вам, выберите вариант по умолчанию (без ключевых столбцов). Какой бы алгоритм вы ни выбрали, надстройка найдет все различия, только выделит их по-разному (целые строки или отдельные ячейки).
На этом же шаге вы можете выбрать предпочтительный тип соответствия:
- Первое совпадение (по умолчанию) — сравнивает строку на листе 1 с первой найденной строкой на листе 2, которая имеет хотя бы одну совпадающую ячейку.
- Наилучшее совпадение — сравнивает строку на листе 1 со строкой на листе 2, которая имеет максимальное количество совпадающих ячеек.
- Полное совпадение — находит на обоих листах строки, которые имеют одинаковые значения во всех ячейках, и отмечает все остальные строки как уникальные.
В этом примере мы сначала будем искать наилучшее совпадение, используя режим сравнения без ключевых столбцов, который установлен по умолчанию.
- На следующем шаге укажите, какие различия следует выделить, а какие игнорировать, и как помечать различия.
Скрытые строки и столбцы не имеют значения, и мы говорим надстройке игнорировать их:
- Нажмите кнопку «Сравнить (Compare)» и подождите немного, пока программа обработает ваши данные и создаст их резервные копии. Резервные копии всегда создаются автоматически, поэтому вы можете не беспокоиться о сохранности своих данных.
После обработки листы открываются друг рядом с другом в специальном режиме просмотра различий с выбранным способом выделения отличий:
На скриншоте выше различия выделены цветами по умолчанию:
- Красные строки — строки, существующие только на Листе 2 (справа).
- Зеленые ячейки — различные ячейки в частично совпадающих строках.
А вот если мы выберем второй алгоритм сравнения — по ключевому столбцу, то нам будет предложено указать его. В нашем случае вполне можно ключевым столбцом обозначить «Товар».
После этого мы видим немного другой результат сравнения:
Как видите, основным здесь действительно является факт совпадения значений в столбцах B. Строки, в которых нет такого совпадения, сразу выделяются красным или фиолетовым. А вот если совпадение есть, тогда идем в столбец С и сравниваем записанную там цену. Зелёные ячейки как раз и показывают нам товары, которые имеются в обоих прайс-листах, но цена на них изменилась.
Не знаю как вам, но мне второй вариант представляется более информативным.
А что же дальше делать с этим сравнением?
Чтобы помочь вам просматривать различия и управлять ими, на каждом листе есть собственная вертикальная панель инструментов. Для неактивного рабочего листа (справа на нашем скриншоте) эта панель отключена. Чтобы активировать панель инструментов, просто выберите любую ячейку на соответствующем листе.
Используя её, вы последовательно просматриваете найденные различия и решаете, объединить их или игнорировать:
Как только последнее различие будет устранено, вам будет предложено сохранить книги и выйти из режима просмотра различий.
Если вы еще не закончили обработку различий, но хотели бы сделать перерыв, нажмите кнопку «Выйти из просмотра различий» в нижней части панели инструментов и выберите один из следующих вариантов:
- Сохраните внесенные вами изменения и сохраните оставшиеся различия (Save workbooks and keep difference marks),
- Сохраните внесенные вами изменения и удалите оставшиеся различия (Save workbooks and remove difference marks),
- Восстановите исходные книги из резервных копий (Restore workbooks from backup copies).
Вот как вы можете сравнить два листа в Excel при помощи инструмента сравнения Compare Two Sheets (надеюсь, он вам понравился
Если вам интересно попробовать, полнофункциональная ознакомительная версия доступна для загрузки здесь .
Сравнение двух таблиц
Имеем две таблицы (например, старая и новая версия прайс-листа), которые надо сравнить и оперативно найти отличия:
С ходу видно, что в новом прайсе что-то добавилось (финики, чеснок…), что-то пропало (ежевика, малина…), у каких-то товаров изменилась цена (инжир, дыня…). Нужно быстро найти и вывести все эти изменения.
Для любой задачи в Excel почти всегда есть больше одного решения (обычно 4-5). Для нашей проблемы можно использовать много разных подходов:
- функцию ВПР (VLOOKUP) — искать названия товаров из нового прайс-листа в старом и выводить старую цену рядом с новой, а потом ловить отличия
- объединить два списка в один и построить по нему потом сводную таблицу, где наглядно будут видны отличия
- использовать надстройку Power Query для Excel
Давайте разберем их все последовательно.
Способ 1. Сравнение таблиц функцией ВПР (VLOOKUP)
Если вы совсем не знакомы с этой замечательной функцией, то загляните сначала сюда и почитайте или посмотрите видеоурок по ней — сэкономите себе пару лет жизни.
Обычно эту функцию используют для подтягивания данных из одной таблицы в другую по совпадению какого-либо общего параметра. В данном случае, мы применим ее, чтобы подтянуть старые цены в новый прайс:
Те товары, напротив которых получилась ошибка #Н/Д — отсутствуют в старом списке, т.е. были добавлены. Изменения цены также хорошо видны.
Плюсы этого способа: просто и понятно, «классика жанра», что называется. Работает в любой версии Excel.
Минусы тоже есть. Для поиска добавленных в новый прайс товаров придется делать такую же процедуру в обратную сторону, т.е. подтягивать с помощью ВПР новые цены к старому прайсу. Если размеры таблиц завтра поменяются, то придется корректировать формулы. Ну, и на действительно больших таблицах (>100 тыс. строк) все это счастье будет прилично тормозить.
Способ 2. Сравнение таблиц с помощью сводной
Скопируем наши таблицы одна под другую, добавив столбец с названием прайс-листа, чтобы потом можно было понять из какого списка какая строка:
Теперь на основе созданной таблицы создадим сводную через Вставка — Сводная таблица (Insert — Pivot Table). Закинем поле Товар в область строк, поле Прайс в область столбцов и поле Цена в область значений:
Как видите, сводная таблица автоматически сформирует общий список всех товаров из старого и нового прайс-листов (без повторений!) и отсортирует продукты по алфавиту. Хорошо видно добавленные товары (у них нет старой цены), удаленные товары (у них нет новой цены) и изменения цен, если были.
Общие итоги в такой таблице смысла не имеют, и их можно отключить на вкладке Конструктор — Общие итоги — Отключить для строк и столбцов (Design — Grand Totals).
Если изменятся цены (но не количество товаров!), то достаточно просто обновить созданную сводную, щелкнув по ней правой кнопкой мыши — Обновить (Referesh).
Плюсы: такой подход на порядок быстрее работает с большими таблицами, чем ВПР.
Минусы: надо вручную копировать данные друг под друга и добавлять столбец с названием прайс-листа. Если размеры таблиц изменяются, то придется делать все заново.
Способ 3. Сравнение таблиц с помощью Power Query
Power Query — это бесплатная надстройка для Microsoft Excel, позволяющая загружать в Excel данные практически из любых источников и трансформировать потом эти данные любым желаемым образом. В Excel 2016 эта надстройка уже встроена по умолчанию на вкладке Данные (Data), а для Excel 2010-2013 ее нужно отдельно скачать с сайта Microsoft и установить — получите новую вкладку Power Query.
Перед загрузкой наших прайс-листов в Power Query их необходимо преобразовать сначала в умные таблицы. Для этого выделим диапазон с данными и нажмем на клавиатуре сочетание Ctrl+T или выберем на ленте вкладку Главная — Форматировать как таблицу (Home — Format as Table). Имена созданных таблиц можно подкорректировать на вкладке Конструктор (я оставлю стандартные Таблица1 и Таблица2, которые получаются по-умолчанию).
Загрузите старый прайс в Power Query с помощью кнопки Из таблицы/диапазона (From Table/Range) с вкладки Данные (Data) или с вкладки Power Query (в зависимости от версии Excel). После загрузки вернемся обратно в Excel из Power Query командой Закрыть и загрузить — Закрыть и загрузить в… (Close & Load — Close & Load To…):
… и в появившемся затем окне выбрем Только создать подключение (Connection Only).
Повторите то же самое с новым прайс-листом.
Теперь создадим третий запрос, который будет объединять и сравнивать данных из предыдущих двух. Для этого выберем в Excel на вкладке Данные — Получить данные — Объединить запросы — Объединить (Data — Get Data — Merge Queries — Merge) или нажмем кнопку Объединить (Merge) на вкладке Power Query.
В окне объединения выберем в выпадающих списках наши таблицы, выделим в них столбцы с названиями товаров и в нижней части зададим способ объединения — Полное внешнее (Full Outer):
После нажатия на ОК должна появиться таблица из трех столбцов, где в третьем столбце нужно развернуть содержимое вложенных таблиц с помощью двойной стрелки в шапке:
В итоге получим слияние данных из обеих таблиц:
Названия столбцов в шапке лучше, конечно, переименовать двойным щелчком на более понятные:
А теперь самое интересное. Идем на вкладку Добавить столбец (Add Column) и жмем на кнопку Условный столбец (Conditional Column). А затем в открывшемся окне вводим несколько условий проверки с соответствующими им значениями на выходе:
Останется нажать на ОК и выгрузить получившийся отчет в Excel с помощью все той же кнопки Закрыть и загрузить (Close & Load) на вкладке Главная (Home):
Красота.
Причем, если в будущем в прайс-листах произойдут любые изменения (добавятся или удалятся строки, изменятся цены и т.д.), то достаточно будет лишь обновить наши запросы сочетанием клавиш Ctrl+Alt+F5 или кнопкой Обновить все (Refresh All) на вкладке Данные (Data).
Плюсы: Пожалуй, самый красивый и удобный способ из всех. Шустро работает с большими таблицами. Не требует ручных правок при изменении размеров таблиц.
Минусы: Требует установленной надстройки Power Query (в Excel 2010-2013) или Excel 2016. Имена столбцов в исходных данных не должны меняться, иначе получим ошибку «Столбец такой-то не найден!» при попытке обновить запрос.
Ссылки по теме
- Как собрать данные из всех файлов Excel в заданной папке с помощью Power Query
- Как найти совпадения между двумя списками в Excel
- Слияние двух списков без дубликатов
Нужно сравнить два файла Microsoft Excel? Вот два простых способа сделать это.
Существует множество причин, по которым вам может понадобиться взять один документ Excel и сравнить его с другим. Это может быть трудоемкой задачей
это требует большой концентрации, но есть способы облегчить себе жизнь.
Нужно ли вам внимательно посмотреть вручную или вы хотите, чтобы Excel выполнял некоторые тяжелые работы
от вашего имени, вот два простых способа сравнить несколько листов.
Это самые простой и элементарный способ сравнения двух таблиц. Сравнивать таким способом возможно, как числовые значение, так и текстовые. Для примера сравним два диапазона числовых значений, всего на всего прописав в соседней ячейке формулу их равенства =C2=E2, как результат при равенстве ячеек мы получим ответ «ИСТИНА», а если совпадений нет, будет «ЛОЖЬ». Теперь простым авто копированием копируем на весь диапазон нашу формулу позволяющую сравнить два столбика в Excel и видим разницу.
Быстрое выделение значений, которые отличаются
Это также не очень обременительный способ. Если вам просто нужно найти и удостовериться в наличии, ну или отсутствии отличий между таблицами, вам нужно на вкладке «Главная», выбрать кнопку меню «Найти и выделить», предварительно выделив диапазон где надо сравнить две таблицы в Excel. В открывшимся меню выберите пункт «Выделить группу ячеек…» и в появившемся диалоговом окне выберите «отличия по строкам».
Использование макроса VBA
Использование макросов для сравнения двух столбцов позволяет унифицировать процесс и сократить время на подготовку данных. Решение о том, какой результат сравнения необходимо отобразить, полностью зависит от вашей фантазии и навыков владения макросами. Ниже представлена методика, опубликованная на официальном сайте Микрософт.
Создайте новый модуль кода VBA и введите следующий код. О том, как писать макросы вы можете прочитать более подробно в статье написания VBA кода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Sub Find_Matches() Dim CompareRange As Variant, x As Variant, y As Variant ‘ Установка переменной CompareRangeравной сравниваемому диапазонуSet CompareRange = Range(«B1:B11») ‘ Если сравниваемый диапазон находится на другом листе или книге,’ используйте следующий синтаксис’ Set CompareRange = Workbooks(«Книга2»). _ ‘ Worksheets(«Лист2»).Range(«B1:B11″)» Сравнение каждого элемента в выделенном диапазоне с каждым элементом’ переменной CompareRangeFor Each x In Selection For Each y In CompareRange If x = y Then x.Offset(0, 2) = x Next y Next x End Sub |
В данном коде переменной CompareRange присваивается диапазон со сравниваемым массивом. Затем запускается цикл, который просматривает каждый элемент в выделенном диапазоне и сравнивает его с каждым элементом сравниваемого диапазона. Если были найдены элементы с одинаковыми значениями, макрос заносит значение элемента в столбец С.
Чтобы использовать макрос, вернитесь на рабочий лист, выделите основной диапазон (в нашем случае, это ячейки A1:A11), нажмите сочетание клавиш Alt+F8. В появившемся диалоговом окне выберите макрос Find_Matches и щелкните кнопку выполнить.
После выполнения макроса, результат должен быть следующим:
Сравнить две таблицы в Excel с помощью условного форматирования
Очень хороший способ, при котором вы сможете видеть выделенным цветом значение, которые при сличении двух таблиц отличаются. Применить условное форматирование вы можете на вкладке «Главная», нажав кнопку «Условное форматирование» и в предоставленном списке выбираем «Управление правилами».
И все правило применилось к нашему диапазону, где мы пытаемся проверить на похожесть две таблицы, и стало видны отличия, к которым применилось условное форматирование.
Поиск отличий в двух списках
If Worksheets(«Лист1»).Cells(i, 2) тыс.строк, от формул Для этого придется нажмите клавишу форматированных ячеек:». отображаются в окне области под двумя возникнуть вопросы «Кто формул или ссылок подключения данных к
Вариант 1. Синхронные списки
и другие задачи, 1) единицы, а во — то ведь модуля объясните пожалуйста. первом файле, и потом делал Условное = Worksheets(«Лист2»).Cells(i, 2) нужно будет избавиться. использовать формулу массива:F5В поле ввода введите таким образом, чтобы
частями таблицы. Изменения
ее изменил? И
на именованные диапазоны.
базе данных Access вы можете использовать
i = 0
втором одна, то по ним можно
Steel Rain 1 ячейку во форматирование-Правила выделения ячеек-Повторяющиеся Then ‘ ИДля этого скопироватьВыглядит страшновато, но свою, затем в открывшемся формулу: различия можно было выделяются разными цветами что именно изменилось?»
Схема может пересекать
и текстовому файлу.
команды на вкладке
For Each x код покажет, что формулами подтянуть остальное: а, ещё, пардонте, втором. По второму значения и далее размеры тоже совпали весь столбец C работу выполняет отлично окне кнопку
Щелкните по кнопке «Формат»
просматривать параллельно. в соответствии с
Средство сравнения электронных листы и книги.Подробнее об этом можно
Inquire In .keys ‘начинаем не совпадает одна из тех строк. забыл уточнить, значения запросу 2-ую ячейку
в этой колонкеRange(Worksheets(«Лист1»).Cells(i, 1), Worksheets(«Лист1»).Cells(i, в буфер обмена, ;)
- Выделить (Special) и на вкладке
- У нас имеется две их типом.
- таблиц от МайкрософтВ данной схеме отображаются узнать в разделе(Запрос). Вкладка
- перебор данных в единица первого списка.С помощью ВПР() в ячейках по в том же фильтр по цвету 10)).Select правый клик >>
- Steel Rain
Вариант 2. Перемешанные списки
- «Заливка» укажите синий таблицы заказов, скопированныхВ двух расположенных рядом поможет вам ответить два уровня связей
Анализ книги.Inquire словаре по ключамНу а по или индекса с которым нужен отбор столбце в первом заливки. На файле’ здесь 10 специальная вставка >>: Доброго всем времениОтличия по строкам (Row цвет. На всех в один рабочий частях таблицы сравнивается
на эти вопросы — ячейки для ячейки
К началу страницы(Запрос) ленты ExcelIf .Item(x) = итему думаю кей
поискпозицией :)
строковые
файле и 2-ую в 8Мб данный — это номер значения. суток. differences) окнах жмем ОК. лист. Необходимо выполнить
каждый лист из найдет изменения и A10 на листе
В книгах, связанных с
содержит кнопки для
1 Then ‘если
не получить безТо, что тамHugo во втором. Получил
способ занимает около последнего столбца вПохожая тема:
Сразу скажу, практически. В последних версияхПри определении условий для сравнение данных двух обоих файлов, начиная
выделит их. 5 в книге другими книгами с
planetaexcel.ru>
Как сравнить две таблицы в Excel с помощью функции СЧЁТЕСЛИ и правил
Все вышеперечисленные способы хороши для упорядоченных таблиц, а вот когда данные, не упорядоченные необходимы иные способы один из которых мы сейчас и рассмотрим. Представим, к примеру, у нас есть 2 таблицы, значения в которых немного отличаются и нам необходимо сравнить эти таблицы для определения значения, которое отличается. Выделяем значение в диапазоне первой таблицы и на вкладке «Главная», пункт меню «Условное форматирование» и в списке жмем пункт «Создать правило…», выбираем правило «Использовать формулу для определения форматируемых ячеек», вписываем формулу =СЧЁТЕСЛИ($C$1:$C$7;C1)=0 и выбираем формат условного форматирования.
Формула проверяет значение из определенной ячейки C1 и сравнивает ее с указанным диапазоном $C$1:$C$7 из второго столбика. Копируем правило на весь диапазон, в котором мы сравниваем таблицы и получаем выделенные цветом ячейки значения, которых не повторяется.
Как сравнить две таблицы в Excel с помощью функции ВПР
В этом варианте мы будем использовать функцию ВПР, которая позволит нам сравнить две таблицы на предмет совпадений. Для сравнения двух столбиков, введите формулу =ВПР(C2;$D$2:$D$7;1;0) и скопируйте ее на весь сравниваемый диапазон. Эта формула последовательно начинает проверять есть ли повторы значения из столбика А в столбике В, ну и соответственно возвращает значение элемента, если оно было там найдено если же значение не найдено получаем ошибку #Н/Д.
Интерпретация результатов
В двух расположенных рядом частях таблицы сравнивается каждый лист из обоих файлов, начиная с самого крайнего слева. Если лист в книге скрыт, он все равно отображается и сравнивается в средстве сравнения электронных таблиц.
Если содержимое не умещается в ячейках, выберите команду Resize Cells to Fit
(Размер ячеек по размеру данных).
Различия разного типа выделяются с помощью цвета заливки ячейки или цвета шрифта текста. Например, ячейки с введенными значениями (не с формулами) выделяются заливкой зеленого цвета в расположенных рядом частях таблицы и шрифтом зеленого цвета в области результатов. В левой нижней части указаны условные обозначения, поясняющие значения цветов.
Как сравнить две таблицы в Excel функции ЕСЛИ
Этот вариант предусматривает использования логической функции ЕСЛИ и отличие этого способа в том что для сравнения двух столбцов будет использован не весь массив целиком, а только та ее часть, которая нужна для сравнения.
Для примера, сравним два столбика А и В на рабочем листе, в соседней колонке С введем формулу: =ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(C2;$E$2:$E$7;0));»»;C2) и копируем ее на весь вычисляемый диапазон. Эта формула позволяет просматривать последовательно есть ли определенные элементы из указанного столбика А в столбике В и возвращает значение, в случае если оно было найдено в столбике В.
Сравнение файлов Excel на глаз
Для начала откройте Excel и все рабочие книги, которые вы хотите сравнить. Мы можем использовать ту же технику для сравнения листов в одном документе
или совершенно разные файлы.
Если из одной и той же книги получено более одного листа, ее необходимо отделить заранее. Для этого перейдите к Вид> Окно> Новое окно.
Это не разделит отдельные листы навсегда, просто откроет новый экземпляр вашего документа.
Далее идите к Посмотреть вкладка и найти Посмотреть бок о бок в Окно раздел.
В этом меню будут перечислены все таблицы, которые в данный момент открыты. Если у вас есть только два открытых, они будут выбраны автоматически.
Сделайте свой выбор и нажмите Хорошо. Вы увидите, что обе таблицы появятся на экране.
Если это более удобно, вы можете использовать Расставить все кнопка для переключения между вертикальной и горизонтальной конфигурацией.
Перейти к основному содержанию
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в Excel с помощью макросов VBA?
- Как обращаться к ячейкам таблицы Excel с помощью VBA?
- Как осуществлять перебор ячеек таблицы в цикле с помощью VBA?
В предыдущей статье Сравнение таблиц в Excel мы рассмотрели подход к сравнению сложных таблиц с использованием формул и без программирования.
В данной статье рассмотрим способ сравнения таблиц Excel с помощью VBA макросов на примере тех же исходных данных.
Проиллюстрируем задачу картинкой из первой статьи.
Для начала напишем алгоритм наших действий по сравнению таблиц.
- Определим диапазоны данных первой и второй таблицы, то есть найдем последние значимые строки и сохраним их номера в переменных (последняя строка таблицы 1 — last_i и последняя строка таблицы 2 — last_j).
- Начнем проходить по каждой строке таблицы 2 (внешний цикл), данные из которой нужно перенести в таблицу 1. С первой строки данных (в примере это строка 3) до последней строки таблицы 2.
- Для каждой строки таблицы 2 определим идентификатор строки, путем формирования строки, содержащей полный адрес квартиры (значения из нескольких колонок, разделенные дефисами).
- Начнем проходить по каждой строке таблицы 1 (внутренний цикл) с первой строки данных (в примере это строка 3) до последней строки таблицы 1, определяя при этом идентификатор строки.
- Сравним значения идентификаторов строк таблицы 1 и таблицы 2.
- Если идентификаторы равны, перепишем ФИО покупателя из ячейки таблицы 2 в соответствующую ячейку таблицы 1; прервем внутренний цикл по таблице 1 и перейдем к следующей строке таблицы 2 (переход к п.2).
Теперь остается реализовать алгоритм в виде программного кода макроса.
Для этого откроем вкладку Вид ленты функций Excel. Щелкнем на нижнюю часть со стрелкой кнопки Макросы. В открывшемся подменю выберем Запись макроса. В результате начнется запись нового макроса. Поскольку код мы будем формировать вручную, то еще раз зайдем в подменю макросов и выберем Остановить запись. Далее еще раз войдем в подменю макросов и выберем Макросы.
В появившемся диалоге выделим наш макрос и нажмем Изменить.
На экране откроется окно редактора макросов Visual Basic for Applications. В области кода (правая верхняя область) отображается код только что созданного пустого макроса.
В процедуру Макрос1 (между объявлениями начала и конца процедуры: Sub и End Sub) необходимо вставить код, решающий поставленную задачу.
Образец кода представлен ниже.
Sub Макрос1() ' ' Макрос1 сравнение двух таблиц с использованием макроса VBA ' ' ссылка на первый лист книги Dim sheet1 As Worksheet Set sheet1 = ActiveWorkbook.Sheets(1) ' ссылка на второй лист книги Dim sheet2 As Worksheet Set sheet2 = ActiveWorkbook.Sheets(2) ' строка для хранения идентификатора строки первой таблицы Dim str1 As String ' строка для хранения идентификатора строки второй таблицы Dim str2 As String ' позиция курсора (номер строки) в первой таблице Dim i As Integer i = 3 Dim last_i As Integer last_i = 3 ' позиция курсора (номер строки) во второй таблице Dim j As Integer j = 3 Dim last_j As Integer last_j = 3 ' определяем последнюю значимую строку первой таблицы (последняя строка, в первой колонке которой есть значение) For Each Cell In sheet1.Range("A:A") If Cell.Row > 2 Then If Cell.Value > "" Then last_i = Cell.Row Else Exit For End If End If Next Cell ' определяем последнюю значимую строку второй таблицы (последняя строка, в первой колонке которой есть значение) For Each Cell In sheet2.Range("A:A") If Cell.Row > 2 Then If Cell.Value > "" Then last_j = Cell.Row Else Exit For End If End If Next Cell ' пробегаем по строкам второй таблицы (внешний цикл) For j = 3 To last_j ' определяем идентификатор текущей строки str2 = sheet2.Cells(j, 1).Value & "-" & sheet2.Cells(j, 2).Value & "-" & sheet2.Cells(j, 3).Value & "-" & sheet2.Cells(j, 4).Value ' пробегаем по строкам первой таблицы (внутренний цикл) For i = 3 To last_i ' определяем идентификатор текущей строки str1 = sheet1.Cells(i, 1).Value & "-" & sheet1.Cells(i, 2).Value & "-" & sheet1.Cells(i, 3).Value & "-" & sheet1.Cells(i, 4).Value ' сравниваем идентификаторы строк первой и второй таблицы If str2 = str1 Then ' если совпадение найдено, то записываем покупателя из второй таблицы в первую в строку с соответствующей ему квартирой sheet1.Cells(i, 5).Value = sheet2.Cells(j, 5).Value ' прекращаем внутренний цикл, переходим к следующей итерации внешнего цикла ' (к следующей записи второй таблицы) Exit For End If Next i Next j End Sub
Результат решения задачи:
Другие интересные статьи
- Как сравнить две таблицы в Excel с использованием формул?
- Горячие клавиши Excel
Тэги:
- Статьи
- Excel
- сравнение таблиц
- VBA
- макросы