Оглавление
Во время работы с VBA В Excel нам часто приходится конкатенировать строку (s) и переменную (s) в рабочем листе. Конкатенация строки (s) и переменной (s) широко используется практически во всех отраслях нашей работы, начиная от подведения итогов студентов и заканчивая анализом сложного бизнеса. В этой статье я покажу вам, как можно конкатенировать строку (s) и переменную (s) в рабочем листе с помощью следующих средств VBA в Excel. Я объясню все на соответствующих примерах и иллюстрациях.
Конкатенация строки (s) и переменной (s) в Excel VBA (быстрый просмотр)
Скачать Практическое пособие
Скачайте эту рабочую тетрадь для тренировок, чтобы заниматься во время чтения этой статьи.
Concatenate String and Variable.xlsmКонкатенация строки (s) и переменной (s) в Excel VBA (пошаговый анализ)
Прежде всего, давайте посмотрим, как мы можем объединить строку (s) и переменную (s) в VBA шаг за шагом.
⧪ Конкатенирование строк (s):
Для конкатенации двух или более строк в VBA вы можете использовать как арифметические, так и добавление (+) символ и амперсанд (& ) символ.
Например, для конкатенации строк "Большие надежды" и "Повесть о двух городах" с запятая , вы можете использовать:
New_String = "Большие надежды" + ", " + "Повесть о двух городах"
Или,
New_String = "Great Expectations" & ", " & "A Tale of Two Cities"
Запустите любой из приведенных выше кодов. Он отобразит конкатенированный результат, Большие надежды, Повесть о двух городах .
⧪ Конкатенирующая переменная (s)
Если все переменные содержат строковые значения, то можно использовать как арифметические, так и добавление (+) символ и амперсанд (&) символ.
Но если это не так, то вы можете использовать только амперсанд (&) символ для конкатенации.
Например, пусть у нас есть две переменные, 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)
Мы научились конкатенировать строку (s) и переменную (s) с помощью VBA В этот раз мы рассмотрим несколько примеров, связанных с конкатенацией строки (s) и переменной (s) с помощью функции VBA .
Пример 1: Разработка макроса для конкатенации строки (s) и переменной (s) в Excel VBA
Мы научились конкатенировать строки и переменные с помощью функции VBA На этот раз мы разработаем Макро для объединения строк и переменных нескольких столбцов рабочего листа.
Здесь у нас есть набор данных с названия книг , авторы и цены некоторых книг книжного магазина под названием "Мартин Букстор".
Давайте разработаем Макро для конкатенации столбцов 1, 2, и 3 набора данных B4:D14 в камере F4 .
Сайт VBA код будет:
⧭ Код VBA:
Sub Concatenate_String_and_Variable() 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: Создание пользовательской функции для конкатенации строки (s) и переменной (s) в 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 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: Разработка пользовательской формы для конкатенации строки (s) и переменной (s) в другом рабочем листе в Excel VBA
Мы научились разрабатывать Макро и Функция, определяемая пользователем для конкатенации строк и значений. Наконец, мы разработаем программу UserForm для конкатенации строк и значений в нужное место нужного рабочего листа.
⧪ Шаг 1: Вставка формы UserForm
Перейти к Insert> UserForm опция в VBA панели инструментов, чтобы вставить новый UserForm .
⧪ Шаг 2: Перетаскивание инструментов в форму пользователя
A UserForm под названием UserForm1 будет открыт, наряду с Ящик для инструментов под названием Контроль .
Наведите курсор мыши на e Toolbox и перетащите 2 ListBox, 5 TextBox, 7 Labels и1 CommanButton в UserForm .
Измените отображение Ярлыки как показано на рисунке.
Аналогичным образом измените отображение CommandButton на OK .
⧪ Шаг 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 End Sub
⧪ Шаг 7: Написание кода для CommanButton1
Также дважды щелкните на Командная кнопка1 . После Частная подпроцедура под названием 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 Separator = 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))) & Separator 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 Unload UserForm1 Exit Sub Message:MsgBox "Выберите все варианты правильно.", vbExclamation End Sub
⧪ Шаг 7: Написание кода для запуска формы UserForm
Теперь последний шаг. Вставьте новый Модуль из VBA панели инструментов и вставьте следующий код.
Sub Run_UserForm() UserForm1.Caption = "Concatenate Values" UserForm1.TextBox1.Text = Selection.Address UserForm1.TextBox5.Text = ActiveSheet.Name 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 .
(В тот момент, когда вы входите в Расположение выхода , будет выбран выходной диапазон).
И, наконец, введите имя Выходной заголовок (Заголовок выходного диапазона). Здесь я поместил Конкатенированный диапазон .
(В тот момент, когда вы ставите Выходной заголовок будет установлен заголовок выходного столбца).
Нажмите OK Вы получите желаемый результат в желаемом месте.
Подробнее: Как объединить строку и целое число с помощью VBA
Заключение
Вот несколько примеров, в которых вы можете использовать Excel VBA для конкатенации строк и переменных. Надеюсь, что примеры были достаточно понятны для вас. У вас есть вопросы? Не стесняйтесь задавать их нам. И не забудьте посетить наш сайт ExcelWIKI для получения новых сообщений и обновлений.