Vba excel сравнение ячеек

Обновлено: 06.07.2024

Ниже приведены операторы сравнения, определенные в Visual Basic.

Эти операторы сравнивают два выражения, чтобы определить, равны ли они, и если нет, то их отличия. Is , IsNot и Like подробно обсуждаются на отдельных страницах справки. Реляционные операторы сравнения подробно обсуждаются на этой странице.

Синтаксис

Компоненты

result
Обязательный элемент. Boolean Значение, представляющее результат сравнения.

expression1 , expression2
Обязательный. Любое выражение.

comparisonoperator
Обязательный. Любой оператор реляционного сравнения.

object1 , object2
Обязательный элемент. Имена ссылочных объектов.

string
Обязательный. Произвольное выражение String .

pattern
Обязательный. Любое String выражение или диапазон символов.

Комментарии

В следующей таблице содержится список реляционных операторов сравнения и условий, определяющих, result является ли True False .

Оператор True , если False , если
< (Меньше) expression1 < expression2 expression1 >= expression2
<= (Меньше или равно) expression1 <= expression2 expression1 > expression2
> (Больше) expression1 > expression2 expression1 <= expression2
>= (Больше или равно) expression1 >= expression2 expression1 < expression2
= (Равно) expression1 = expression2 expression1 <> expression2
<> (Не равно) expression1 <> expression2 expression1 = expression2

Оператор = также используется в качестве оператора присваивания.

Is Оператор, IsNot оператор и Like оператор имеют специальные функции сравнения, отличные от операторов в предыдущей таблице.

Сравнение чисел

При сравнении выражения типа Single с одним из типов Double Single выражение преобразуется в Double . это поведение противоположено поведению, обнаруженному в Visual Basic 6.

Аналогично, при сравнении выражения типа Decimal с выражением типа Single или Double Decimal выражение преобразуется в тип Single или Double . Для Decimal выражений любое значение дробной части меньше 1E-28 может быть потеряно. Такая утрата дробных значений может привести к тому, что два значения будут сравниваться как равные, если это не так. По этой причине следует соблюдать осторожность при использовании равенства ( = ) для сравнения двух переменных с плавающей запятой. Безопаснее проверить, является ли абсолютное значение разницы между двумя числами меньше, чем небольшая допустимая погрешность.

Точность чисел с плавающей запятой

При работе с числами с плавающей запятой следует помнить, что они не всегда имеют точное представление в памяти. Это может привести к непредвиденным результатам некоторых операций, таких как сравнение значений и оператор Mod. Дополнительные сведения см. в разделе Устранение неполадок типов данных.

Сравнение строк

При сравнении строк строковые выражения оцениваются на основе их порядка сортировки в алфавитном порядке, который зависит от Option Compare параметра.

Option Compare Binary базовые сравнения строк в порядке сортировки, производном от внутренних двоичных представлений символов. Порядок сортировки определяется кодовой страницей. В следующем примере показан типичный порядок двоичной сортировки.

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text сравнения строк при сравнении без учета регистра, порядок сортировки текста определяется языковым стандартом приложения. При задании Option Compare Text и сортировке символов в предыдущем примере применяется следующий порядок сортировки текста:

Зависимость от локали

При установке Option Compare Text результат сравнения строк может зависеть от языкового стандарта, в котором выполняется приложение. Два символа могут сравниваться как одинаковые в одном языковом стандарте, но не в другом. Если вы используете сравнение строк для принятия важных решений, например, принимаете ли вы попытку входа в систему, вы должны быть извещены о конфиденциальности языкового стандарта. Рекомендуется либо задать Option Compare Binary , либо вызвать метод StrComp , который учитывает языковой стандарт.

Программирование без типов с помощью реляционных операторов сравнения

Использование реляционных операторов сравнения с Object выражениями не допускается в Option Strict On . Если Option Strict имеет значение Off , а expression1 либо expression2 является Object выражением, типы времени выполнения определяют, как они сравниваются. В следующей таблице показано, как сравниваются выражения и результат сравнения, в зависимости от типа операндов среды выполнения.

Если операнды Сравнение:
Как String Сравнение сортировки на основе характеристик сортировки строк.
Оба числовых Объекты, преобразованные в Double , числовое сравнение.
Один числовой и один String String Преобразуется в Double и выполняется числовое сравнение. Если объект String не может быть преобразован в Double , InvalidCastException создается исключение.
Один или оба являются ссылочными типами, отличными от String Возникает исключение InvalidCastException.

Числовые сравнения обрабатываются Nothing как 0. Сравнения строк обрабатываются Nothing как "" (пустая строка).

