Hur man sammanfogar strängar och variabler i Excel VBA (en detaljerad analys)

  • Dela Detta
Hugh West

Under arbetet med VBA i Excel måste vi ofta sammanfoga sträng (s) och variabel (s) i ett arbetsblad. Att sammanfoga sträng (s) och variabel (s) används i stor utsträckning i nästan alla sektorer i våra arbeten, från att sammanfatta studenternas resultat till att analysera ett komplext företag. I den här artikeln ska jag visa hur du kan sammanfoga sträng (s) och variabel (s) i ett arbetsblad med VBA i Excel. Jag kommer att förklara saker och ting med hjälp av lämpliga exempel och illustrationer.

Sammanfoga sträng (s) och variabel (s) i Excel VBA (snabbvisning)

Ladda ner övningsboken

Ladda ner den här arbetsboken för att träna medan du läser den här artikeln.

Sammanfoga sträng och variabel.xlsm

Sammanfoga sträng (s) och variabel (s) i Excel VBA (stegvis analys)

Låt oss först och främst se hur vi kan sammanfoga sträng (s) och variabel (s) i VBA steg för steg.

⧪ Samkörning av strängar (s):

För att sammanfoga två eller flera strängar i VBA kan du använda både den aritmetiska tillägg (+) symbolen och den ampersand (& ) symbol.

För att till exempel sammanfoga strängarna "Stora förväntningar" och "En berättelse om två städer" med en kommatecken kan du använda:

 New_String = "Stora förväntningar" + ", " + "En berättelse om två städer" 

Eller,

 New_String = "Stora förväntningar" & ", " & "En berättelse om två städer" 

Kör någon av ovanstående koder, så visas det sammanlänkade resultatet, Stora förväntningar, En berättelse om två städer .

⧪ Sammanfogande variabel (s)

Om alla variabler innehåller strängvärden kan du använda både den aritmetiska tillägg (+) symbolen och den ampersand (&) symbol.

Men om de inte gör det, kan du bara använda ampersand (&) symbol som ska sammanfogas.

Vi har till exempel två variabler, A och B .

A innehåller en sträng, "En berättelse om två städer" , och B innehåller en annan sträng, "Kärlekens fyrtio regler" .

Du kan använda både tillägg (+) symbol och ampersand (&) för att sammanfoga dem.

 A = "En berättelse om två städer" B = "Kärlekens fyrtio regler" New_String = A + ", " + B 

Eller,

 A = "En berättelse om två städer" B = "Kärlekens fyrtio regler" New_String = A & ", ", " & B 

I båda fallen returneras den sammanlänkade strängen.

Men om A är en sträng ( " En berättelse om två städer" ) och B är ett heltal ( 27 ), måste du använda ampersand (&) symbol som ska sammanfogas.

 A = "En berättelse om två städer" B = 27 New_String = A & ", " & B 

Den returnerar det sammanlänkade resultatet.

Exempel på att sammanfoga strängar och variabler i Excel VBA (med makro, UDF och UserForm)

Vi har lärt oss att sammanfoga strängar (s) och variabler (s) med VBA i Excel. Den här gången ska vi utforska några exempel där vi sammanfogar strängar (s) och variabler (s) med VBA .

Exempel 1: Utveckla ett makro för att sammanfoga sträng(er) och variabel(er) i Excel VBA

Vi har lärt oss att sammanfoga strängar och variabler med VBA Den här gången ska vi utveckla en Makro för att sammanfoga strängar och variabler i flera kolumner i ett kalkylblad.

Här har vi en datamängd med namn på böcker , författare , och priser av några böcker från en bokhandel som heter Martin Bookstore.

Låt oss utveckla en Makro för att sammanfoga kolumner 1, 2, och 3 av datamängden B4:D14 i cellen F4 .

VBA koden kommer att vara:

⧭ VBA-kod:

 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 

⧭ Utgång:

Kör den här koden. Du får följande 3 kolumner som är sammanfogade i intervallet F4:F14.

Läs mer: Makro för att sammanfoga flera kolumner i Excel (med UDF och UserForm)

Exempel 2: Skapa en användardefinierad funktion för att sammanfoga sträng (s) och variabel (s) i Excel VBA

Vi har lärt oss att utveckla en Makro för att sammanfoga flera kolumner i en datamängd. Den här gången skapar vi en Användardefinierad funktion för att sammanfoga strängar eller variabler i Excel.

Den fullständiga VBA koden kommer att vara:

⧭ VBA-kod:

 Funktion 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 

⧭ Utgång:

Välj den kolumn där du vill sammanfoga intervallet och ange den här formeln:

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

Den kommer att återkomma Hon, H. Rider Haggard som utgångspunkt.

Ange återigen formeln:

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

[ Formel för arrayer Glöm inte att trycka på CTRL + SHIFT + ENTER om du inte är i Office 365 .]

Den sammanfogar 30 med alla värden i intervallet B4:B14 .

Ange slutligen:

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

[Återigen Formel för arrayer Glöm inte att trycka på CTRL + SHIFT + ENTER om du inte är i Office 365 .]

Den sammanfogar alla värden i intervallet B4:B14 med dem i C4:C14 .

Läs mer: Hur man sammanfogar i Excel (3 lämpliga sätt)

