Avatar billede Nikolaj_IP Juniormester
12. oktober 2016 - 13:30 Der er 19 kommentarer og
2 løsninger

Find talværdi i tekststreng

Hejsa,

Jeg står og skal finde en masse talværdier i en masse tekst.

Et eksempel kunne være:
"Model 87 koster 10.000 kr. og er meget fin" - jeg vil have 10.000
"Model 88 koster 250 kr. og er knap så fin" - jeg vil have 250
"Model 1 ligger på 30 kr. og er rød" - jeg vil have 30

Altså vil jeg gerne kunne finde den værdi, der står før "kr." - hvordan gøres det? :)

Med venlig hilsen,
Nikolaj.
Avatar billede supertekst Ekspert
12. oktober 2016 - 14:03 #1
En begyndelse:

Dim tekst As String, xx As Variant, x As Integer, beløb As Long
Sub findKr()
    tekst = Range("A1")
    xx = Split(tekst, " ")
   
    For x = 0 To UBound(xx)
        If xx(x) = "kr." Then
            beløb = Trim(xx(x - 1))
            Exit For
        End If
    Next x
End Sub
Avatar billede Nikolaj_IP Juniormester
12. oktober 2016 - 14:26 #2
Hej #1,

Tak for dit svar. Jeg må dog indrømme, at jeg ikke lige kan få det til at virke - er forholdsvis ny til denne slags.
Jeg kunne godt tænke mig at få resultatet udskrevet i kolonne J.
Derudover har jeg lidt svært ved at se, hvordan funktionen skal "få fat i" alle værdierne i kolonne A - snupper den ikke kun værdien fra A1, sådan som den står nu?

Mvh Nikolaj.
Avatar billede supertekst Ekspert
12. oktober 2016 - 14:36 #3
Selv tak
Jo p.t. er det kun hvad der står i A1 der behandles.
Skulle jo lige se om det kunne anvendes.

Vender tilbage..
Avatar billede ebea Ekspert
12. oktober 2016 - 14:36 #4
Det bliver nok med VBA, som Supertekst har angivet. Følgende formel, fjerner kun teksten, efter din "kr." angivelse, men efterlader så tekst foran beløbet. Og der er udfordringen, da du har 2 talværdier, men ikke andet adskilning end "kr."
Formlen kan du indsætte i J, og kopiere nedad.
=MIDT(B1;1;FIND("kr.";B1)-1)
Avatar billede kim1a Ekspert
12. oktober 2016 - 14:41 #5
Noget af en storm P løsning jeg var igang med:

Formlen find kan give dig hvilket karakternummer kr. starter ved.
Midt kan beskære i en tekst fra den karakter du vælger.
Så er tricket at finde ud af hvor langt bagud den skal skære, hvis du så ved der altid er mellemrum inden beløb kan det være en hvis sætning der skaber det....

Vi starter med at finde hvor der står kr:
=find(" kr";[celle hvor din tekst er]) - bemærk at jeg medtager første mellemrum inden kr for at kunne skære inden da.
Så skal vi lure hvor der er mellemrum sidst inden dette - jeg brugte en tilfældig reference hvor jeg satte din ordlyd ind:
=HVIS(MIDT(H482;N482-1;1)=" ";N482-1;HVIS(MIDT(H482;N482-2;1)=" ";N482-2;HVIS(MIDT(H482;N482-3;1)=" ";N482-3;HVIS(MIDT(H482;N482-4;1)=" ";N482-4;HVIS(MIDT(H482;N482-5;1)=" ";N482-5;HVIS(MIDT(H482;N482-6;1)=" ";N482-6))))))
udfordringen er at formlen ikke kan klare flere hvis argumenter, så den kan ikke løse så snart der er mere end 6 karakterer i dit tal.

Jeg håber nogen har en bedre ide, eller måske kan skabe en makro med baggrund i denne løsning.
Avatar billede jens48 Ekspert
12. oktober 2016 - 14:42 #6
Prøv med denne formel:

=VALUE(MID(A1;MAX((MID(LEFT(A1;FIND("kr";A1)-2);ROW(1:70);1)=" ")*ROW(1:70));FIND("kr";A1)-MAX((MID(LEFT(A1;FIND("kr";A1)-2);ROW(1:70);1)=" ")*ROW(1:70))))

Dansk:

=VÆRDI(MIDT(A1;MAKS((MIDT(VENSTRE(A1;FIND("kr";A1)-2);RÆKKE(1:70);1)=" ")*RÆKKE(1:70));FIND("kr";A1)-MAKS((MIDT(VENSTRE(A1;FIND("kr";A1)-2);RÆKKE(1:70);1)=" ")*RÆKKE(1:70))))

Det er en matriksformel, så der skal afsluttes med Ctrl + Alt  + Enter
Avatar billede supertekst Ekspert
12. oktober 2016 - 14:44 #7
Dim antalRækker As Integer, ræk As Integer
Dim tekst As String, xx As Variant, x As Integer, beløb As Long
Public Sub findKr()
    antalRækker = Cells(Rows.Count, "A").End(xlUp).Row
   
    For ræk = 1 To antalRækker
        tekst = Range("A" & ræk)
        xx = Split(tekst, " ")
       
        For x = 0 To UBound(xx)
            If xx(x) = "kr." Then
                beløb = Trim(xx(x - 1))
                Range("J" & ræk) = beløb
                Exit For
            End If
        Next x
    Next ræk
