Съдържание
Докато работите с 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 за повече публикации и актуализации.