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. Показов 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 |
If I understand your problem correctly, the following code should allow you to do what you want. Within the code, you select the range you wish to process; the first column of each data set, and the number of columns within each data set.
It does assume only two data sets, as you wrote, although that could be expanded. And there are ways of automatically determining the dataset columns, if there is no other data in between.
Option Explicit
Option Base 0
Sub RemoveDups()
Dim I As Long, J As Long
Dim rRng As Range
Dim vRng As Variant, vRes() As Variant
Dim bRng() As Boolean
Dim aColumns, lColumns As Long
Dim colRowsDelete As Collection
'vRng to include from first to last column to be tested
Set rRng = Range("f1", Cells(Rows.Count, "F").End(xlUp)).Resize(columnsize:=100)
vRng = rRng
ReDim bRng(1 To UBound(vRng))
'columns to be tested
'Specify First column of each data set
aColumns = Array(1, 13)
'num columns in each data set
lColumns = 3
For I = 1 To UBound(vRng)
bRng(I) = vRng(I, aColumns(0)) = vRng(I, aColumns(1))
For J = 1 To lColumns - 1
bRng(I) = bRng(I) And (vRng(I, aColumns(0) + J) = vRng(I, aColumns(1) + J))
Next J
Next I
'Rows to Delete
Set colRowsDelete = New Collection
For I = 1 To UBound(bRng)
If bRng(I) = True Then colRowsDelete.Add Item:=I
Next I
'Delete the rows
If colRowsDelete.Count > 0 Then
Application.ScreenUpdating = False
For I = colRowsDelete.Count To 1 Step -1
rRng.Rows(colRowsDelete.Item(I)).EntireRow.Delete
Next I
End If
Application.ScreenUpdating = True
End Sub
VBA сравнение ячеек и значений |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Vadim_EC Пользователь Сообщений: 9 |
#1 14.11.2015 12:51:00 Доброго времени суток.
не получилось. Код VBA 13-я строка:
Изменено: Vadim_EC — 14.11.2015 12:53:02 |
||||
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#2 14.11.2015 12:56:50
и/или
<#0> |
||||
МВТ Пользователь Сообщений: 1198 |
#3 14.11.2015 13:00:49 А откуда у Вас должна ошибка взяться при присвоении текстовой переменной значения другой текстовой переменной
В крайнем случае, результатом будет пустая строка. Попробуйте так
|
||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
С виду код рабочий. Вероятно строки реально не равны. Проверьте, записав значения каждой строки в ячейку. Скорее всего где-то лишний пробел или другие символы отличаются. Например где-то «а» русская, а где-то английская. С виду одинаковые, а на деле отличаются. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
МВТ Пользователь Сообщений: 1198 |
#5 14.11.2015 13:05:16 Насчет ошибки был неправ, понял, что не во всех ячейках есть комменты. Тогда проверять
|
||
Vadim_EC Пользователь Сообщений: 9 |
#6 14.11.2015 13:26:34 Спасибо большое!
и
Просто значение комментария было с новой строкой, а в ячейке было только значение текста. Изменено: Vadim_EC — 14.11.2015 13:34:40 |
||||
Я хотел бы сравнить значение двух ячеек и посмотреть, совпадают они или нет. Я знаю, как это сделать в 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