Ostatni wyraz w zdaniu

by Marcin on Styczeń 8, 2008

Ostatni wyraz w zdaniu

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.

Ostatni wyraz w zdaniu

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.

Download

{ 5 comments… read them below or add one }

Lukasz Październik 13, 2009 o 1:23 pm

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?

Marcin Listopad 3, 2009 o 12:04 am

Pewnie, że by się dało przerobić. Być może kiedyś, w wolnej chwili,powrócę do tego tematu.

Marcin

armal84 Luty 5, 2010 o 12:50 pm

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.

armal84 Luty 5, 2010 o 2:37 pm

Ł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

Marcin Luty 5, 2010 o 5:31 pm

@armal84

Wielkie dzieki za kawałki kodu, które wstawiasz tu i ówdzie. Pewien jestem, że się wielu osobom przydadzą.

Marcin

Leave a Comment