
Zadanie wygląda następująco.
Mam całą serię ciągów tekstowych zbudowanych w następujący sposób: „To jest opis, a mnie interesuje tylko kod XP342OO”, z których muszę pobrać tylko kod produktu, w tym przypadku „XP342OO”. W praktyce zadanie sprowadza się do wybrania ostatniego wyrazu w zdaniu, a gdyby ktoś chciał opisać to nieco bardziej szczegółowo, pobraniu wszystkich znaków znajdujących się na prawo od ostatniej spacji w zdaniu.
Przy założeniu, że ciąg tekstowy masz w komórce D3, odpowiednia formuła mogłaby wyglądać następująco:
=PRAWY(D3;DŁ(D3)-SZUKAJ.TEKST(„^”;PODSTAW(D3;” „;”^”;DŁ(D3)-DŁ(PODSTAW(D3;” „;”")))))
Jak zwykle kilka słów wyjaśnienia.
PODSTAW(D3;” „;”^”;DŁ(D3)-DŁ(PODSTAW(D3;” „;”")))
Ten fragment zastępuje ostatnią spację w zdaniu symbolem „^” (może to być oczywiście dowolny „dziwny” symbol. Chodzi o to, aby nie było szansy jego wystąpienia w innym miejscu w Twoim tekście.).
Znajdując pozycję, na której pojawi się ten symbol – SZUKAJ.TEKST(„^”;PODSTAW(D3;” „;”^”;DŁ(D3)-DŁ(PODSTAW(D3;” „;”")))) – określisz pozycję ostatniej spacji w zdaniu. Reszta to pobranie wszystkich znaków na prawo od tej spacji. Wynik działania na rysunku poniżej.

Bazując na tej samej zasadzie, rezultat osiągniesz także korzystając z funkcji FRAGMENT.TEKSTU.
=FRAGMENT.TEKSTU(D3;SZUKAJ.TEKST(„^”;PODSTAW(D3;” „;”^”;DŁ(D3)-DŁ(PODSTAW(D3;” „;”"))))+1;255)
Jeżeli masz inne pomysły – czekam jak zwykle na komentarz.


{ 5 comments… read them below or add one }
Bardzo przydatna formula ale czy dalo by sie ja przerobic na zwrocenie przedostatniego wyrazu z zdania nr. „To jest opis przedmiotu i liczba szt” chodzi mi o to aby moc wyciagnac z opisu liczbe szt towaru?
Pewnie, że by się dało przerobić. Być może kiedyś, w wolnej chwili,powrócę do tego tematu.
Marcin
Może przyda siekomuś w VBA:
Sub OstatniWyrazWZdaniu()
Dim i, j As Integer
dl = Len(Cells(10, „A”))
a = 1
On Error GoTo errhandler:
Do Until a > dl
a = Application.WorksheetFunction.Find(” „, Cells(10, „A”), a + 1)
Loop
Exit Sub
errhandler:
Cells(10, „B”) = Right(Cells(10, „A”), dl – a)
Exit Sub
End Sub
Pozdrawiam.
Łukasz:
Kod VBA zwracający przedostatni wyraz w zdaniu (obsługuje zdania, w których pojawiają się wielokrotne spacje):
Sub UsunPodwojneSpacje()
Range(„A10″) = Range(„A9″)
i = 0
Do Until i = Len(Range(„A10″))
i = i + 1
Range(„A10″) = Application.WorksheetFunction.Substitute(Range(„A10″), ” „, ” „)
Loop
End Sub
Sub PrzedostatniWyraz()
Dim i, j As Integer
Dim tb(1 To 10) As Variant
Call UsunPodwojneSpacje
dl = Len(Cells(10, „A”))
a = 1
i = 1
Set spacja = Range(„A10″).Find(” „)
If spacja Is Nothing Then
Range(„B10″) = Range(„A10″)
Exit Sub
End If
On Error GoTo errhandler:
Do Until a > dl
a = Application.WorksheetFunction.Find(” „, Cells(10, „A”), a + 1)
tb(i) = a
i = i + 1
Loop
Exit Sub
errhandler:
‘For j = 1 To i
‘Cells(j+9,”B”) = mid(Range(„A10″),tb(i),
Range(„B9″) = Mid(Range(„A10″), tb(i – 2) + 1, tb(i – 1) – tb(i – 2) – 1)
Range(„A10″).Clear
Exit Sub
End Sub
@armal84
Wielkie dzieki za kawałki kodu, które wstawiasz tu i ówdzie. Pewien jestem, że się wielu osobom przydadzą.
Marcin