Liknande läsningar:

  • Kombinera text från två eller flera celler till en cell i Excel (5 metoder)
  • Kombinera rader i en cell i Excel
  • Sammanfoga tal i Excel (4 snabbformler)
  • Kombinera text i Excel (8 lämpliga sätt)
  • Hur man sammanfogar apostrof i Excel (6 enkla sätt)

Exempel 3: Utveckla ett användarformulär för att sammanfoga sträng (s) och variabel (s) i ett annat kalkylblad i Excel VBA

Vi har lärt oss att utveckla en Makro och en Användardefinierad funktion för att sammanfoga strängar och värden. Slutligen ska vi utveckla en UserForm för att sammanfoga strängar och värden till önskad plats i önskat arbetsblad.

⧪ Steg 1: Infoga användarformuläret

Gå till Infoga> UserForm i alternativet i VBA verktygsfältet för att infoga en ny UserForm .

⧪ Steg 2: Dra verktyg till användarformuläret

A UserForm kallas . Användarformulär1 kommer att öppnas, tillsammans med en Verktygslåda kallas . Kontroll .

Flytta musen över den e verktygslådan och dra 2 listboxar, 5 textboxar, 7 etiketter och1 kommunknapp i UserForm .

Ändra visningarna av Etiketter som visas i figuren.

På samma sätt kan du ändra visningen av CommandButton till OK .

⧪ Steg 3: Skriva kod för TextBox1

Dubbelklicka på TextBox1 . A Privat underförfarande kallas . TextBox1_Change öppnas. Ange följande kod där.

 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 

⧪ Steg 4: Skriva kod för TextBox3

På samma sätt dubbelklickar du på TextBox3 . en annan Privat underförfarande kallas . TextBox3_Change öppnas. Ange följande kod där.

 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 

⧪ Steg 5: Skriva kod för TextBox4

Dubbelklicka också på TextBox3 . en annan Privat underförfarande kallas . TextBox3_Change öppnas. Ange följande kod där.

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

⧪ Steg 6: Skriva kod för ListBox2

Dubbelklicka sedan på ListBox2 . När Privat underförfarande kallas . ListBox2_Click öppnas, ange koden där.

 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 

⧪ Steg 7: Skriva kod för CommanButton1

Dubbelklicka också på Kommandoknapp1 . Efter den Privat underförfarande kallas . CommandButton1_Change öppnas, och infoga följande kod där.

 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 + 1Slut Om Nästa 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 "Välj alla alternativ korrekt.", vbExclamation End Sub 

⧪ Steg 7: Skriva kod för att köra användarformuläret

Nu kommer det sista steget. Lägg in en ny Modul från VBA verktygsfältet och infoga följande kod.

 Sub Run_UserForm() UserForm1.Caption = "Sammanfoga värden" 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 UserForm1.Show End Sub 

⧪ Steg 8: Kör användarformuläret

Din UserForm är nu redo att användas. För att köra den, välj datamängden från arbetsbladet (inklusive Rubriker ) och kör Makro kallas . Kör_användarformulär .

UserForm kommer att laddas med alla alternativ. Den valda adressen för området kommer att visas på TextBox1 ( B3:D4 Här). Om du vill kan du ändra det. Det valda området i arbetsbladet ändras.

Välj de kolumner som du vill sammanfoga från listan Kolumner att sammanföra ListBox. Här har jag valt Bokens namn och Pris .

Ange Separator . Här har jag angett en kommatecken ( , ).

Välj det arbetsblad där du vill placera det sammanlänkade intervallet från listan Sammanfogade i Här har jag skrivit in Blad3 .

(När du väljer bladet aktiveras det, även om det inte är det aktiva bladet.)

Sätt sedan in Utdragningsplats Det är cellreferensen till den första cellen i det sammanlänkade intervallet. Här har jag satt in B3 .

(I det ögonblick du går in i Utdragningsplats väljs utgångsområdet).

Slutligen anger du namnet på Utgångshuvud (rubrik för utdatafältet). Här har jag satt in Sammanfogat intervall .

(I det ögonblick då du sätter Utgångshuvud , kommer rubriken för utdatakolumnen att ställas in.)

Klicka på OK Du får den önskade produktionen på önskad plats.

Läs mer: Hur man sammanfogar sträng och heltal med VBA

Slutsats

Här är några exempel på hur du kan använda Excel. VBA för att sammanfoga strängar och variabler. Jag hoppas att exemplen har gjort allting ganska tydligt för dig. Har du några frågor? Fråga oss gärna. Och glöm inte att besöka vår webbplats ExcelWIKI för fler inlägg och uppdateringar.

Hugh West är en mycket erfaren Excel-tränare och analytiker med över 10 års erfarenhet i branschen. Han har en kandidatexamen i redovisning och ekonomi och en magisterexamen i företagsekonomi. Hugh har en passion för undervisning och har utvecklat ett unikt undervisningssätt som är lätt att följa och förstå. Hans expertkunskap om Excel har hjälpt tusentals studenter och yrkesverksamma över hela världen att förbättra sina färdigheter och utmärka sig i sina karriärer. Genom sin blogg delar Hugh med sig av sin kunskap med världen, och erbjuder gratis Excel-handledning och onlineutbildning för att hjälpa individer och företag att nå sin fulla potential.