Jak połączyć ciąg i zmienną w Excelu VBA (szczegółowa analiza)

  • Udostępnij To
Hugh West

Podczas pracy z VBA w Excelu, często musimy konkatenować ciąg (s) i zmienną (s) w arkuszu. Konkatenacja ciągu (s) i zmiennej (s) jest szeroko stosowana w prawie wszystkich sektorach w naszych pracach, począwszy od podsumowania wyników studentów do analizy złożonego biznesu. W tym artykule pokażę Ci, jak możesz konkatenować ciąg (s) i zmienną (s) w arkuszu za pomocą VBA w Excelu. Będę wyjaśniał te rzeczy na odpowiednich przykładach i ilustracjach.

Łączenie łańcucha (s) i zmiennej (s) w Excelu VBA (szybki podgląd)

Pobierz Zeszyt ćwiczeń

Pobierz ten zeszyt ćwiczeń, aby ćwiczyć podczas czytania tego artykułu.

Concatenate String and Variable.xlsm

Konkatenacja łańcucha (s) i zmiennej (s) w Excelu VBA (analiza krok po kroku)

Po pierwsze, zobaczmy jak możemy konkatenować ciąg znaków (s) i zmienną (s) w VBA krok po kroku.

⧪ Concatenating String (s):

Aby połączyć dwa lub więcej ciągów w VBA można użyć zarówno arytmetyki dodatek (+) symbol i ampersand (& ) symbol.

Na przykład, aby połączyć ciągi znaków "Great Expectations" oraz "Opowieść o dwóch miastach" z przecinek , można użyć:

 New_String = "Great Expectations" + ", " + "A Tale of Two Cities" 

Albo,

 New_String = "Great Expectations" & ", " & "A Tale of Two Cities" 

Uruchom dowolny z powyższych kodów, wyświetli on konkatenowane dane wyjściowe, Wielkie oczekiwania, Opowieść o dwóch miastach .

⧪ Zmienna konkatenacyjna (s)

Jeśli wszystkie zmienne zawierają wartości łańcuchowe, to można użyć zarówno arytmetyki dodatek (+) symbol i ampersand (&) symbol.

Ale jeśli nie, to możesz użyć tylko ampersand (&) symbol do konkatenacji.

Na przykład Let's have two variables, A oraz B .

A zawiera ciąg znaków, "Opowieść o dwóch miastach" oraz B zawiera inny ciąg znaków, "Czterdzieści zasad miłości" .

Możesz użyć zarówno dodatek (+) symbol i ampersand (&) aby je połączyć.

 A = "Opowieść o dwóch miastach" B = "Czterdzieści zasad miłości" New_String = A + ", " + B 

Albo,

 A = "Opowieść o dwóch miastach" B = "Czterdzieści zasad miłości" New_String = A & ", " & B 

W obu przypadkach zwrócą one konkatenowany ciąg znaków.

Ale jeśli A jest ciągiem znaków ( " Opowieść o dwóch miastach" ) oraz B jest liczbą całkowitą ( 27 ), musisz użyć ampersand (&) symbol do konkatenacji.

 A = "Opowieść o dwóch miastach" B = 27 New_String = A & ", " & B 

To zwróci konkatenowane wyjście.

Przykłady łączenia ciągów i zmiennych w Excelu VBA (z uwzględnieniem makr, FROM i formularzy użytkownika)

Nauczyliśmy się konkatenować ciąg (s) i zmienną (s) za pomocą VBA Tym razem przeanalizujemy kilka przykładów konkatenacji łańcucha (s) i zmiennej (s) za pomocą VBA .

Przykład 1: Opracowanie makra do łączenia łańcucha (s) i zmiennej (s) w Excelu VBA

Nauczyliśmy się łączyć ciągi i zmienne za pomocą VBA Tym razem opracujemy Makro aby połączyć ciągi i zmienne wielu kolumn w arkuszu.

