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
Операторы сравнения чисел и строк, ссылок на объекты (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 вы можете ознакомиться в статье Знаки подстановки для шаблонов.
wtftaekwondo 0 / 0 / 0 Регистрация: 05.03.2015 Сообщений: 15 |
||||
1 |
||||
06.09.2019, 16:26. Показов 12332. Ответов 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 |
VBA сравнение ячеек и значений |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Переместила кнопку на активный лист, так удобнее.
Если нужно обязательно, чтоб кнопка была на Листе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, но я не знаю, как написать код 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