Kilka dni temu pisałem o usuwaniu z komórki Excela znaków podziału linii, które wstawiamy sobie od czasu do czasu przy pomocy kombinacji klawiszy ALT+ENTER.
W rezultacie, mamy oczywiście komórkę, w której znajduje się ciąg tekstowy podzielony na kilka wierszy. Dzisiaj napiszę o tym w jaki sposób można wybrać i wyświetlić tylko jeden, wskazany wiersz z tej komórki.
Docelowo powinno to wyglądac mniej więcej tak:

Do problemu można podejść na kilka sposobów, ja uparłem się, aby zmieścić wszystko w jednej formule oraz korzystać tylko z jednej funkcji tekstowej FRAGMENT.TEKSTU, która wybiera i wyświetla właściwy fragment (pozostałe funkcje pełnią tu rolę pomocniczą). Moja formuła (znajdująca się w komórce C12) wyglada następująco:
=JEŻELI(LUB(C12-1>DŁ(B8)-DŁ(PODSTAW(B8;ZNAK(10);""));C12<1);"Podany numer wiersza musi być wiekszy od zera i mniejszy od całkowitej ilości wierszy";FRAGMENT.TEKSTU(B8;JEŻELI(C12=1;1;SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12-1))+1);JEŻELI(C12=DŁ(B8)-DŁ(PODSTAW(B8;ZNAK(10);""))+1;DŁ(B8);SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12)))-JEŻELI(C12=1;0;SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12-1)))))
Nasz materiał źródłowy, czyli podzielony na wiersze (przy pomocy znaku podziału linii wstawianego przez Alt+Enter) ciąg tekstowy znajduje się w komórce B8.
Dla tych, którzy wolą VBA i funkcie użytkownika przygotowałem przykład tego jak taka funkcja mogłaby wyglądać. Podobnie jak z każdym problem, i w tym przypadku rozwiązać go możemy na wiele sposobów. Ja poszedłem po linii najmniejszego oporu i wykorzystałem fukcję SPLIT(). Ma ona swoje minusy, ale w tak prostym zastosowaniu sprawdzi się doskonale.
Moja funcja użytkownika nazywa się WyciagnijDane i wymaga podania dwóch parametrów. Komórki z ciągiem tekstowym oraz numeru wiersza, który chcemy „wyciągnąć”. Wynik działania widać na animacji poniżej.

Kod VBA wspomnianej funkcji użytkownika wygląda tak:
Function WyciagnijDane(SkadWyciagamy As Range, _
WyciaganyWiersz As Integer)
Dim Przechowalnia As Long
Dim TablicaPrzechowalnia As Variant
' Sprawdzimy sobie najpierw czy w komórce wiersze sa w ogole "podzielone" znakiem
' przejscia do nowej linii. Jezeli nie to wyswietlimy cały tekst ze wskazanej komórki
Przechowalnia = InStr(SkadWyciagamy.Value, Chr(10))
If Przechowalnia = 0 Then
WyciagnijDane = SkadWyciagamy.Value ' zwracamy tekst ze wskazanej komórki
Else
' sprawdzimy przy okazji czy podany numer wyciaganego wiersza nie jest za duzy
' Skoro mamy bowiem np. tylko trzy wiersze to nieco trudno byłoby wyświetlić
' wiersz o numerze np. czartym. No i oczywiście nie da się wyświetlić wiersza
' o numerze zero
TablicaPrzechowalnia = Split(SkadWyciagamy.Value, Chr(10))
If WyciaganyWiersz - 1 > UBound(TablicaPrzechowalnia) Or _
WyciaganyWiersz = 0 Then
WyciagnijDane = "Zdecydowanie zalecam przemysleć wartość parametru z numerem wiersza"
Else
' skoro jednak jest co robic ...zabieramy sie do roboty
WyciagnijDane = TablicaPrzechowalnia(WyciaganyWiersz - 1)
End If
End If
End Function
Na koniec jeszcze, jak zwykle, plik z przykładem:

Tyle na dzisiaj.
Marcin

{ 1 comment… read it below or add one }
Pracuję od niedawna w biurze i właśnie ‘w Excel-u’. Sporo już potrafię, ale szukam czasem rozwiązań już wpisanych formuł lub formatowań warunkowych i nie wszystkie umiem rozgryźć. Czy będę mógł tu popytać o to, jak rozszyfrować lub jak wprowadzać formaty warunkowe? Mój Excel podpowiada, ale ja go nie rozumiem
Lech