Зміст
Під час роботи з VBA в Excel нам часто доводиться об'єднувати рядок (и) та змінну (и) на робочому аркуші. Об'єднання рядка (ів) та змінної (и) широко використовується майже у всіх секторах у наших роботах, починаючи від підбиття підсумків учнів до аналізу складного бізнесу. У цій статті я покажу вам, як ви можете об'єднати рядок (и) та змінну (и) на робочому аркуші за допомогою VBA Поясню все на відповідних прикладах та ілюстраціях.
Об'єднання рядка (рядків) і змінної (змінних) в Excel VBA (короткий огляд)
Завантажити Практичний посібник
Завантажте цей практичний посібник, щоб потренуватися, поки ви читаєте цю статтю.
Конкатенація рядка та змінної.xlsmОб'єднання рядка (рядків) і змінної (змінних) в Excel VBA (покроковий аналіз)
Перш за все, давайте подивимось, як можна об'єднати рядок (рядки) та змінну (змінні) в VBA крок за кроком.
⧪ Об'єднувальний рядок (рядки):
Щоб об'єднати два або більше рядків в VBA можна використовувати як арифметику додавання (+) і символ амперсанд (& ) символ.
Наприклад, для конкатенації рядків "Великі сподівання" і "Повість про два міста" з кома якими ви можете скористатися:
New_String = "Великі надії" + ", " + "Повість про два міста"
Або,
New_String = "Великі надії" & ", " & "Повість про два міста"
Запустіть будь-який з наведених вище кодів. Він відобразить об'єднаний висновок, Великі надії, або Повість про два міста .
⧪ Змінна (и) об'єднання
Якщо усі змінні містять рядкові значення, то можна використовувати як арифметичні, так і додавання (+) та символ амперсанд (&) символ.
Але якщо вони цього не зроблять, то можна використовувати тільки амперсанд (&) символ для конкатенації.
Наприклад, нехай у нас є дві змінні, A і B .
A містить рядок, "Повість про два міста" і B містить інший рядок, "Сорок правил кохання" .
Ви можете використовувати як додавання (+) символ та амперсанд (&) символ для їх об'єднання.
A = "Повість про два міста" B = "Сорок правил кохання" New_String = A + ", " + B
Або,
A = "Повість про два міста" B = "Сорок правил кохання" New_String = A & ", " & B
В обох випадках вони повернуть об'єднаний рядок.
Але якщо A є рядком ( "Повість про два міста" ) та B є цілим числом ( 27 ), необхідно використовувати амперсанд (&) символ для конкатенації.
A = "Повість про два міста" B = 27 New_String = A & ", " & B
Він поверне конкатенаційний вивід.
Приклади об'єднання рядків і змінних в Excel VBA (з використанням макросу, UDF і UserForm)
Ми навчились конкатенувати рядок (рядки) та змінну (змінні) з допомогою VBA Цього разу ми розглянемо кілька прикладів об'єднання рядка (рядків) і змінної (змінних) за допомогою VBA .
Приклад 1: Розробка макросу для об'єднання рядка (рядків) і змінної (змінних) в Excel VBA
Ми навчились конкатенувати рядки та змінні з допомогою VBA Цього разу ми розробимо Макрос для об'єднання рядків і змінних декількох стовпців на робочому аркуші.
Тут ми маємо набір даних з назви книг , автори і ціни деяких книг книжкового магазину під назвою "Мартін Букстор".
Давайте розробимо Макрос для об'єднання стовпців 1, 2, і 3 набору даних B4:D14 в камері F4 .
На сьогоднішній день, на жаль, це не так. VBA код буде:
⧭ код VBA:
Sub Concatenate_String_and_Variant() Dim Rng As Range Set Rng = Range("B4:D14") Dim Column_Numbers() As Variant Column_Numbers = Array(1, 2, 3) Separator = ", " Output_Cell = "F4" For i = 1 To Rng.Rows.Count Output = "" For j = LBound(Column_Numbers) To UBound(Column_Number) If j UBound(Column_Numbers) Then Output = Output & Rng.Cells(i, Int(Column_Numbers(j)))& Separator Else Output = Output & Rng.Cells(i, Int(Column_Numbers(j))) End If Next j Range(Output_Cell).Cells(i, 1) = Output Next i End Sub
⧭ Вихід:
Запустіть цей код. Ви отримаєте 3 стовпці, об'єднані в діапазоні F4:F14.
Читати далі: Макрос для об'єднання декількох стовпців в Excel (з UDF та UserForm)
Приклад 2: Створення користувацької функції для об'єднання рядка (рядків) і змінної (змінних) в Excel VBA
Ми навчилися розробляти Макрос для об'єднання декількох стовпців набору даних. Цього разу ми створимо Функція, що визначається користувачем для об'єднання рядків або змінних в Excel.
Повна версія VBA код буде:
⧭ код VBA:
Function ConcatenateValues(Value1, Value2, Separator) If VarType(Value1) 8204 And VarType(Value2) 8204 Then ConcatenateValues = Value1 & Separator & Value2 ElseIf VarType(Value1) = 8204 And VarType(Value2) 8204 Then Dim Output1() As Variant ReDim Output1(Value1.Rows.Count - 1, 0) For i = 1 To Value1.Rows.Count Output1(i - 1, 0) = Value1.Cells(i, 1) &Separator & Value2 Next i ConcatenateValues = Output1 ElseIf VarType(Value1) = 8204 And VarType(Value2) = 8204 Then Dim Output2() As Variant ReDim Output2(Value1.Rows.Count - 1, 0) For i = 1 To Value1.Rows.Count Output2(i - 1, 0) = Value1.Cells(i, 1) & Separator & Value2.Cells(i, 1) Next i ConcatenateValues = Output2 End If End Function
⧭ Вихід:
Виберіть стовпець, в якому потрібно об'єднати діапазон, і введіть цю формулу:
=ConcatenateValues("She", "H. Rider Haggard",", ")
Він повернеться. Вона, Х. Райдер Хаггард. на виході.
Знову вводимо формулу:
=ConcatenateValues(B4:B14,30,", ")
[ Формула масиву Тож не забудьте натиснути CTRL + SHIFT + ENTER якщо ви не перебуваєте в Office 365 .]
Він об'єднає 30 з усіма значеннями діапазону B4:B14 .
Нарешті, заходьте:
=ConcatenateValues(B4:B14,C4:C14,", ")
[Знову Формула масиву Тож не забудьте натиснути CTRL + SHIFT + ENTER якщо ви не перебуваєте в Office 365 .]
Він об'єднає всі значення діапазону B4:B14 з тими, що є у C4:C14 .
Читати далі: Як виконати конкатенацію в Excel (3 відповідні способи)
Схожі читання:
- Як об'єднати текст з двох і більше комірок в одну в Excel (5 способів)
- Об'єднання рядків в одну комірку в Excel
- Об'єднання чисел в Excel (4 швидкі формули)
- Об'єднання тексту в Excel (8 підходящих способів)
- Як об'єднати апостроф в Excel (6 простих способів)
Приклад 3: Розробка користувацької форми для об'єднання рядка (рядків) та змінної (змінних) на різних аркушах в Excel VBA
Ми навчилися розробляти Макрос і Функція, що визначається користувачем для конкатенації рядків і значень. Нарешті, ми розробимо UserForm для об'єднання рядків і значень в потрібне місце на потрібному аркуші.
⧪ Крок 1: Вставка форми користувача
Перейдіть на сторінку Вставити> UserForm опція в VBA панелі інструментів, щоб вставити новий UserForm .
⧪ Крок 2: Перетягування інструментів на форму користувача
A UserForm під назвою UserForm1 буде відкрито, а також Інструментарій під назвою Контроль .
Наведіть курсор миші на e Панель інструментів та перетягніть 2 поля зі списком, 5 текстових полів, 7 міток та 1 кнопку з перемикачем у форму користувача .
Змінити відображення на дисплеях Етикетки як показано на рисунку.
Аналогічним чином змініть відображення CommandButton до ГАРАЗД. .
⧪ Крок 3: Написання коду для TextBox1
Двічі натисніть на TextBox1 . A Приватна підпроцедура під назвою TextBox1_Change Відкриється вікно, в якому введіть наступний код.
Private Sub TextBox1_Change() On Error GoTo Task Range(UserForm1.TextBox1.Text).Select UserForm1.ListBox1.Clear For i = 1 To Range(UserForm1.TextBox1.Text).Columns.Count UserForm1.ListBox1.AddItem Range(UserForm1.TextBox1.Text).Cells(1, i) Next i Exit Sub Task: x = 5 End Sub
⧪ Крок 4: Написання коду для TextBox3
Аналогічно, двічі клацніть на TextBox3 . ще один. Приватна підпроцедура під назвою TextBox3_Change Відкриється вікно, в якому введіть наступний код.
Private Sub TextBox3_Change() On Error GoTo Task Starting_Cell = UserForm1.TextBox3.Text For i = 1 To Len(Starting_Cell) If Asc(Mid(Starting_Cell, i, 1))>= 48 And Asc(Mid(Starting_Cell, i, 1)) <= 57 Then Col = Left(Starting_Cell, i - 1) Row = Right(Starting_Cell, Len(Starting_Cell) - i + 1) End_Range = Col + Right(Str(Int(Row) +Range(UserForm1.TextBox1.Text).Rows.Count - 1), Len(Str(Int(Row) + 10)) - 1) Set Rng = Range(Starting_Cell + ":" + End_Range) Rng.Select Exit For End If Next i Rng.Cells(1, 1) = UserForm1.TextBox4.Text Exit Sub Завдання: x = 5 End Sub
⧪ Крок 5: Написання коду для TextBox4
Також двічі натисніть на TextBox3 . ще один. Приватна підпроцедура під назвою TextBox3_Change Відкриється вікно, в якому введіть наступний код.
Private Sub TextBox4_Change() If UserForm1.TextBox3.Text "" Then Selection.Cells(1, 1) = UserForm1.TextBox4.Text End If End Sub
⧪ Крок 6: Написання коду для ListBox2
Потім двічі клацніть на ListBox2 Коли в Україні з'явився Приватна підпроцедура під назвою ListBox2_Click відкриється, введіть туди цей код.
Private Sub ListBox2_Click() Reserved_Address = Selection.Address For i = 0 To UserForm1.ListBox2.ListCount - 1 If UserForm1.ListBox2.Selected(i) = True Then Worksheets(UserForm1.ListBox2.List(i)).Activate Range(Reserved_Address).Select Exit For End If Next i If UserForm1.TextBox3.Text "" Then Selection.Cells(1, 1) = UserForm1.TextBox4.Text End If End Sub
⧪ Крок 7: Написання коду для кнопки CommanButton1
Також двічі натисніть на CommandButton1 Після того, як Приватна підпроцедура під назвою CommandButton1_Change відкриється, вставте туди наступний код.
Private Sub CommandButton1_Click() On Error GoTo Message Dim Rng As Range Set Rng = Worksheets(UserForm1.TextBox5.Text).Range(UserForm1.TextBox1.Text) Dim Column_Numbers() As Variant Count = 0 For i = 0 To UserForm1.ListBox1.ListCount - 1 If UserForm1.ListBox1.Selected(i) = True Then ReDim Preserve Column_Numbers(Count) Column_Numbers(Count) = i + 1 Count = Count + 1End If Next i Роздільник = UserForm1.TextBox2.Text Output_Cell = UserForm1.TextBox3.Text For i = 0 To UserForm1.ListBox2.ListCount-1 If UserForm1.ListBox2.Selected(i) = True Then Sheet_Name = UserForm1.ListBox2.List(i) Exit For End If Next i Worksheets(Sheet_Name).Range(Output_Cell).Cells(1, 1) = UserForm1.TextBox4.Text For i = 2 To Rng.Rows.Count Output = "" For j= LBound(Column_Numbers) To UBound(Column_Numbers) If j UBound(Column_Numbers) Then Output = Output & Rng.Cells(i, Int(Column_Numbers(j))) & Роздільник Else Output = Output & Rng.Cells(i, Int(Column_Numbers(j))) End If Next j Worksheets(Sheet_Name).Range(Output_Cell).Cells(i, 1) = Output Next i Вивантажити Користувацьку форму UserForm1 Exit Sub Message:MsgBox "Виберіть всі опції правильно.", vbExclamation End Sub
⧪ Крок 7: Написання коду для запуску користувацької форми
Залишився останній крок - вставити новий Модуль від VBA і вставити наступний код.
Sub Run_UserForm() UserForm1.Caption = "Конкатенація значень" UserForm1.TextBox1.Text = Адреса вибору UserForm1.TextBox5.Text = Ім'я активного листа UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox1.BorderStyle = fmBorderStyleSingle UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti UserForm1.ListBox1.Clear For i = 1 To Selection.Columns.Count UserForm1.ListBox1.AddItemSelection.Cells(1, i) Next i UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyle = fmBorderStyleSingle For i = 1 To Sheets.Count UserForm1.ListBox2.AddItem Sheets(i).Name Next i Load UserForm1 UserForm1.Show End Sub
⧪ Крок 8: Запуск форми користувача
Твій UserForm Щоб запустити його, виберіть набір даних на робочому аркуші (включаючи Заголовки ) і запустіть Макрос під назвою Run_UserForm .
На сьогоднішній день, на жаль, це не так. UserForm завантажиться з усіма опціями. Обрана адреса діапазону буде показана на TextBox1 ( B3:D4 При бажанні його можна змінити, при цьому зміниться виділений діапазон на робочому аркуші.
Виберіть стовпці, які потрібно об'єднати, у вікні Стовпчики для конкатенації ListBox. Тут я вибрав Назва книги і Ціна .
Введіть Сепаратор Тут я вписав кома ( , ).
Виберіть ім'я аркуша, на якому потрібно розмістити об'єднаний діапазон, зі списку Об'єднані в Тут я ввів Лист3 .
(Як тільки ви виберете аркуш, він буде активований, навіть якщо він не є активним).
Потім вставте Розташування виходу Це посилання на першу комірку об'єднаного діапазону. Тут я ввів B3 .
(Момент, коли ви входите в Розташування виходу буде обрано вихідний діапазон).
І, нарешті, введіть назву Вихідний заголовок (Заголовок вихідного діапазону). Тут я поставив Об'єднаний діапазон .
(У той момент, коли ви ставите Вихідний заголовок буде задано заголовок стовпця виводу).
Натисніть ГАРАЗД. Ви отримаєте бажаний результат у бажаному місці.
Докладніше: Як об'єднати рядок та ціле число засобами VBA
Висновок
Отже, ось кілька прикладів, в яких можна використовувати Excel VBA конкатенація рядків і змінних. Сподіваюся, приклади були для вас досить зрозумілими. Якщо у вас залишилися питання - задавайте їх нам. І не забувайте заглядати на наш сайт ExcelWIKI для отримання додаткової інформації та оновлень.