Mamy tu zestaw danych z nazwy książek , autorzy oraz ceny niektórych książek księgarni o nazwie Martin Bookstore.

Opracujmy Makro aby połączyć kolumny 1, 2, oraz 3 zbioru danych B4:D14 w komórce F4 .

Na stronie VBA kod będzie:

⧭ Kod 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 

⧭ Wyjście:

Uruchom ten kod, a otrzymasz 3 kolumny połączone w zakresie F4:F14.

Czytaj więcej: Makro do łączenia wielu kolumn w Excelu (z UDF i UserForm)

Przykład 2: Tworzenie funkcji zdefiniowanej przez użytkownika do łączenia łańcucha (s) i zmiennej (s) w Excelu VBA

Nauczyliśmy się rozwijać Makro aby połączyć wiele kolumn z zestawu danych. Tym razem stworzymy Funkcja zdefiniowana przez użytkownika do konkatenacji ciągów lub zmiennych w Excelu.

Całość VBA kod będzie:

⧭ Kod 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 

⧭ Wyjście:

Wybierz kolumnę, w której chcesz konkatenować zakres i wprowadź tę formułę:

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

Wróci Ona, H. Rider Haggard jako wyjście.

Ponownie należy wprowadzić formułę:

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

[ Wzór na tablicę . So don't forget to press CTRL + SHIFT + ENTER chyba że jesteś w Office 365 .]

To będzie konkatenacja 30 z wszystkimi wartościami z zakresu B4:B14 .

Na koniec należy wpisać:

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

[Ponownie Wzór na tablicę . So don't forget to press CTRL + SHIFT + ENTER chyba że jesteś w Office 365 .]

Będzie konkatenować wszystkie wartości z zakresu B4:B14 z tymi z C4:C14 .

Read More: Jak konkatenować w Excelu (3 odpowiednie sposoby)

Podobne Lektury:

  • Jak połączyć tekst z dwóch lub więcej komórek w jedną komórkę w programie Excel (5 metod)
  • Łączenie wierszy w jedną komórkę w programie Excel
  • Łączenie liczb w Excelu (4 szybkie formuły)
  • Łączenie tekstu w programie Excel (8 odpowiednich sposobów)
  • Jak konkatenować apostrofy w Excelu (6 prostych sposobów)

Przykład 3: Tworzenie formularza użytkownika do łączenia łańcucha (s) i zmiennej (s) w innym arkuszu w Excelu VBA

Nauczyliśmy się rozwijać Makro i Funkcja zdefiniowana przez użytkownika aby łączyć ciągi znaków i wartości. Na koniec stworzymy program UserForm aby konkatenować ciągi i wartości do żądanej lokalizacji żądanego arkusza.

⧪ Krok 1: Wstawienie formularza UserForm

Idź do Insert> UserForm opcja w VBA pasek narzędzi, aby wstawić nowy UserForm .

⧪ Krok 2: Przeciąganie narzędzi do formularza użytkownika

A UserForm o nazwie UserForm1 zostanie otwarty, wraz z Skrzynka narzędziowa o nazwie Kontrola .

Przesuń kursor myszy na e Toolbox i przeciągnij 2 ListBoxy, 5 TextBoxów, 7 Etykiet i 1 CommanButton w UserForm. .

Zmienić wskazania Etykiety jak pokazano na rysunku.

W podobny sposób można zmienić wyświetlanie CommandButton do OK .

⧪ Krok 3: Napisanie kodu dla TextBox1

Kliknij dwukrotnie na TextBox1 . A Podprocedura prywatna o nazwie TextBox1_Change otworzy się, wprowadź tam następujący kod.

 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 Zadanie: x = 5 End Sub. 

⧪ Krok 4: Napisanie kodu dla TextBox3

Podobnie, kliknij dwukrotnie na TextBox3 . Inny Podprocedura prywatna o nazwie TextBox3_Change otworzy się, wprowadź tam następujący kod.

 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 Zadanie: x = 5 End Sub. 

⧪ Krok 5: Napisanie kodu dla TextBox4

Ponadto, kliknij dwukrotnie na TextBox3 . Inny Podprocedura prywatna o nazwie TextBox3_Change otworzy się, wprowadź tam następujący kod.

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

⧪ Krok 6: Napisanie kodu dla ListBox2

Następnie kliknij dwukrotnie na ListBox2 . When the Podprocedura prywatna o nazwie ListBox2_Click otwiera, wpisz tam ten kod.

 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: Napisanie kodu dla CommanButton1

Ponadto, kliknij dwukrotnie na CommandButton1 . po Podprocedura prywatna o nazwie CommandButton1_Change otwiera, wstaw tam następujący kod.

 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 "Wybierz poprawnie wszystkie opcje.", vbExclamation End Sub 

⧪ Krok 7: Napisanie kodu uruchamiającego formularz użytkownika

Teraz jest ostatni krok. Wstaw nowy Moduł od VBA pasek narzędzi i wstawić następujący kod.

 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 Załaduj UserForm1 UserForm1.Show End Sub. 

⧪ Krok 8: Uruchomienie UserForm

Twoja UserForm Aby go uruchomić, należy wybrać zestaw danych z arkusza (łącznie z Nagłówki ) i uruchomić Makro o nazwie Run_UserForm .

Na stronie UserForm załaduje się ze wszystkimi opcjami. Wybrany adres zakresu będzie widoczny na TextBox1 ( B3:D4 tutaj). Jeśli chcesz, możesz to zmienić. Zmieni się wybrany zakres w arkuszu.

Wybierz kolumny, które chcesz połączyć, z listy Kolumny do konkatenacji ListBox. Tutaj wybrałem Nazwa książki oraz Cena .

Wprowadź Separator . Here I've entered a przecinek ( , ).

Wybierz nazwę arkusza, w którym chcesz umieścić połączony zakres z listy Połączone w listbox. Tutaj wpisałem Plansza3 .

(W momencie, gdy wybierzesz arkusz, zostanie on uaktywniony, nawet jeśli nie jest aktywny).

Następnie włóż Lokalizacja wyjścia Jest to referencja do pierwszej komórki połączonego zakresu. Tutaj umieściłem B3 .

(W momencie wejścia do Lokalizacja wyjścia , zostanie wybrany zakres wyjściowy).

I na koniec wpisz nazwę Nagłówek wyjściowy (nagłówek zakresu wyjściowego). Tutaj umieściłem Zakres konkatenowany .

(Moment, w którym położysz Nagłówek wyjściowy , ustawiony zostanie nagłówek kolumny wyjściowej).

Kliknij OK Uzyskasz pożądaną wydajność w pożądanym miejscu.

Czytaj więcej: Jak połączyć String i Integer używając VBA

Wniosek

Oto kilka przykładów, w których można wykorzystać Excela VBA aby łączyć ciągi znaków i zmienne. Mam nadzieję, że te przykłady wyjaśniły Ci wszystko. Jeśli masz jakieś pytania, możesz je nam zadać i nie zapomnij odwiedzić naszej strony. ExcelWIKI po więcej postów i aktualizacji.

Hugh West jest bardzo doświadczonym trenerem i analitykiem Excela z ponad 10-letnim doświadczeniem w branży. Posiada tytuł licencjata w dziedzinie rachunkowości i finansów oraz tytuł magistra administracji biznesowej. Hugh ma pasję do nauczania i opracował unikalne podejście do nauczania, które jest łatwe do naśladowania i zrozumienia. Jego specjalistyczna wiedza na temat programu Excel pomogła tysiącom studentów i profesjonalistów na całym świecie doskonalić swoje umiejętności i osiągać doskonałe wyniki w karierze. Za pośrednictwem swojego bloga Hugh dzieli się swoją wiedzą ze światem, oferując bezpłatne samouczki programu Excel i szkolenia online, aby pomóc osobom indywidualnym i firmom w pełni wykorzystać swój potencjał.