Як об'єднати рядок і змінну в Excel VBA (детальний аналіз)

  • Поділитися Цим
Hugh West

Під час роботи з 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 для отримання додаткової інформації та оновлень.

Г’ю Вест — досвідчений тренер і аналітик Excel із понад 10-річним досвідом роботи в галузі. Він має ступінь бакалавра з бухгалтерського обліку та фінансів і ступінь магістра з ділового адміністрування. Г’ю має пристрасть до викладання та розробив унікальний підхід до викладання, який легко зрозуміти та дотримуватися. Його експертне знання Excel допомогло тисячам студентів і професіоналів у всьому світі вдосконалити свої навички та досягти успіху в кар’єрі. У своєму блозі Г’ю ділиться своїми знаннями зі світом, пропонуючи безкоштовні навчальні посібники з Excel та онлайн-навчання, щоб допомогти окремим особам і компаніям повністю розкрити свій потенціал.