Jak spojit řetězec a proměnnou v aplikaci Excel VBA (podrobná analýza)

  • Sdílet Toto
Hugh West

Při práci s VBA v Excelu musíme často v pracovním listu spojovat řetězec (y) a proměnnou (y). Spojování řetězce (y) a proměnné (y) se hojně využívá téměř ve všech odvětvích našich prací, počínaje shrnutím výsledků studentů a konče analýzou složitého podniku. V tomto článku vám ukážu, jak můžete spojovat řetězec (y) a proměnnou (y) v pracovním listu pomocí nástroje VBA v Excelu. Vysvětlím vám to na vhodných příkladech a ilustracích.

Spojení řetězce (řetězců) a proměnné (proměnných) v aplikaci Excel VBA (Rychlé zobrazení)

Stáhnout cvičebnici

Stáhněte si tento cvičební sešit a procvičujte si při čtení tohoto článku.

Konkatenace řetězce a proměnné.xlsm

Spojení řetězce (řetězců) a proměnné (proměnných) v aplikaci Excel VBA (analýza krok za krokem)

Nejdříve se podívejme, jak můžeme spojit řetězec (s) a proměnnou (s) v příkazu VBA krok za krokem.

⧪ Konkatenace řetězce (s):

Spojení dvou nebo více řetězců v položce VBA , můžete použít jak aritmetický sčítání (+) a symbol ampersand (& ) symbol.

Chcete-li například spojit řetězce "Velká očekávání" a "Příběh dvou měst" s čárka , můžete použít:

 New_String = "Velká očekávání" + ", " + "Příběh dvou měst" 

Nebo,

 New_String = "Great Expectations" & ", " & "Příběh dvou měst" 

Spusťte kterýkoli z výše uvedených kódů. Zobrazí se zřetězený výstup, Velká očekávání, Příběh dvou měst .

⧪ Konkatenační proměnná (s)

Pokud všechny proměnné obsahují řetězcové hodnoty, můžete použít jak aritmetické sčítání (+) a symbol ampersand (&) symbol.

Ale pokud ne, můžete použít pouze funkci ampersand (&) symbol pro zřetězení.

Mějme například dvě proměnné, A a B .

A obsahuje řetězec, "Příběh dvou měst" a B obsahuje jiný řetězec, "Čtyřicet pravidel lásky" .

Můžete použít jak sčítání (+) symbol a ampersand (&) symbol pro jejich spojení.

 A = "Příběh dvou měst" B = "Čtyřicet pravidel lásky" New_String = A + ", " + B 

Nebo,

 A = "Příběh dvou měst" B = "Čtyřicet pravidel lásky" New_String = A & ", " & B 

V obou případech vrátí zřetězený řetězec.

Ale pokud A je řetězec ( " Příběh dvou měst" ) a B je celé číslo ( 27 ), musíte použít ampersand (&) symbol pro zřetězení.

 A = "Příběh dvou měst" B = 27 New_String = A & ", " & B 

Vrátí spojený výstup.

Příklady spojování řetězců a proměnných v Excelu VBA (zahrnující makro, UDF a uživatelský formulář)

Naučili jsme se spojovat řetězec (s) a proměnnou (s) pomocí VBA v Excelu. Tentokrát prozkoumáme několik příkladů zahrnujících spojování řetězce (s) a proměnné (s) pomocí VBA .

Příklad 1: Vývoj makra pro spojování řetězce (s) a proměnné (s) v aplikaci Excel VBA

Naučili jsme se spojovat řetězce a proměnné pomocí VBA . Tentokrát vyvineme Makro ke spojování řetězců a proměnných více sloupců v pracovním listu.

Zde máme datovou sadu s názvy knih , autoři a ceny některých knih z knihkupectví Martin Bookstore.

Vyvíjejme Makro spojit sloupce 1, 2, a 3 souboru dat B4:D14 v buňce F4 .

Na stránkách VBA kód bude:

⧭ Kód 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 

⧭ Výstup:

Spusťte tento kód. 3 sloupce spojené v rozsahu F4:F14.

Další informace: Makro pro spojování více sloupců v aplikaci Excel (s UDF a uživatelským formulářem)

Příklad 2: Vytvoření uživatelsky definované funkce pro spojování řetězce (s) a proměnné (s) v aplikaci Excel VBA

Naučili jsme se rozvíjet Makro ke spojení více sloupců datové sady. Tentokrát vytvoříme soubor Funkce definovaná uživatelem ke spojování řetězců nebo proměnných v aplikaci Excel.

Kompletní VBA kód bude:

⧭ Kód VBA:

 Funkce 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 

⧭ Výstup:

Vyberte sloupec, do kterého chcete rozsah spojit, a zadejte tento vzorec:

=ConcatenateValues("Ona", "H. Rider Haggard",", ")

Vrátí se Ona, H. Rider Haggard jako výstup.

Opět zadejte vzorec:

=ConcatenateValues(B4:B14,30,", ")

[ Vzorec pole Nezapomeňte stisknout CTRL + SHIFT + ENTER pokud nejste v Office 365 .]

Spojí 30 se všemi hodnotami rozsahu B4:B14 .

Nakonec zadejte:

=ConcatenateValues(B4:B14,C4:C14,", ")

[Znovu Vzorec pole Nezapomeňte stisknout CTRL + SHIFT + ENTER pokud nejste v Office 365 .]

Spojí všechny hodnoty z rozsahu B4:B14 s těmi z C4:C14 .

Další informace: Jak spojovat v aplikaci Excel (3 vhodné způsoby)