Перегрузка

Реляционные операторы сравнения ( < . <= , > , >= , = , <> ) могут быть перегружены. Это означает, что класс или структура могут переопределять их поведение, когда операнд имеет тип этого класса или структуры. Если в коде используются какие-либо из этих операторов в таком классе или структуре, убедитесь, что вы понимаете переопределенное поведение. Для получения дополнительной информации см. Operator Procedures.

Обратите внимание, что оператор = можно перегружать только как оператор реляционного сравнения, а не как оператор присваивания.

Пример

В следующем примере показаны различные варианты использования реляционных операторов сравнения, которые используются для сравнения выражений. Реляционные операторы сравнения возвращают Boolean результат, который представляет, принимает ли указанное выражение значение True . При применении > < операторов and к строкам сравнение выполняется с использованием обычного алфавитного порядка сортировки строк. Этот порядок может зависеть от настроек языкового стандарта. Учитывается ли сортировка с учетом регистра или не зависит от параметра параметра Compare .

В предыдущем примере первое сравнение возвращает, False а оставшиеся сравнения возвращают True .

В предыдущей статье Сравнение таблиц в Excel мы рассмотрели подход к сравнению сложных таблиц с использованием формул и без программирования.

В данной статье рассмотрим способ сравнения таблиц Excel с помощью VBA макросов на примере тех же исходных данных.

Проиллюстрируем задачу картинкой из первой статьи.

задача сравнения двух таблиц в Excel

Для начала напишем алгоритм наших действий по сравнению таблиц.

  1. Определим диапазоны данных первой и второй таблицы, то есть найдем последние значимые строки и сохраним их номера в переменных (последняя строка таблицы 1 - last_i и последняя строка таблицы 2 - last_j).
  2. Начнем проходить по каждой строке таблицы 2 (внешний цикл), данные из которой нужно перенести в таблицу 1. С первой строки данных (в примере это строка 3) до последней строки таблицы 2.
  3. Для каждой строки таблицы 2 определим идентификатор строки, путем формирования строки, содержащей полный адрес квартиры (значения из нескольких колонок, разделенные дефисами).
  4. Начнем проходить по каждой строке таблицы 1 (внутренний цикл) с первой строки данных (в примере это строка 3) до последней строки таблицы 1, определяя при этом идентификатор строки.
  5. Сравним значения идентификаторов строк таблицы 1 и таблицы 2.
  6. Если идентификаторы равны, перепишем ФИО покупателя из ячейки таблицы 2 в соответствующую ячейку таблицы 1; прервем внутренний цикл по таблице 1 и перейдем к следующей строке таблицы 2 (переход к п.2).

Теперь остается реализовать алгоритм в виде программного кода макроса.

Для этого откроем вкладку Вид ленты функций Excel. Щелкнем на нижнюю часть со стрелкой кнопки Макросы. В открывшемся подменю выберем Запись макроса. В результате начнется запись нового макроса. Поскольку код мы будем формировать вручную, то еще раз зайдем в подменю макросов и выберем Остановить запись. Далее еще раз войдем в подменю макросов и выберем Макросы.

В появившемся диалоге выделим наш макрос и нажмем Изменить.

На экране откроется окно редактора макросов Visual Basic for Applications. В области кода (правая верхняя область) отображается код только что созданного пустого макроса.

Редактор макросов Visual Basic For Applications

В процедуру Макрос1 (между объявлениями начала и конца процедуры: Sub и End Sub) необходимо вставить код, решающий поставленную задачу. Образец кода представлен ниже.

результат сравнения таблиц в Excel

Результат решения задачи:

Как показано на скриншоте ниже, для сравнения двух столбцов соседних ячеек и выделения несогласованных данных вы можете попробовать методы, описанные в статье.


Сравните два столбца и выделите несогласованные данные с помощью кода VBA

Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!

Как показано на скриншоте выше, вы сравниваете данные в столбце A и столбце B. Запустите следующий код VBA, чтобы выделить несопоставленные данные.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модуль. Затем скопируйте и вставьте следующий код в окно кода.

Код VBA: сравните два столбца и выделите несогласованные данные

3. нажмите F5 ключ для запуска кода. В всплывающем Kutools for Excel в диалоговом окне выберите первый столбец, который необходимо сравнить, затем щелкните значок OK кнопка. Смотрите скриншот.


4. Затем выберите второй сравниваемый столбец в следующем всплывающем окне. Kutools for Excel диалоговое окно.


5. В диалоговом окне, как показано на скриншоте ниже, для выделения несогласованных данных щелкните значок Нет кнопку.


