Często spotykam się z problemem jak wartości, które są w komórkach Excela, połączyć w tekst oddzielony np. średnikiem.
Rozwiązanie 1 – Formuła
Oczywiście można do tego użyć formuły w Excelu. Pierwsza metoda to użycie funkcji ZŁĄCZ.TEKSTY() (eng. CONCATENATE).
=ZŁĄCZ.TESKTY(A1;";";A2;";";A3....)
Inna wersja formuły to użycie operatora konkatenacji & (brzmi to dziwnie ale to po prostu zwykłe łączenie tekstów)
=A1&";"&A2&";"&A3
Minusem takiego rozwiązania jest jego pracochłonność i ilość łączonych elementów. Pierwsza wersja formuły połączy tylko 255 elementów druga około 127. Dla wielu osób nie będzie to zadowalająca ilość. Sczegołnie kiedy chcemy połączyć 2000 adresów mailowych aby wysłać zbiorowego maila.
Rozwiązanie 2 – Użycie programu Word
Rozwiązaniem dla większej ilości elementów jest użycie wspomagająco programu Word.
Kopiujemy komórki z Excela i wklejamy je jako zwykły tekst do Worda. Aby to zrobić w Wordzie klikamy prawym przyciskiem myszy i wybieramy ikonę
Następnie używamy narzędzia Zamień (Ctrl+H) gdzie zamienimy znak nowego akapitu (przejścia do nowej linii) ^p
na znak np. średnika ;
Po wciśnięciu Zamień wszystko dostaniemy elementy połączone średnikiem.
Rozwiązanie 3 – Makro w VBA
Oczywiście jednym z najlepszych rozwiązań będzie uzycie makra. Poniższy kod należy wkleić do pliku PERSONAL.XLSB (instrukcja pod tym wpisem – Dodawanie makr do pliku PERSONAL.XLSB)
Po dodaniu kodu w odpowiednie miejsce możemy bezpiecznie zaznaczyć komórki do scalenia i uruchomić makro wciskając kombinację klawiszy Alt+F8 i wybierając z listy nasze makro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | Sub konkatenacja() Dim c As Range Dim con, typ, znak As String Dim i As Long znak = ";" typ = TypeName(Selection) If typ = "Range" Then 'jeżeli zaznaczony obiekt nie jest zbiorem komórek procedury łączenia i = 1 For Each c In Selection If Not IsEmpty(c.Value) Then 'sprawdzanie czy komórka nie jest pusta If i = 1 Then con = c.Text Else con = con & znak & c.Text End If i = i + 1 End If Next c Selection.Cells.ClearContents 'usuwanie zawartości komórek Selection.Cells(1, 1).Value = con 'zapisywanie do pierwszej zaznaczonej komórki złączonego tekstu Else MsgBox "Ups! zaznaczyłeś " & typ & ", a miały być komórki :)" End If End Sub |
Zamiast średnika jako łącznika możecie użyć dowolnego znaku. Wystarczy że zmienisz wartość zmiennej znak
w 6 linijce kodu.