Оглавление
В этой статье я покажу вам, как можно проанализировать ситуацию в Excel VBA если ячейка содержит значение. Вы научитесь анализировать ситуацию как для любого значения, так и для конкретного значения.
Анализ Excel VBA: если ячейка содержит значение then (быстрый просмотр)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Дженнифер Марло появилась на экзамене по физике." End If End Sub
Скачать Практическое пособие
Скачайте эту рабочую тетрадь для тренировок, чтобы заниматься во время чтения этой статьи.
VBA If Cell Contains Value Then.xlsmАнализ Excel VBA: если ячейка содержит значение, то вернуть выходные данные (пошаговый анализ)
Здесь у нас есть набор данных с оценками некоторых учеников по физике, химии и математике в школе под названием детский сад "Подсолнух".
Пустые ячейки означают, что студент не явился, то есть отсутствовал на данном экзамене. Теперь давайте проанализируем ситуацию, содержит ли ячейка значение или нет, с этим набором данных.
⧪ Шаг 1: Объявление ячейки
Сначала мы должны объявить ячейку, значение которой мы хотим проанализировать. Давайте проанализируем, явилась ли Дженнифер Марло на экзамен по физике или нет.
Поэтому нам необходимо проверить, является ли клетка C12 содержит значение или нет.
Для этого, во-первых, мы должны объявить ячейку C12 .
Код для достижения этой цели будет выглядеть следующим образом:
Set Cell = Range("C12").Cells(1, 1)
⧪ Шаг 2: Проверка, содержит ли ячейка значение (в том числе конкретное значение)
Далее необходимо проверить, содержит ли ячейка значение или нет. Мы выполним это с помощью функции Если условие Строка кода будет выглядеть так:
If Cell.Value "" Then
Этот код будет выполнен, если ячейка содержит какое-либо значение. Чтобы проверить значение (например, содержит ли ячейка 100 или нет), используйте это конкретное значение со значением Равный символ.
If Cell.Value "" Then
⧪ Шаг 3: Распределение задания
Затем нужно установить задачу, которая будет выполняться, если ячейка содержит значение (или определенное значение).
Здесь мы хотим вывести сообщение "Дженнифер Марло явилась на экзамен по физике". Таким образом, строка кода будет:
MsgBox "Дженнифер Марло явилась на экзамен по физике".
⧪ Шаг 4: Завершение блока If
Наконец, вы должны объявить конец блока If.
End If
Таким образом, полный VBA код будет:
⧭ Код VBA:
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Дженнифер Марло появилась на экзамене по физике." End If End Sub
⧭ Выход:
Запустите этот код, нажав кнопку Run Sub/UserForm на панели инструментов.
На экране появится сообщение "Дженнифер Марло явилась на экзамен по физике". как клетка C12 содержит значение 50 .
Примеры, в которых если ячейка содержит значение, то выводится заданное значение с помощью Excel VBA
Мы научились анализировать, содержит ли ячейка значение или нет в VBA Теперь давайте рассмотрим несколько примеров, чтобы сделать понимание ясным.
1. Разработка макроса для фильтрации значения, если соответствующая ячейка содержит любое значение, в Excel VBA
Давайте разработаем Макро для отсеивания студентов, участвовавших в каждом из экзаменов.
То есть мы должны проверить ячейки, содержащие оценки по каждому из предметов, и посмотреть, содержат ли они значение или нет.
Если да, то мы должны разобраться с именем соответствующего студента.
Полный VBA Код для достижения этой цели будет следующим:
⧭ Код VBA:
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Enter the Reference of the First Cell of Filtered Data: ") For i = 2 To Selection.Columns.Count Range(Starting_Cell).Cells(1, i - 1) = Selection.Cells(1, i) Next i Count = 2 For i = 2 To Selection.Columns.Count For j = 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If Cell.Value "" ThenRange(Starting_Cell).Cells(Count, i - 1) = Selection.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 2 Next i End Sub
⧭ Выход:
Выберите набор данных (Включая Заголовки ) и запустите это Макро .
Сначала вам будет предложено ввести ссылку на первую ячейку, в которой вы хотите отфильтровать данные. Я ввел G3 .
Затем нажмите OK Вы получите имена студентов, которые участвовали в каждом из экзаменов (включая Заголовки ) в новом наборе данных, начиная с ячейки G3 .
2. Создание пользовательской функции для сортировки значения, если соответствующая ячейка содержит определенное значение, в Excel VBA
Теперь мы создадим пользовательскую функцию, которая будет возвращать имена студентов, получивших определенную отметку по каждому из предметов.
Процедура почти такая же, как и выше. Нужно проверить ячейки, содержащие оценки по каждому из предметов, и выяснить, равны ли они определенному значению или нет.
Если да, то мы вернем имя соответствующего студента.
Сайт VBA код будет:
⧭ Код VBA:
Function Cells_with_Values(Rng As Range, Data As Variant) Dim Output() As Variant ReDim Output(Rng.Rows.Count, Rng.Columns.Count - 1) For i = 0 To Rng.Columns.Count - 2 Output(0, i) = Rng.Cells(1, i + 2) Next i Count = 1 For i = 2 To Rng.Columns.Count For j = 2 To Rng.Rows.Count Set Cell = Rng.Cells(j, i) If Cell.Value = Data Then Output(Count, i - 2) =Rng.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 1 Next i For i = LBound(Output, 1) To UBound(Output, 1) For j = LBound(Output, 2) To UBound(Output, 2) If Output(i, j) = 0 Then Output(i, j) = "" End If Next j Next i Cells_with_Values = Output End Function
⧭ Выход:
Код создает функцию под названием Ячейки_со_значениями который принимает два аргумента, a Диапазон и Значение .
Давайте найдем студентов, получивших 100 баллов по каждому из предметов, используя эту функцию.
Выберите диапазон ячеек в рабочем листе и введите эту функцию в первую ячейку диапазона:
=Cells_with_Values(B3:E13,100)
[Здесь B3:E3 это мой набор данных (Включая Заголовки ) и 100 это мое совпадающее значение. Вы используете свое].
Затем нажмите CTRL + SHIFT + ENTER ( Формула массива ). Он вернет массив, состоящий из имен учеников, получивших 100 баллов по каждому предмету, включая Заголовки .
3. Разработка пользовательской формы для извлечения значения, если соответствующая ячейка содержит любое значение (или определенное значение) в Excel VBA
Наконец, мы разработаем UserForm для извлечения имен студентов, которые участвовали (или получили определенные оценки) в некоторых конкретных экзаменах.
⧪ Шаг 1: Открытие формы пользователя
Перейти к Insert> UserForm опция в VBA редактор, чтобы открыть новый UserForm . Новый UserForm под названием UserForm1 будет открыта.
⧪ Шаг 2: Перетаскивание инструментов в форму пользователя
Помимо UserForm вы получите Ящик для инструментов Наведите курсор на Ящик для инструментов и перетащить 4 этикетки (Label1, Label2, Label3, Label4) и 3 ListBox (ListBox1, ListBox2, ListBox3) и TextBox (TextBox1) в прямоугольной форме над UserForm .
Затем перетащите другой Этикетка (Label5) и TextBox (TextBox2) в левый нижний угол UserForm .
Наконец, перетащите CommandButton (CommandButton1) в правый нижний угол.
Измените отображение Ярлыки на Колонка поиска , Колонка возврата , Любое значение или конкретное значение , Ценность, и Стартовая ячейка.
Кроме того, измените отображение Командная кнопка1 на OK .
⧪ Шаг 3: Написание кода для ListBox3
Дважды щелкните на ListBox3 . A Частная подпроцедура под названием ListBox3_Click откроется. Введите туда следующий код.
Private Sub ListBox3_Click() If UserForm1.ListBox3.Selected(0) = True Then UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False ElseIf UserForm1.ListBox3.Selected(1) = True Then UserForm1.Label4.Visible = True UserForm1.TextBox1.Visible = True End If End Sub
⧪ Шаг 4: Написание кода для кнопки CommandButton1
Затем дважды щелкните на Командная кнопка1 . Другой Частная подпроцедура под названием CommandButton1_Click откроется. Введите туда следующий код.
Private Sub CommandButton1_Click() On Error GoTo Message Starting_Cell = UserForm1.TextBox2.Text Count1 = 1 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then Range(Starting_Cell).Cells(1, Count1) = Selection.Cells(1, i) Count1 = Count1 + 1 End If Next i If Count1 = 1 Then MsgBox "Select at Least At One Lookup Column.", vbExclamation ExitSub End If Data_Selected = 0 For i = 1 To Selection.Columns.Count If UserForm1.ListBox2.Selected(i - 1) = True Then Data_Selected = i Exit For End If Next i If Data_Selected = 0 Then MsgBox "Select One Return Column.", vbExclamation Exit Sub End If Count2 = 1 Count3 = 2 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then For j= 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If UserForm1.ListBox3.Selected(0) = True Then If Cell.Value "" Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If ElseIf UserForm1.ListBox3.Selected(1) = True ThenIf Cell.Value = UserForm1.TextBox1.Text Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If Else MsgBox "Select Either Any Value or Specific Value.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Message: MsgBox "Введите ссылку на ячейку в качестве начальной ячейки.", vbExclamation End Sub
⧪ Шаг 5: Написание кода для запуска формы UserForm
Наконец, вставьте новый Модуль из Панель инструментов VBA и вставьте туда следующий код.
Sub Run_UserForm() UserForm1.Caption = "Фильтрация ячеек, содержащих значения" UserForm1.ListBox1.BorderStyle = fmBorderStyleSingle UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyle = fmBorderStyleSingle UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox3.BorderStyle = fmBorderStyleSingle UserForm1.ListBox3.ListStyle = fmListStyleOption For i = 1 ToSelection.Columns.Count UserForm1.ListBox1.AddItem Selection.Cells(1, i) UserForm1.ListBox2.AddItem Selection.Cells(1, i) Next i UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti UserForm1.ListBox3.AddItem "Любое значение" UserForm1.ListBox3.AddItem "Конкретное значение" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Load UserForm1 UserForm1.Show End Sub
⧪ Шаг 6: Запуск UserForm (окончательный результат)
Ваш UserForm теперь готова к использованию. Выберите набор данных из рабочего листа ( B3:E13 здесь) (В т.ч. Заголовки ) и запустить Макро под названием Run_UserForm .
Сайт UserForm будет загружен в рабочий лист. Из Колонка поиска таблицу, я выбрал Физика и Математика потому что я хочу получить имена студентов, которые появились в Физика и Математика экзамены.
Из Колонка возврата таблицу, я выбрал Имя студента , потому что я хочу получить имена студентов.
И от Любое значение или конкретное значение таблицу, я выбрал Любое значение .
Наконец, в Начальная ячейка ящик, я положил G3 .
Затем нажмите OK Вы получите имена студентов, которые появились в Физика и Математика экзамены, начиная с клетки G3 .
Если бы вы выбрали Удельная стоимость из Любое значение или конкретное значение стол, вы бы получили еще один TextBox чтобы ввести конкретное значение.
Здесь я ввел 100 .
Нажмите OK . И вы получите студентов, которые получили 100 в Физика и Химия .
О чем следует помнить
Мы использовали двумерный массив, чтобы вернуть имена студентов в Функция, определяемая пользователем описанный в примере 2 .