Podobné čtení:

  • Jak spojit text ze dvou nebo více buněk do jedné buňky v aplikaci Excel (5 metod)
  • Spojení řádků do jedné buňky v aplikaci Excel
  • Spojování čísel v aplikaci Excel (4 rychlé vzorce)
  • Kombinování textu v aplikaci Excel (8 vhodných způsobů)
  • Jak spojovat apostrofy v aplikaci Excel (6 snadných způsobů)

Příklad 3: Vytvoření uživatelského formuláře pro spojování řetězce(ů) a proměnné(ých) v jiném pracovním listu v aplikaci Excel VBA

Naučili jsme se rozvíjet Makro a Funkce definovaná uživatelem ke spojování řetězců a hodnot. Nakonec vytvoříme příkaz Uživatelský formulář spojit řetězce a hodnoty do požadovaného umístění požadovaného pracovního listu.

⧪ Krok 1: Vložení uživatelského formuláře

Přejděte na Insert> UserForm možnost v VBA na panelu nástrojů vložit nový Uživatelský formulář .

⧪ Krok 2: Přetažení nástrojů na formulář uživatele

A Uživatelský formulář s názvem Uživatelský formulář1 bude otevřen spolu s Toolbox s názvem Kontrola .

Přejeďte myší nad e Toolbox a přetáhněte 2 ListBoxy, 5 TextBoxů, 7 Labelů a1 CommanButtons do UserForm. .

Změna zobrazení Štítky jak je znázorněno na obrázku.

Podobně změňte zobrazení CommandButton na OK .

⧪ Krok 3: Psaní kódu pro TextBox1

Dvakrát klikněte na TextBox1 . A Soukromá dílčí procedura s názvem TextBox1_Change Otevře se okno s následujícím kódem.

 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 

⧪ Krok 4: Psaní kódu pro TextBox3

Podobně dvakrát klikněte na TextBox3 . další Soukromá dílčí procedura s názvem TextBox3_Change Otevře se okno s následujícím kódem.

 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 

⧪ Krok 5: Psaní kódu pro textové pole4

Také dvakrát klikněte na TextBox3 . další Soukromá dílčí procedura s názvem TextBox3_Change Otevře se okno s následujícím kódem.

 Private Sub TextBox4_Change() If UserForm1.TextBox3.Text "" Then Selection.Cells(1, 1) = UserForm1.TextBox4.Text End If End Sub 

⧪ Krok 6: Psaní kódu pro ListBox2

Pak dvakrát klikněte na ListBox2 . Když Soukromá dílčí procedura s názvem ListBox2_Click a zadejte tento kód.

 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 

⧪ Krok 7: Psaní kódu pro tlačítko CommanButton1

Také dvakrát klikněte na CommandButton1 . Po Soukromá dílčí procedura s názvem CommandButton1_Change vložte následující kód.

 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 "Vyberte všechny možnosti správně.", vbExclamation End Sub 

⧪ Krok 7: Psaní kódu pro spuštění uživatelského formuláře

Nyní je na řadě poslední krok. Vložte nový Modul z VBA a vložte následující kód.

 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 

⧪ Krok 8: Spuštění uživatelského formuláře

Vaše Uživatelský formulář je nyní připraven k použití. Chcete-li jej spustit, vyberte sadu dat z pracovního listu (Včetně položky Záhlaví ) a spusťte Makro s názvem Run_UserForm .

Na stránkách Uživatelský formulář se načte se všemi možnostmi. Vybraná adresa rozsahu se zobrazí na obrazovce TextBox1 ( B3:D4 zde). Pokud si přejete, můžete jej změnit. Vybraný rozsah v pracovním listu se změní.

Vyberte sloupce, které chcete spojit, ze seznamu Sloupce ke konkatování ListBox. Zde jsem vybral Název knihy a Cena .

Zadejte Oddělovač . Zde jsem zadal čárka ( , ).

Vyberte název listu, do kterého chcete vložit spojený rozsah z nabídky Konkatenované v listbox. Zde jsem zadal List3 .

(V okamžiku, kdy list vyberete, bude aktivován, i když není aktivní.)

Pak vložte Výstupní umístění . Je to odkaz na první buňku spojeného rozsahu. Zde jsem vložil. B3 .

(V okamžiku, kdy vstoupíte do Výstupní umístění , bude vybrán výstupní rozsah).

A nakonec zadejte název Výstupní záhlaví (Záhlaví výstupního rozsahu). Zde jsem vložil Konkatenovaný rozsah .

(V okamžiku, kdy vložíte Výstupní záhlaví , nastaví se záhlaví výstupního sloupce.)

Klikněte na OK . Získáte požadovaný výstup na požadovaném místě.

Další informace: Jak spojit řetězec a celé číslo pomocí VBA

Závěr

Toto je několik příkladů, ve kterých můžete použít aplikaci Excel. VBA pro spojování řetězců a proměnných. Doufám, že vám příklady vše objasnily. Máte nějaké dotazy? Neváhejte se nás zeptat. A nezapomeňte navštívit naše stránky. ExcelWIKI pro další příspěvky a aktualizace.

Hugh West je velmi zkušený školitel a analytik Excelu s více než 10 lety zkušeností v oboru. Má bakalářský titul v oboru Účetnictví a finance a magisterský titul v oboru Business Administration. Hugh má vášeň pro výuku a vyvinul jedinečný přístup k výuce, který lze snadno sledovat a pochopit. Jeho odborné znalosti Excelu pomohly tisícům studentů a profesionálů po celém světě zlepšit své dovednosti a vyniknout ve své kariéře. Prostřednictvím svého blogu Hugh sdílí své znalosti se světem a nabízí bezplatné výukové programy Excelu a online školení, které jednotlivcům a firmám pomohou dosáhnout jejich plného potenciálu.