End Sub
Avatar billede supertekst Ekspert
12. oktober 2016 - 14:50 #8
Udføres via: Alt+F8 - "findKr" markeres og afspil koden vælges
Avatar billede excelent Ekspert
12. oktober 2016 - 15:35 #9
=--HØJRE(VENSTRE(A1;FIND("kr";A1)-2);TÆL(1*MIDT(VENSTRE(A1;FIND("kr";A1)-2);RÆKKE(1:99);1))-1)

formlen afsluttes med CTRL+SHIFT+ENTER
Avatar billede Nikolaj_IP Juniormester
12. oktober 2016 - 16:01 #10
Tak for alle svarene!
Mange gode bud og ideer, men den bedste løsning endte med at være Jens48s (#6) - stor tak, fungerer præcis som den skal :).

Mvh Nikolaj.
Avatar billede Nikolaj_IP Juniormester
17. oktober 2016 - 10:21 #11
Hej igen.

Nå, så kom jeg for alvor i gang med at bruge de forskellige svar, og jeg må desværre konstatere, at hvad der umiddelbart virkede fint ikke helt holder, når det kommer til de voldsomme mængder tekst, jeg sidder med.

#6/Jens48: Formlen virker umiddelbart fint, men efter at have trukket den ned forbi 10-20 rækker, begynder den at give fejl #VÆRDI! "En værdi, der bruges i formlen, er en forkert datatype". Kan ikke finde nogen grund til at den begynder at give denne fejl og kan ikke finde et helt fast mønster for, hvornår den gør det.
#9/excelent's formel volder lignende problemer.

#7/supertekst: Igen virker det umiddelbart fint, men efter en hel del rækker giver den pludselig Error 13: Type mismatch. Kan desværre heller ikke finde en løsning på dette.

Håber, i har nogle ideer til, hvad jeg kan prøve - på forhånd tak.

Mvh Nikolaj.
Avatar billede supertekst Ekspert
17. oktober 2016 - 10:45 #12
Prøv at vis den række, hvor fejl opstår..
Avatar billede Nikolaj_IP Juniormester
17. oktober 2016 - 10:56 #13
#12 jeg kan for så vidt ikke se, hvilken række fejlen sker ved, da den inden da har sprunget en masse rækker over, hvor teksten ikke indeholder kr. (hvilket er fint), ligeledes markerer den ikke på, hvilken række fejlen sker. Kan til gengæld se, at den i debug mode siger, at fejlen ligger på følgende: beløb = Trim(xx(x - 1)), det er i hvert fald det, den markerer med gult.
Avatar billede supertekst Ekspert
17. oktober 2016 - 11:08 #14
Ok - vender tilbage
Avatar billede supertekst Ekspert
17. oktober 2016 - 11:24 #15
Rem Version 2
Dim antalRækker As Integer, ræk As Integer
Dim tekst As String, xx As Variant, x As Integer, beløb As Long
Public Sub findKr()
On Error GoTo fejl
    antalRækker = Cells(Rows.Count, "A").End(xlUp).Row
   
    For ræk = 4 To antalRækker
        tekst = Range("A" & ræk)
        xx = Split(tekst, " ")
       
        For x = 0 To UBound(xx)
            If xx(x) = "kr." Then
                beløb = Trim(xx(x - 1))
                Range("J" & ræk) = beløb
                Exit For
            End If
        Next x
    Next ræk
    Exit Sub
   
fejl:
    MsgBox "Række " & ræk & ": " & tekst
    Resume Next
End Sub
Avatar billede supertekst Ekspert
17. oktober 2016 - 11:25 #16
Rettelse: For ræk = 4 To antalRækker --> For ræk = 1 to antalRækker
Avatar billede Nikolaj_IP Juniormester
17. oktober 2016 - 11:37 #17
#15 Super! Nu virker det. Dog er der det lille problem, at den runder alle tallene af til heltal - jeg skal også have kommatal, f.eks. 5,5. Kan du hjælpe med det, så er dit svar løsningen.

Mvh Nikolaj.
Avatar billede supertekst Ekspert
17. oktober 2016 - 11:42 #18
I linje 3 retter du fra Integer til: beløb As Double
Avatar billede Nikolaj_IP Juniormester
17. oktober 2016 - 11:49 #19
#18 perfekt, tænkte nok det havde noget med den datatype at gøre, men var usikker på, hvad den skulle ændres til.
Jeg siger mange tak for hjælpen! :)

Mvh Nikolaj.
Avatar billede supertekst Ekspert
17. oktober 2016 - 12:23 #20
Selv tak..
Avatar billede jens48 Ekspert
24. oktober 2016 - 17:51 #21
Der skulle en lille rettelse i min formel til for at det virker hele vejen ned:

=VALUE(MID(A1;MAX((MID(LEFT(A1;FIND("kr";A1)-2);ROW($1:$70);1)=" ")*ROW($1:$70));FIND("kr";A1)-MAX((MID(LEFT(A1;FIND("kr";A1)-2);ROW($1:$70);1)=" ")*ROW($1:$70))))

=VÆRDI(MIDT(A1;MAKS((MIDT(VENSTRE(A1;FIND("kr";A1)-2);RÆKKE($1:$70);1)=" ")*RÆKKE($1:$70));FIND("kr";A1)-MAKS((MIDT(VENSTRE(A1;FIND("kr";A1)-2);RÆKKE($1:$70);1)=" ")*RÆKKE($1:$70))))
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester