Ostatni wyraz w zdaniu

by Marcin

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

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

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

Marcin

armal84

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

Ł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

@armal84

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

Marcin

Leave a Comment