Как соединить строку и переменную в Excel VBA (подробный анализ)

  • Поделись Этим
Hugh West

Во время работы с 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 для получения новых сообщений и обновлений.

Хью Уэст — опытный тренер и аналитик Excel с более чем 10-летним опытом работы в отрасли. Он имеет степень бакалавра в области бухгалтерского учета и финансов и степень магистра делового администрирования. Хью страстно любит преподавать и разработал уникальный подход к обучению, которому легко следовать и который легко понять. Его экспертные знания Excel помогли тысячам студентов и специалистов по всему миру улучшить свои навыки и преуспеть в своей карьере. В своем блоге Хью делится своими знаниями со всем миром, предлагая бесплатные учебные пособия по Excel и онлайн-обучение, чтобы помочь отдельным лицам и компаниям полностью раскрыть свой потенциал.