Зміст
У цій статті я покажу, як можна проаналізувати ситуацію в Excel VBA якщо комірка містить значення. Ви навчитеся аналізувати ситуацію як для будь-якого значення, так і для конкретного значення.
Аналіз Excel VBA: якщо комірка містить значення, то (Швидкий перегляд)
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
⧭ Вихід:
Запустіть цей код, натиснувши на кнопку Виконати Sub/UserForm на панелі інструментів.
На екрані з'явиться повідомлення "Дженніфер Марло з'явилася на іспиті з фізики". як осередок C12 містить значення, що дорівнює 50 .
Приклади, що включають, якщо комірка містить значення, то вказаний висновок з Excel VBA
Ми навчилися аналізувати, чи містить комірка значення чи ні в VBA Тепер давайте розглянемо кілька прикладів, щоб прояснити це розуміння.
1. розробка макросу для відсіювання значення, якщо відповідна комірка містить будь-яке значення, в Excel VBA
Давайте розробимо Макрос відфільтрувати студентів, які з'явилися на кожному з іспитів.
Тобто, ми маємо перевірити комірки, в яких стоять позначки кожного з піддослідних, і подивитися, чи містять вони значення, чи ні.
Якщо так, то треба розібратися з прізвищем відповідного студента.
Повна версія VBA Код для цього буде:
⧭ код VBA:
Sub Сортування_комірок_що_містять_значення() Початкова_комірка = InputBox("Введіть посилання на першу комірку відфільтрованих даних: ") 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(Початкова_комірка).Cells(Count, i - 1) = Selection.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 2 Next i End Sub
⧭ Вихід:
Виберіть набір даних (в т.ч. Заголовки ) і запустіть це Макрос .
Спочатку вам буде запропоновано ввести посилання на першу комірку, де ви хочете отримати відфільтровані дані. Я ввів G3 .
Потім натисніть ГАРАЗД. Ви отримаєте прізвища студентів, які з'явилися на кожному з іспитів (в т.ч. Заголовки ) у новому наборі даних, починаючи з комірки 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: Відкриття форми користувача
Перейдіть на сторінку Вставити> 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) у правому нижньому куті.
Змінити відображення на дисплеях Етикетки до Стовпчик пошуку , Зворотний стовпець , Будь-яке значення або конкретне значення , Цінність, і Стартова клітина.
Крім того, змінено відображення на екрані CommandButton1 до ГАРАЗД. .
⧪ Крок 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
Потім двічі клацніть на CommandButton1 . ще один. Приватна підпроцедура під назвою 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 "Виділіть хоча б один стовпець пошуку.", 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 "Виберіть один стовпець повернення.", 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 "Виберіть або будь-яке значення, або конкретне.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Повідомлення: MsgBox "Введіть дійсне посилання на комірку як початкову комірку.", vbExclamation End Sub
⧪ Крок 5: Написання коду для запуску користувацької форми
Нарешті, вставити новий Модуль від Панель інструментів 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 тепер готовий до використання. Виберіть набір даних на робочому аркуші ( B3:E13 тут) (в т.ч. Заголовки ) і запустіть Макрос під назвою Run_UserForm .
На сьогоднішній день, на жаль, це не так. UserForm буде завантажено на робочий аркуш. З кнопки Стовпчик пошуку таблицю, я вибрав Фізика і Математика тому що я хочу отримати прізвища студентів, які з'явилися в Фізика і Математика іспити.
Від Зворотний стовпець таблицю, я вибрав Ім'я студента Тому що я хочу дізнатися імена студентів.
А з боку Будь-яке значення або конкретне значення таблицю, я вибрав Будь-яке значення .
Нарешті, в Стартова комірка Я поклав у коробку G3 .
Потім натисніть ГАРАЗД. Ви отримаєте імена студентів, які з'явилися на Фізика і Математика іспити, починаючи з камери G3 .
Якщо Ви обрали Питома вартість від Будь-яке значення або конкретне значення ви б отримали ще один стіл. TextBox для введення конкретного значення.
Тут я вписав 100 .
Натисніть ГАРАЗД. І ти отримаєш студентів, які отримали 100 в Фізика і Хімія .
Важливі моменти для запам'ятовування
Ми використовували двовимірний масив для повернення прізвищ студентів у Функція, що визначається користувачем описано на прикладі 2 .