Spis treści
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.xlsmKonkatenacja ł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.