
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