Как да конкатенирате низ и променлива в Excel VBA (подробен анализ)

  • Споделя Това
Hugh West

Докато работите с VBA в Excel, често се налага да конкатенираме низ (s) и променлива (s) в работен лист. Конкатенирането на низ (s) и променлива (s) се използва широко в почти всички сектори в нашите работи, като се започне от обобщаване на резултатите на учениците и се стигне до анализ на сложен бизнес. В тази статия ще ви покажа как можете да конкатенирате низ (s) и променлива (s) в работен лист с VBA в Excel. Ще обясня нещата с подходящи примери и илюстрации.

Конкатенация на низ(и) и променлива(и) в Excel VBA (бърз преглед)

Изтегляне на работна тетрадка за практика

Изтеглете тази учебна тетрадка, за да се упражнявате, докато четете тази статия.

Конкатенация на низ и променлива.xlsm

Конкатенация на низ (и) и променлива (и) в Excel VBA (анализ стъпка по стъпка)

Първо, нека видим как можем да конкатенираме низ (s) и променлива (s) в VBA стъпка по стъпка.

⧪ Конкатениране на низове (и):

Конкатениране на два или повече символни низа в VBA , можете да използвате както аритметичния добавяне (+) символ и амперсанд (& ) символ.

Например, за да конкатенирате низовете "Големите очаквания" и "Приказка за два града" с запетая , можете да използвате:

 New_String = "Големите надежди" + ", " + "Приказка за два града" 

Или,

 New_String = "Големите надежди" & ", " & "Приказка за два града" 

Изпълнете който и да е от горните кодове. Ще се покаже конкатенираният резултат, "Големите надежди", "Приказка за два града .

⧪ Конкатениране на променлива (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: Разработване на макропрограма за конкатенация на низ (и) и променлива (и) в Excel VBA

Научихме се да конкатенираме низове и променливи с VBA . Този път ще разработим Macro за конкатенация на низове и променливи от няколко колони в работен лист.

Тук имаме набор от данни с имена на книги , автори , и цени на някои книги от книжарница, наречена Martin Bookstore.

Да разработим Macro за конкатенация на колони 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

Научихме се да развиваме Macro за конкатенация на няколко колони от набор от данни. Този път ще създадем Дефинирана от потребителя функция за конкатенация на низове или променливи в Excel.

Пълният VBA кодът ще бъде:

⧭ Код VBA:

 Функция 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",", ")

Тя ще се върне Тя, 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

Научихме се да развиваме Macro и Дефинирана от потребителя функция за конкатенация на низове и стойности. Накрая ще разработим Потребителски формуляр за конкатенация на низове и стойности до желаното място в желания работен лист.

⧪ Стъпка 1: Вмъкване на потребителската форма

Отидете в Insert> UserForm опция в VBA лента с инструменти, за да вмъкнете нов UserForm .

⧪ Стъпка 2: Плъзгане на инструменти към потребителската форма

A UserForm наречен UserForm1 ще бъде отворена, както и Кутия с инструменти наречен Контрол .

Преместете мишката върху th e Toolbox и плъзнете 2 ListBoxes, 5 TextBoxes, 7 Labels и1 CommanButtons в UserForm .

Промяна на дисплеите на Етикети както е показано на фигурата.

По същия начин променете показването на 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 Task: 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 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

Вашият UserForm За да го стартирате, изберете набора от данни от работния лист (Включително Заглавия ) и стартирайте Macro наречен Run_UserForm .

Сайтът Потребителски формуляр ще се зареди с всички опции. Избраният адрес на обхват ще се покаже на TextBox1 ( B3:D4 тук). Ако желаете, можете да го промените. Избраният диапазон в работния лист ще се промени.

Изберете колоните, които искате да обедините, от Колони за конкатиране ListBox. Тук съм избрал Име на книгата и Цена .

Въведете Сепаратор . Тук съм въвел запетая ( , ).

Изберете името на работния лист, в който искате да поставите конкатенирания диапазон от Конкатенирани в listbox. Тук съм въвел Лист3 .

(В момента, в който изберете листа, той ще бъде активиран, дори и да не е активният.)

След това поставете Местоположение на изхода Това е референцията на първата клетка от конкатенирания диапазон. Тук съм поставил B3 .

(В момента, в който влезете в Местоположение на изхода , ще бъде избран обхватът на изхода).

И накрая въведете името на Изходно заглавие (Заглавие на изходния диапазон). Тук съм поставил Конкатениран обхват .

(В момента, в който поставите Изходно заглавие , ще бъде зададено заглавието на изходната колона.)

Кликнете върху ОК . Ще получите желания резултат на желаното място.

Прочетете още: Как да конкатенирате низ и цяло число с помощта на VBA

Заключение

Това са няколко примера, в които можете да използвате Excel VBA за конкатенация на низове и променливи. Надявам се, че примерите са ви изяснили всичко. Имате ли някакви въпроси? Не се колебайте да ни попитате. И не забравяйте да посетите нашия сайт ExcelWIKI за повече публикации и актуализации.

Хю Уест е опитен обучител и анализатор на Excel с над 10 години опит в индустрията. Има бакалавърска степен по счетоводство и финанси и магистърска степен по бизнес администрация. Хю има страст към преподаването и е разработил уникален подход на преподаване, който е лесен за следване и разбиране. Неговите експертни познания по Excel са помогнали на хиляди студенти и професионалисти по целия свят да подобрят уменията си и да постигнат отлични резултати в кариерата си. Чрез своя блог Хю споделя знанията си със света, като предлага безплатни уроци за Excel и онлайн обучение, за да помогне на хората и фирмите да достигнат пълния си потенциал.