Затем все несогласованные данные между двумя столбцами немедленно выделяются. Смотрите скриншот:


Сравните два столбца и выделите несогласованные данные с помощью Kutools for Excel

Если вы просто хотите узнать и выделить, существуют ли значения ячеек в столбце в другом столбце или нет, например, как показано на скриншоте ниже, номер 2 в столбце A не существует в столбце B, вы можете попробовать Сравнить диапазоны полезности Kutools for Excel.


1. Нажмите Kutools > Вставить > Выберите одинаковые и разные ячейки. Смотрите скриншот:


2. в Выберите одинаковые и разные ячейки диалоговое окно необходимо настроить следующим образом:

2.1 Выберите первый столбец с несовпадающими ячейками, которые вы выделите в Найдите значения в коробке; 2.2 Выберите второй столбец, который вы хотите сравнить, на основе Согласно информации коробка; 2.3 В на основании setcion, выберите Однокамерная вариант; 2.3 Выберите Разные ценности вариант в Найдите раздел; 2.4 В Обработка результатов раздел, проверьте Заполните цвет фона поле и укажите цвет фона из раскрывающегося списка; 2.5 Щелкните значок OK кнопка. Смотрите скриншот:


3. Затем появится диалоговое окно, чтобы сообщить вам, сколько ячеек только в столбце A, но не в столбце B, нажмите кнопку ОК, и все совпавшие ячейки будут выбраны в столбце A.

Если вы хотите получить 30-дневную бесплатную пробную версию этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.

Операторы сравнения сравнивают два выражения и возвращают Boolean значение, представляющее связь их значений. Существуют операторы для сравнения числовых значений, операторы для сравнения строк и операторы для сравнения объектов. Здесь обсуждаются все три типа операторов.

Сравнение числовых значений

Visual Basic сравнивает числовые значения с помощью шести числовых операторов сравнения. Каждый оператор принимает в качестве операндов два выражения, результатом вычисления которых являются числовые значения. В следующей таблице перечислены операторы и приведены примеры каждого из них.

Сравнение строк

Visual Basic сравнивает строки с помощью оператора Like , а также числовых операторов сравнения. Like Оператор позволяет указать шаблон. Затем Строка сравнивается с шаблоном, и, если она соответствует, результатом будет True . В противном случае результат будет False . Числовые операторы позволяют сравнивать значения на String основе их порядка сортировки, как показано в следующем примере.

' The result of the preceding comparison is True.

Результатом в предыдущем примере является то, True что первый символ в первой строке сортируется перед первым символом во второй строке. Если первые символы равны, то сравнение будет продолжаться со следующим символом в обеих строках и т. д. Можно также проверить равенство строк с помощью оператора равенства, как показано в следующем примере.

' The result of the preceding comparison is True.

Если одна строка является префиксом другой, например "AA" и "AAA", более длинная строка считается больше чем укороченная строка. Это показано в следующем примере.

' The result of the preceding comparison is True.

Порядок сортировки основан на двоичном сравнении или текстовом сравнении в зависимости от значения параметра Option Compare . Дополнительные сведения см. в разделе вариант инструкции Compare.

Сравнение объектов

Visual Basic сравнивает две переменные ссылки на объект с помощью оператора is и оператора IsNot. Чтобы определить, ссылаются ли две ссылочные переменные на один и тот же экземпляр объекта, можно использовать любой из этих операторов. Это показано в следующем примере.

В предыдущем примере x Is y принимает значение True , так как обе переменные ссылаются на один и тот же экземпляр. Сравните этот результат со следующим примером.

В предыдущем примере принимает значение x Is y False , поскольку хотя переменные ссылаются на объекты одного типа, они ссылаются на разные экземпляры этого типа.

Если требуется проверить наличие двух объектов, не указывающих на один и тот же экземпляр, IsNot оператор позволяет избежать сочетания грамматически неловкий Not и Is . Это показано в следующем примере.

В предыдущем примере If a IsNot b эквивалентно If Not a Is b .

Сравнение типа объекта

Можно проверить, относится ли объект к определенному типу с помощью TypeOf выражения. Is . Синтаксис выглядит следующим образом:

TypeOf <objectexpression> Is <typename>

Если typename указывает тип интерфейса, TypeOf выражение. Возвращает, Is True Если объект реализует тип интерфейса. Если typename является типом класса, выражение возвращает значение, True Если объект является экземпляром указанного класса или класса, производного от указанного класса. Это показано в следующем примере.

В приведенном выше примере TypeOf x Is Control результатом вычисления выражения True x является тип Button , который наследует от Control .

Читайте также: