I would like to compare 2 cells’ value and see whether they are match or not.
I know how to do it on excel but I dont’ know how to put it vba code.
Input & output:
- The value of cell A1 is already in the excel.
- Manually enter a value in Cell B1.
- click on a button_click sub to see whether the value on 2 cells are the same or not.
- Show «Yes» or «No» on cell C1
Excel formula:
=IF(A1=B1,"yes","no")
asked Jan 21, 2015 at 15:55
Give this a try:
Sub CompareCells()
If [a1] = [b1] Then
[c1] = "yes"
Else
[c1] = "no"
End If
End Sub
Assign this code to the button.
answered Jan 21, 2015 at 15:58
Gary’s StudentGary’s Student
95.3k9 gold badges58 silver badges98 bronze badges
1
If (Range("A1").Value = Range("B1").Value) Then
Range("C1").Value = "Yes"
Else
Range("C1").Value = "No"
End If
Chrismas007
6,0654 gold badges23 silver badges47 bronze badges
answered Jan 21, 2015 at 16:03
EswinEswin
292 bronze badges
5
You can use the IIF function in VBA. It is similar to the Excel IF
[c1] = IIf([a1] = [b1], "Yes", "No")
answered Jan 21, 2015 at 16:47
Paul KellyPaul Kelly
9057 silver badges13 bronze badges
1
Here is an on change Sub (code MUST go in the sheet module). It will only activate if you change a cell in column B.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub
If Cells(Target.Row, 1).Value = Cells(Target.Row, 2).Value Then
Cells(Target.Row, 3).Value = "Yes"
Else
Cells(Target.Row, 3).Value = "No"
End If
End Sub
For the record, this doesn’t use a button, but it accomplishes your goal of calculating if the two cells are equal any time you manually enter data into cells in Col B.
answered Jan 21, 2015 at 16:08
Chrismas007Chrismas007
6,0654 gold badges23 silver badges47 bronze badges
Sub CompareandHighlight()
Dim n As Integer
Dim sh As Worksheets
Dim r As Range
n = Worksheets("Indices").Range("E:E").Cells.SpecialCells(xlCellTypeConstants).Count
Application.ScreenUpdating = False
Dim match As Boolean
Dim valE As Double
Dim valI As Double
Dim i As Long, j As Long
For i = 2 To n
valE = Worksheets("Indices").Range("E" & i).Value
valI = Worksheets("Indices").Range("I" & i).Value
If valE = valI Then
Else:
Worksheets("Indices").Range("E" & i).Font.Color = RGB(255, 0, 0)
End If
Next i
Application.ScreenUpdating = True
End Sub
barbsan
3,39811 gold badges21 silver badges28 bronze badges
answered Nov 21, 2018 at 9:29
0
wtftaekwondo 0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
||||
1 |
||||
06.09.2019, 16:26. Показов 12374. Ответов 10 Метки нет (Все метки)
Всем привет!
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
06.09.2019, 17:34 |
2 |
wtftaekwondo, Как говорится, меньше слов, а больше дел В общем, лучше приложите небольшой фрагмент таблиц, 1) что есть и 2) что должно получиться, после выполнения макроса.
0 |
0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
|
06.09.2019, 17:56 [ТС] |
3 |
Хорошо. Вот две фотографии (пример). Миниатюры
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
06.09.2019, 18:06 |
4 |
Имелся ввиду, разумеется, xls(x) файл, чтобы не вводить исходные данные, а тестировать макрос сразу. Но даже без файла возникает вопрос, почему ‘направляющая верхняя’ это просто ‘направляющая’, а ‘направляющая втулка’ это уже ‘направляющая монтажная’. В списке искомых наличествует только ‘направляющая’, возможно монтажной просто не видно…
0 |
0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
|
06.09.2019, 18:18 [ТС] |
5 |
За последние 2 строки извиняюсь, это идеальный вариант, которые уже обрабатывается вручную.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
06.09.2019, 18:33 |
6 |
Вариант с помощью формулу подойдёт ? Код =ИНДЕКС($F$1:$F$3;ПОИСКПОЗ(1;(СЧЁТЕСЛИ(B1;$F$1:$F$3&"*"));0))
1 |
0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
|
06.09.2019, 18:45 [ТС] |
7 |
В целом тоже подойдет, спасибо)
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||||||||||
06.09.2019, 21:31 |
8 |
|||||||||||
Сообщение было отмечено wtftaekwondo как решение Решение
Или просто программно ввести вышеопубликованную формулу Альтернативные варианты
1 |
wtftaekwondo 0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
||||
09.09.2019, 12:16 [ТС] |
9 |
|||
Если не сложно, то сможете прокомментировать или объяснить данные строки:
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
09.09.2019, 13:01 |
10 |
получаем первое слово(слово=любой набор символов): «очищаем» элемент массива пользуйтесь клавишей F1
0 |
0 / 0 / 0 Регистрация: 22.02.2019 Сообщений: 21 |
|
13.09.2019, 13:51 |
11 |
Много вариантов, конечно
0 |
Операторы сравнения чисел и строк, ссылок на объекты (Is) и строк по шаблону (Like), использующиеся в VBA Excel. Их особенности, примеры вычислений.
Операторы сравнения чисел и строк
Операторы сравнения чисел и строк представлены операторами, состоящими из одного или двух математических знаков равенства и неравенства:
- < – меньше;
- <= – меньше или равно;
- > – больше;
- >= – больше или равно;
- = – равно;
- <> – не равно.
Синтаксис:
Результат = Выражение1 Оператор Выражение2 |
- Результат – любая числовая переменная;
- Выражение – выражение, возвращающее число или строку;
- Оператор – любой оператор сравнения чисел и строк.
Если переменная Результат будет объявлена как Boolean (или Variant), она будет возвращать значения False и True. Числовые переменные других типов будут возвращать значения 0 (False) и -1 (True).
Операторы сравнения чисел и строк работают с двумя числами или двумя строками. При сравнении числа со строкой или строки с числом, VBA Excel сгенерирует ошибку Type Mismatch (несоответствие типов данных):
Sub Primer1() On Error GoTo Instr Dim myRes As Boolean ‘Сравниваем строку с числом myRes = «пять» > 3 Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If End Sub |
Сравнение строк начинается с их первых символов. Если они оказываются равны, сравниваются следующие символы. И так до тех пор, пока символы не окажутся разными или одна или обе строки не закончатся.
Значения буквенных символов увеличиваются в алфавитном порядке, причем сначала идут все заглавные (прописные) буквы, затем строчные. Если необходимо сравнить длины строк, используйте функцию Len.
myRes = «семь» > «восемь» ‘myRes = True myRes = «Семь» > «восемь» ‘myRes = False myRes = Len(«семь») > Len(«восемь») ‘myRes = False |
Оператор Is – сравнение ссылок на объекты
Оператор Is предназначен для сравнения двух переменных со ссылками на объекты.
Синтаксис:
Результат = Объект1 Is Объект2 |
- Результат – любая числовая переменная;
- Объект – переменная со ссылкой на любой объект.
Если обе переменные Объект1 и Объект2 ссылаются на один и тот же объект, Результат примет значение True. В противном случае результатом будет False.
Set myObj1 = ThisWorkbook Set myObj2 = Sheets(1) Set myObj3 = myObj1 Set myObj4 = Sheets(1) myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True myRes = myObj2 Is myObj4 ‘myRes = True |
По-другому ведут себя ссылки на диапазоны ячеек. При присвоении ссылок на один и тот же диапазон нескольким переменным, в памяти создаются уникальные записи для каждой переменной.
Set myObj1 = Range(«A1:D4») Set myObj2 = Range(«A1:D4») Set myObj3 = myObj1 myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True |
Оператор Like – сравнение строк по шаблону
Оператор Like предназначен для сравнения одной строки с другой по шаблону.
Синтаксис:
Результат = Выражение Like Шаблон |
- Результат – любая числовая переменная;
- Выражение – любое выражение, возвращающее строку;
- Шаблон – любое строковое выражение, которое может содержать знаки подстановки.
Строка, возвращенная аргументом Выражение, сравнивается со строкой, возвращенной аргументом Шаблон. Если обе строки совпадают, переменной Результат присваивается значение True, иначе – False.
myRes = «восемь» Like «семь» ‘myRes = False myRes = «восемь» Like «*семь» ‘myRes = True myRes = «Куда идет король» Like «идет» ‘myRes = False myRes = «Куда идет король» Like «*идет*» ‘myRes = True |
Со знаками подстановки для оператора Like вы можете ознакомиться в статье Знаки подстановки для шаблонов.
Переместила кнопку на активный лист, так удобнее.
Если нужно обязательно, чтоб кнопка была на Листе2 вот код:
Код |
---|
Sub DiffsColor() 'допускаем наличие пустых ячеек в середине и конце диапазонов 'x = адрес верхней ячейки первого сравниваемого диапазона = значению в ячейке B2 на Лист2 'y = адрес верхней ячейки второго сравниваемого диапазона = значению в ячейке B3 на Лист2 x = ThisWorkbook.Sheets("Лист2").Range("B2") y = ThisWorkbook.Sheets("Лист2").Range("B3") xCol = Worksheets("Лист1").Range(x).Column 'колонка первого диапазона xRow = Worksheets("Лист1").Range(x).Row 'строка начала первого диапазона yCol = Worksheets("Лист1").Range(y).Column 'колонка второго диапазона yRow = Worksheets("Лист1").Range(y).Row 'строка начала второго диапазона xLastRow = Worksheets("Лист1").Cells(Rows.Count, xCol).End(xlUp).Row 'последняя строка первого диапазона yLastRow = Worksheets("Лист1").Cells(Rows.Count, yCol).End(xlUp).Row 'последняя строка второго диапазона MaxLastRow = Application.WorksheetFunction.Max(xLastRow - xRow + 1, yLastRow - yRow + 1) Set lastcell = Worksheets("Лист1").Cells(MaxLastRow + 1, xCol) Dim c As Range 'прогоняем сравнение от начальной заданной ячейки x до последней ячейки в этом столбце For Each c In Worksheets("Лист1").Range(x, lastcell) If c.Value <> Worksheets("Лист1").Cells(yRow, yCol) Then c.Interior.ColorIndex = 42 Worksheets("Лист1").Cells(yRow, yCol).Interior.ColorIndex = 42 End If yRow = yRow + 1 Next c End Sub |
Когда перемещаете диапазоны, не забывайте на Листе2 задавать новые адреса верхних углов перемещенных диапазонов
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Office для бизнеса Excel 2010 Excel 2007 Еще…Меньше
Чтобы сравнить данные в двух столбцах Microsoft Excel и найти повторяющиеся записи, воспользуйтесь следующими способами.
Способ 1. Использование формулы на этом этапе
-
Начните Excel.
-
На новом примере введите следующие данные (оставьте столбец B пустым):
A
B
C
1
1
3
2
2
5
3
3
8
4
4
2
5
5
0
-
Введите в ячейку B1 следующую
формулу:=IF(ISERROR(MATCH(A1,$C$1:$C$5,0)),»»,A1)
-
Выберем ячейку С1 по B5.
-
В Excel 2007 и более поздних версиях Excel выберите Заполнить в группе Редактирование, а затем выберите Вниз.
Повторяющиеся числа отображаются в столбце B, как в следующем примере:
A
B
C
1
1
3
2
2
2
5
3
3
3
8
4
4
2
5
5
5
0
Способ 2. Использование макроса Visual Basic макроса
Предупреждение: Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации без гарантии, выраженной или подразумеваемой. Это относится и не только к подразумеваемой гарантии пригодности и пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который демонстрируется, и средствами, используемыми для создания и от debug procedures. Инженеры службы поддержки Майкрософт могут объяснить функциональные возможности конкретной процедуры. Однако они не будут изменять эти примеры, чтобы обеспечить дополнительные функциональные возможности или процедуры по построению в необходимом порядке.
Чтобы использовать макрос Visual Basic для сравнения данных в двух столбцах, с помощью следующих действий:
-
Запустите Excel.
-
Нажмите ALT+F11, чтобы запустить Visual Basic редактора.
-
В меню Вставка выберите Модуль.
-
Введите следующий код на листе модуля:
Sub Find_Matches() Dim CompareRange As Variant, x As Variant, y As Variant ' Set CompareRange equal to the range to which you will ' compare the selection. Set CompareRange = Range("C1:C5") ' NOTE: If the compare range is located on another workbook ' or worksheet, use the following syntax. ' Set CompareRange = Workbooks("Book2"). _ ' Worksheets("Sheet2").Range("C1:C5") ' ' Loop through each cell in the selection and compare it to ' each cell in CompareRange. For Each x In Selection For Each y In CompareRange If x = y Then x.Offset(0, 1) = x Next y Next x End Sub
-
Нажмите ALT+F11, чтобы вернуться к Excel.
-
Введите в качестве примера следующие данные (оставьте столбец B пустым):
A
B
C
1
1
3
2
2
5
3
3
8
4
4
2
5
5
0
-
-
Выберем ячейку от A1 до A5.
-
В Excel 2007 и более поздних версиях Excel выберите вкладку Разработчик, а затем в группе Код выберите макрос.
Примечание: Если вкладка Разработчик не отключается, возможно, ее нужно включить. Для этого выберите Файл > параметры > настроитьленту , а затем выберите вкладку Разработчик в поле настройки справа.
-
Щелкните Find_Matches, а затем нажмите кнопку Выполнить.
Повторяющиеся числа отображаются в столбце B. Совпадающие числа будут поместиться рядом с первым столбцом, как показано ниже.
A
B
C
1
1
3
2
2
2
5
3
3
3
8
4
4
2
5
5
5
0
Нужна дополнительная помощь?
Skip to content
Вы узнаете, как сравнивать значения в ячейках Excel на предмет точного совпадения или без учета регистра. Мы предложим вам несколько формул для сопоставления двух ячеек по их значениям, длине или количеству вхождений определенного символа, а также вы научитесь сравнивать между собой сразу несколько ячеек.
При использовании Excel для анализа данных точность является наиболее важной задачей. Неправильная информация приводит к срыву сроков, неверной оценке тенденций, неправильным решениям и потере доходов.
Несмотря на то, что ваши формулы Excel будут абсолютно верны, их результаты могут быть ошибочными из-за некорректных значений в ваших таблицах. Сравнивать две ячейки вручную несложно, но заметить разницу между сотнями и тысячами текстовых и числовых значений практически невозможно.
- Как сравнить две ячейки без учета и с учетом регистра букв.
- Сравниваем сразу несколько ячеек.
- Сравнение нескольких ячеек с образцом
- Содержимое какой ячейки длиннее?
- Одинаковы ли ячейки по количеству вхождений определённого символа?
В этом руководстве вы узнаете, как автоматизировать утомительную и чреватую ошибками задачу сравнения ячеек, а также какие формулы лучше всего использовать в каждом конкретном случае.
Как сравнить две ячейки в Excel.
Существует два разных способа выяснения тождества текстовых данных в Excel в зависимости от того, требуется ли это делать с учетом регистра или без него.
Формула без учета регистра.
Чтобы сопоставить две ячейки в Excel без учета регистра, используйте самый простой вариант:
=A1=B1
Где A1 и B1 – объекты для сопоставления. Результатом являются логические значения ИСТИНА и ЛОЖЬ.
Если вы хотите в качестве результата вывести свои собственные сообщения для обозначения совпадений и различий, вставьте приведенный выше оператор в логический тест функции ЕСЛИ. Например:
=ЕСЛИ(A2=B2; «Совпадает»; «НЕ совпадает»)
Как вы видите на скриншоте ниже, обе формулы одинаково хорошо сравнивают текст, даты и числа:
Формула с учетом регистра.
В некоторых ситуациях может быть важно не просто сравнить текст, но и учесть регистр символов. Сопоставлениес учетом регистра можно выполнить с помощью функции Excel СОВПАД (EXACT в английской версии):
СОВПАД(текст1; текст2)
Где текст1 и текст2 — две сравниваемые ячейки.
Предполагая, что ваши значения находятся в A2 и B2, расчёт выглядит следующим образом:
=СОВПАД(A2; B2)
В результате вы получите ИСТИНА для текстовых данных, точно совпадающих с регистром каждого символа, в противном случае — ЛОЖЬ.
Если вы хотите, чтобы функция СОВПАД выдавала другие результаты, вставьте ее в формулу ЕСЛИ и введите свой собственный текст для вариантов ответа:
=ЕСЛИ(СОВПАД(A2; B2); «Совпадает»; «НЕ совпадает»)
На следующем скриншоте показаны результаты с учетом регистра:
Как сравнить несколько ячеек в Excel
Чтобы сопоставить между собой более 2 ячеек, используйте выражения, описанные в приведенных выше примерах, в сочетании с оператором И.
Формула без учета регистра для более чем двух ячеек
В зависимости от того, как вы хотите отображать результаты, используйте одну из следующих формул:
=И(A2=B2; A2=C2)
или
=ЕСЛИ(И(A2=B2; A2=C2); «Совпадает»; «НЕ совпадает»)
Оператор И возвращает ИСТИНА, если все клетки таблицы содержат одно и то же значение, ЛОЖЬ, если любое значение отличается. Функция ЕСЛИ выводит введенные вами метки: «Совпадает» и «Не совпадает».
Как показано на скриншоте ниже, формула отлично работает с любыми типами данных — текстом, датами и числовыми значениями:
Сравниваем несколько ячеек с учетом регистра букв.
Чтобы сопоставить несколько текстовых значений друг с другом и убедиться, что они точно совпадают, используйте:
=И(СОВПАД(A2;B2); СОВПАД(A2; C2))
или
=ЕСЛИ(И(СОВПАД(A2;B2);СОВПАД(A2; C2));»Точное совпадение»; «НЕ совпадает»)
Как и в предыдущем примере, первая формула выдает значения ИСТИНА и ЛОЖЬ, тогда как вторая отображает ваши собственные сообщения для совпадений и различий:
Если же нам достаточно хотя бы двух совпадений значений, то сделаем это так:
=ЕСЛИ(ИЛИ(СОВПАД(A2;B2);СОВПАД(A2; C2);СОВПАД(B2;C2)); «Не менее 2 точных совпадений»; «НЕ совпадает»)
То есть, если в двух случаях из трёх будут одинаковые значения, то это будет для нас положительным результатом.
Но если в нашей таблице нужно проверить много ячеек, то приведенное выше выражение с условием ИЛИ станет очень громоздким. Поэтому можно использовать функцию СЧЁТЕСЛИ.
Мы может рассчитать количество совпадений в нашем диапазоне ячеек при помощи этой формулы массива:
{=СЧЁТЕСЛИ(A2:D2;A2:D2)}
Чтобы выделить группы ячеек с полностью совпадающими значениями, можно использовать выражение:
=ЕСЛИ(СЧЁТЕСЛИ(A2:D2;A2:D2)=СЧЁТЗ(A2:D2);»Полное совпадение»;»»)
Как видите, регистр символов здесь, к сожалению, не учитывается.
Кроме того, обратите внимание на последнюю строку. В одной из ячеек имеются ведущие пробелы, поэтому полного совпадения нет. Аналогичный результат будет, если после текста случайно будет введен так называемый концевой пробел. А его визуально обнаружить крайне сложно. Поэтому обнаружение и удаление лишних пробелов — весьма важная задача. Ссылку на нужную инструкцию смотрите в конце этой статьи.
Сравните диапазон ячеек с образцом.
В следующих примерах показано, как можно проверить, что все адреса в заданном диапазоне содержат тот же текст, что и в ячейке-образце.
Совпадает ли ячейка с образцом?
Если регистр символов не имеет значения, вы можете использовать для сопоставления с образцом примерно такое выражение:
ЧСТРОК( диапазон ) * ЧИСЛСТОЛБ( диапазон ) = СЧЁТЕСЛИ( диапазон ; ячейка образца )
В логической проверке функции ЕСЛИ вы проверяете равенство двух чисел:
- Общее количество ячеек в указанном диапазоне (количество строк, умноженное на количество столбцов), и
- Количество ячеек, содержащих то же значение, что и в образце (возвращенное функцией СЧЁТЕСЛИ ).
Предполагая, что образец текста находится в C2, а данные находятся в диапазоне A2: B6, формула выглядит следующим образом:
(ЧСТРОК(A2:B6)*ЧИСЛСТОЛБ(A2:B6))=СЧЁТЕСЛИ(A2:B6;C2)
Чтобы сделать результаты более удобными для пользователя, т. е. вывести осмысленный текст вместо ИСТИНА и ЛОЖЬ, используйте функцию ЕСЛИ, как мы делали в предыдущих примерах:
=ЕСЛИ((ЧСТРОК(A2:B6)*ЧИСЛСТОЛБ(A2:B6))=СЧЁТЕСЛИ(A2:B6;C2);»Всё совпадает»; «Есть несовпадения»)
Как показано на скриншоте выше, формула отлично справляется с диапазоном текстовых значений, но ее также можно использовать для сопоставления чисел и дат.
Проверяем совпадение с образцом с учётом регистра букв.
Если регистр символов имеет значение, вы можете проверить совпадение ячейки с образцом текста, используя следующие формулы массива.
ЕСЛИ((ЧСТРОК(диапазон )*ЧИСЛСТОЛБ(диапазон ))=(СУММ(—СОВПАД( образец ; диапазон ))); «текст_если_ совпадает»;»текст_если_НЕ_совпадает»)
Поскольку исходный диапазон находится в области A2: B6, а образец текста — в C2, получаем следующее:
{=ЕСЛИ((ЧСТРОК(B2:C6)*ЧИСЛСТОЛБ(B2:C6))=(СУММ(—СОВПАД(C2;B2:C6))); «Всё совпадает»;»НЕ совпадает»)}
В отличие от обычных формул Excel, формулы массива заполняются нажатием Ctrl + Shift + Enter. При правильном вводе Excel заключает формулу массива в {фигурные скобки}, как показано ниже:
Как соотнести две ячейки по длине.
Иногда вам может потребоваться проверить, содержат ли данные в каждой ячейке одинаковое количество символов. Решение для этой задачи очень простое. Сначала вы получаете длину каждой из этих двух ячеек с помощью функции ДЛСТР, а затем проверяете равенство этих чисел.
Предположим, что исходные значения находятся в A2 и B2. Используйте любой из вариантов:
=ДЛСТР(A2)=ДЛСТР(B2)
или
=ЕСЛИ(ДЛСТР(A2)=ДЛСТР(B2); «Равная длина»; «Длины не равны»)
Как вы понимаете, первый возвращает логические значения ИСТИНА или ЛОЖЬ, тогда как второй выводит ваши собственные результаты:
Как показано на скриншоте выше, формулы работают как для текста, так и для чисел.
Примечание. Если две, казалось бы, одинаковые ячейки с текстом возвращают разную длину, скорее всего, проблема в начальных или конечных пробелах в одной или обеих из них. В этом случае удалите лишние пробелы с помощью функции СЖПРОБЕЛЫ. Подробное объяснение и примеры можно найти здесь: Как удалить пробелы в Excel .
Сравниваем две ячейки по вхождению определенного символа
Это последний пример в нашем руководстве по сравнению ячеек в Excel, и он показывает решение для довольно конкретной задачи. Предположим, у вас есть 2 столбца текстовых значений, которые содержат важный для вас символ. Ваша цель — проверить, содержат ли две ячейки в каждой строке одинаковое количество вхождений данного символа.
Чтобы было понятнее, рассмотрим следующий пример. Допустим, у вас есть два списка отгруженных заказов (столбец B) и полученных (столбец C). Каждая запись таблицы содержит заказы на конкретный товар, уникальный идентификатор которого включен во все идентификаторы заказа и указан в той же строке в столбце A (см. скриншот ниже). Вы хотите убедиться, что каждая строка содержит равное количество отправленных и полученных товаров с этим конкретным идентификатором.
Чтобы решить эту проблему, будем действовать следующим образом:
- Во-первых, замените код заказа ничем с помощью функции ПОДСТАВИТЬ:
ПОДСТАВИТЬ(A1; код;»»)
- Затем подсчитайте, сколько раз код появляется в каждой ячейке. Для этого получите длину её содержимого без кода и вычтите ее из общей первоначальной длины ячейки. Эта операция должна быть выполнена для 1 и 2 ячейки отдельно, например:
ДЛСТР(B2)-ДЛСТР(ПОДСТАВИТЬ(B2; $A2;»»))
а также
ДЛСТР(C2)-ДЛСТР(ПОДСТАВИТЬ(C2; $A2;»»))
- Теперь вы приравниваете эти 2 числа, поместив знак равенства (=) между указанными выше частями.
ДЛСТР(B2)-ДЛСТР(ПОДСТАВИТЬ(B2; $A2;»»)) = ДЛСТР(C2)-ДЛСТР(ПОДСТАВИТЬ(C2; $A2;»»))
В нашем примере код находится в A2, а значения находится в B2 и C2.
Выражение возвращает ИСТИНА, если B2 и C2 содержат одинаковое количество вхождений символа из A2, в противном случае — ЛОЖЬ. Чтобы сделать результаты более понятными для ваших пользователей, вы можете встроить его в функцию ЕСЛИ:
=ЕСЛИ(ДЛСТР(B2)-ДЛСТР(ПОДСТАВИТЬ(B2; $A2;»»)) = ДЛСТР(C2)-ДЛСТР(ПОДСТАВИТЬ(C2; $A2;»»)); «Совпадает»; «НЕ совпадает»)
Как вы можете видеть на скриншоте выше, всё работает отлично, несмотря на пару дополнительных сложностей:
- Подсчитываемый символ (уникальный идентификатор) может появляться в любом месте ячейки.
- Записи содержат переменное количество символов и разные разделители, такие как точка с запятой, запятая или пробел.
Вот как можно при помощи формул можно сравнивать ячейки в 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
- макросы
Я хотел бы сравнить значение двух ячеек и посмотреть, совпадают они или нет. Я знаю, как это сделать в Excel, но я не знаю, как написать код vba.
Ввод и вывод:
- Значение ячейки A1 уже находится в Excel.
- Вручную введите значение в ячейку B1.
- щелкните подпункт button_click, чтобы увидеть, совпадают ли значения в 2 ячейках или нет.
- Показать «Да» или «Нет» в ячейке C1
Формула Excel:
=IF(A1=B1,"yes","no")
5 ответов
Лучший ответ
Вы можете использовать функцию IIF в VBA. Он похож на Excel IF
[c1] = IIf([a1] = [b1], "Yes", "No")
0
Paul Kelly
21 Янв 2015 в 16:47
Sub CompareandHighlight()
Dim n As Integer
Dim sh As Worksheets
Dim r As Range
n = Worksheets("Indices").Range("E:E").Cells.SpecialCells(xlCellTypeConstants).Count
Application.ScreenUpdating = False
Dim match As Boolean
Dim valE As Double
Dim valI As Double
Dim i As Long, j As Long
For i = 2 To n
valE = Worksheets("Indices").Range("E" & i).Value
valI = Worksheets("Indices").Range("I" & i).Value
If valE = valI Then
Else:
Worksheets("Indices").Range("E" & i).Font.Color = RGB(255, 0, 0)
End If
Next i
Application.ScreenUpdating = True
End Sub
0
barbsan
21 Ноя 2018 в 09:46
Вот подписка на изменение (код ДОЛЖЕН находиться в модуле листа). Он активируется, только если вы измените ячейку в столбце B.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub
If Cells(Target.Row, 1).Value = Cells(Target.Row, 2).Value Then
Cells(Target.Row, 3).Value = "Yes"
Else
Cells(Target.Row, 3).Value = "No"
End If
End Sub
Для записи здесь не используется кнопка, но достигается ваша цель — вычислить, равны ли две ячейки каждый раз, когда вы вручную вводите данные в ячейки в столбце B.
0
Chrismas007
21 Янв 2015 в 16:08
If (Range("A1").Value = Range("B1").Value) Then
Range("C1").Value = "Yes"
Else
Range("C1").Value = "No"
End If
2
Chrismas007
21 Янв 2015 в 19:09
Дайте это попробовать:
Sub CompareCells()
If [a1] = [b1] Then
[c1] = "yes"
Else
[c1] = "no"
End If
End Sub
Назначьте этот код кнопке.
4
Gary’s Student
21 Янв 2015 в 15:58