I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Find det sidste og næstsidste mellemrum i sætningen med InStrRev, og derefter selve ordet med Mid. For eksempel sådan her:
Dim OrgStr As String, NewStr As String, i As Long, j As Long OrgStr = "Dette bla bla bla bla bla bla bla bla er en meget lang sætning." i = InStrRev(OrgStr, " ", , vbTextCompare) j = InStrRev(OrgStr, " ", i - 1, vbTextCompare) NewStr = Mid(OrgStr, j + 1, i - j - 1)
NewStr indeholder nu: "lang"
Du skal nok lave noget errorhandling for det tilfælde at der ikke ER to mellemrum i sætningen.
Du kan også lave det med formler (FIND og MIDT), men da der (såvidt jeg kan se) ikke er en FIND-funktion der søger bagfra (som InStrRev), bliver det temmelig besværligt.
Hvis du har brug for hjælp til at anvende makroen, så sig til.
1. Indlæser sætningen i en string-variabel 2. Trimmer alle mellemrum efter sidste ord vær (RTrim) 3. Finder position på sidste mellemrum (InStrRev) 4. Med udgangspunkt i denne position, finder du det nærmeste mellemrum før positionen fundet i punkt 3 (InStrRev) 5. Du tager ordet mellem positionerne fundet i punkt 3 og 4, og gemmer det i en ny stringvariabel (Mid)
Variablen i punkt 5. indeholder næstsidste ord
Andet alternativt:
1)indlæs sætningen i en stringvariabel 2) Fjern alle mellemrum før første og efter sidste ord (RTrim og LTrim) 3) Opret et array med en post for hvert for ved at bruge funktionen Split med et mellemrum " " som delimiter Næstsidste position i arrayet indeholder dit ord - og næstsidste position kan du finde med UBound, og trække en fra
Det nemmeste er at lave det som en funktion du kan bruge direkte i regnearket:
Sådan gør du:
1. Indsæt et modul i Visual Basic 2. I modulet indsætter du følgende:
Public Function FindOrd(Byval pStr as String) As String
Dim OrgStr As String, NewStr As String, i As Long, j As Long OrgStr = RTrim(pStr) i = InStrRev(OrgStr, " ", , vbTextCompare) j = InStrRev(OrgStr, " ", i - 1, vbTextCompare) NewStr = Mid(OrgStr, j + 1, i - j - 1) FindOrd = NewStr
End Function
-Bemærk at jeg har indsat Martins meget fornuftige tjek for efterfølgende space.
3. I regnearket bruger du funktionen som alle andre:
Hvis sætningen ligger i A1, så indsætter du: =FindOrd(A1) i B1
Nu nævnte jeg jo Errorhandling, men glemte det selv: Funktionen bør se sådan ud:
Public Function FindOrd(Byval pStr as String) As String
On Error GoTo ErrorHandler Dim OrgStr As String, NewStr As String, i As Long, j As Long OrgStr = RTrim(pStr) i = InStrRev(OrgStr, " ", , vbTextCompare) j = InStrRev(OrgStr, " ", i - 1, vbTextCompare) NewStr = Mid(OrgStr, j + 1, i - j - 1) FindOrd = NewStr ErrorHandler: FindOrd="" Resume Next
Public Function FindOrd(Byval pStr as String) As String
On Error GoTo ErrorHandler Dim OrgStr As String, NewStr As String, i As Long, j As Long OrgStr = RTrim(pStr) i = InStrRev(OrgStr, " ", , vbTextCompare) j = InStrRev(OrgStr, " ", i - 1, vbTextCompare) NewStr = Mid(OrgStr, j + 1, i - j - 1) FindOrd = NewStr Exit Function ErrorHandler: FindOrd="" Resume Next
Hvad så sigurd_h? Hvis du ikke kunne bruge mine (eller martins) tips, så tag points selv.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.