Print side | Luk vindue

MID funktion med flere udfald

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Formler
Forum beskrivelse: Hjælp til formler i regneark og/eller brugen af disse.
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=3228
Udskrevet den: 05.Maj.2024 kl. 03:09


Emne: MID funktion med flere udfald
Besked fra: Kapitain
Emne: MID funktion med flere udfald
Posteringsdato: 07.Nov.2017 kl. 16:21
Hej,
 
Jeg har desværre identificeret et problem i en formel jeg har lavet noget tid tilbage.
 
Jeg har lavet en formel som trækker fakturanummer ud af en tekststreng, hvilket har fungeret fint indtil vi ramte tal fra oktober måned.
 
Problemet består i at alle fakturanumre altid vil starte med -10, men en given fakturalinje fra oktober måned vil hedde følgende:
 
130431-10-10xxxxxxxx-frodsfsds
(det første er et ubrugeligt autogeneret nummer, det næste er faktura måned, det næste er selve fakturanummer, og det sidste er navnet på fakturaen).
 
Dette vil naturligt skabe et problem for alle fakturaer fra oktober måned da formlen ikke kan finde ud af hvilken af -10 tallene den skal vælge.
 
Det tredje tal i fakturanummeret er altid enten 5 eller 6, altså -105 eller -106. Dette fik mig til at tænke en OR funktion ind i dette, men kan ikke få det til at virke :-(
 
Min formel ser således ud:
-IFERROR(MID($D142,FIND("-10",$D142,1),10),0)
 
IFERROR formlen er udelukkende med da alle linjer fra databasen ikke er fakturanumre og dette giver et mere rent billede.
 
Jeg havde prøvet følgende, som desværre ikke virker:
 -IFERROR(MID($D142,FIND(OR("-105","-106"),$D142,1),10),0)
 
Jeg håber der er en excel haj derude som kan hjælpe mig.
 
På forhånd tak!!
 
 
 



Svar:
Besked fra: Mads32
Posteringsdato: 07.Nov.2017 kl. 16:50
Hej

Prøv med denne formel

"=MIDT($D$142;11;10)

du kan så selv udbygge formlen

Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Kapitain
Posteringsdato: 08.Nov.2017 kl. 07:56
Hej
Er ikke helt sikker på hvad din formel gør sammenlignet med min :-)


Besked fra: Mads32
Posteringsdato: 08.Nov.2017 kl. 08:57
Jeg ved ikke hvorfor din formel ikke virker.

Den jeg har lavet virker.




Besked fra: Kapitain
Posteringsdato: 08.Nov.2017 kl. 15:55

Hej Mads,

 
Tak for svar. Det er vist mig der ikke har forklaret det fulde problem. Grunden til jeg har brugt find formlen er fordi det differentierer hvorvidt der er fx 6, 4 eller 10 tal til at starte med. Den kan fx se ud på følgende måder:
 
130442-10-1050821005-fgfgdfg
13044-10-1050821005-fgfgdfg
1304-10-1060821005-fgfgdfg
130442432-10-1060821005-fgfgdfg
 
men er kun interesseret i verifikationsnummeret (10xxxxxxxx).


Besked fra: Mads32
Posteringsdato: 08.Nov.2017 kl. 19:08


Slutter dine faktura numre alt sådan???

-10xxxxxxxx-frodsfsds

Kan du så ikke anvende

"=HØJRE(F4;20)

F4 er den celle hvor du har din tekststreng

Eller er der også forskelle på de sidste antal tegn i tekststrengen
Du kan måske bruge "Højre" kombineret med "FIND".







Besked fra: Kurt Kubik
Posteringsdato: 08.Nov.2017 kl. 23:28
Hey Kapitain...

Hvorfor benytter du ikke at finde positionen af "-" nr 2

=MID($D142;FIND("-";$D142;FIND("-";$D142)+2)+1;10)

Går ud fra, at strukturen altid er: xxxxxx-xx-xxxxxxxxxx-xxxxxxxxxx
Altså... at længden af dit nr altid er 10. Er den ikke det, må du bestemme længden vha positionen af "-" nr 3



Besked fra: Kapitain
Posteringsdato: 09.Nov.2017 kl. 10:15
Hej
Tak for alle svarene.
 
Desværre er slutningen heller ikke altid konstant da dette vil være navnet på virksomheden som fakturaen drejer sig om.
 
Der er ikke som sådan noget konstant i formatet udover at verifikationsnummeret altid er på 10 tal og altid starter med enten 105 eller 106


Besked fra: Kurt Kubik
Posteringsdato: 09.Nov.2017 kl. 10:20
Citat: Kapitain Kapitain skrev:

 
Der er ikke som sådan noget konstant i formatet udover at verifikationsnummeret altid er på 10 tal og altid starter med enten 105 eller 106

Så burde min løsning virke fint! :-)


Besked fra: Kapitain
Posteringsdato: 09.Nov.2017 kl. 15:41
Det eneste problem nu er at nu opstår der et udfald ved alle linjerne, da min IFERROR ikke slår igennem og dette skaber et rodet billede :-(
Det er ikke alle linjer som har et verifikationsnummer og alle dem som ikke har dette der tager den bare et anden bid af linjen og indsætter i stedet. Giver det mening?


Besked fra: Kurt Kubik
Posteringsdato: 09.Nov.2017 kl. 16:12
Hvad betyder et udfald?

Jeg tror, at du skal kommunikere mere tydeligt om, hvilke muligheder der er for udseendet af din streng.

Jeg forudsatte, at den ALTID er bygget op som du skrev:
130442-10-1050821005-fgfgdfg
13044-10-1050821005-fgfgdfg
1304-10-1060821005-fgfgdfg
130442432-10-1060821005-fgfgdfg

altså ALTID med fire grupper adskildt af "-".

Er dette ikke tilfældet? Ellers må du skitsere ALLE muligheder! :-)


Besked fra: Kapitain
Posteringsdato: 09.Nov.2017 kl. 17:01
HA HA... ja men det er egentlig fordi det troede jeg også altid den var men så så jeg en undtagelse bagefter hvorden sagtens kan være opdelt som følgende i tilfælde af det er en faktura som ikke er koblet op på en direkte måned:
 
xxxxx-1052345434-fgfgfdfdd


Besked fra: Kurt Kubik
Posteringsdato: 09.Nov.2017 kl. 17:11
Jaja - det kan da stadig fælles vha en formel. 
Det skal så først laves noget med count "-" men den bliver lang!!!

Jeg vil foreslå at lave det i vba - det er lettere - og jeg kan godt lave det for dig, hvis du vil. 


Besked fra: Kurt Kubik
Posteringsdato: 09.Nov.2017 kl. 17:30
Nåh, nu får du den!:

Gem dit Regneark som *.xlsm - ikke *.xlsx

Højreklik på en fane nederst og vælg "View Code" (Kode-editoren åbner!)
Gå til fanen "Insert" og vælg "Module" og indsæt følgende kode:

Option Explicit

Function HentVerNr(sInput As String) As String
    Dim sParts() As String
    On Error Resume Next
    sParts = Split(sInput, "-")
    If Err.Number <> 0 Then
        HentVerNr = "ERROR"
        Err.Clear
        Exit Function
    End If
    Err.Clear
    On Error GoTo 0
    Select Case UBound(sParts)
        Case 3
            HentVerNr = sParts(2)
        Case 2
            HentVerNr = sParts(1)
        Case Else
            HentVerNr = "ERROR"
    End Select
End Function

Gem og luk editor-vinduet

I regnearket anvender du funktionen ligesom en hvilken som helst anden formel-funktion:
F.eks.: "=HentVerNr(C4)"

Nu skulle du få det ønskede resultat - og teksten "ERROR" (ret selv i koden), hvis din streng ikke kan "oversættes"


Besked fra: Kapitain
Posteringsdato: 14.Nov.2017 kl. 09:19
Tak Kurt!!!! :-) Det løste problemet!!


Besked fra: Kurt Kubik
Posteringsdato: 14.Nov.2017 kl. 09:22
Citat: Kapitain Kapitain skrev:

Tak Kurt!!!! :-) Det løste problemet!!

Velbekomme! Smile



Print side | Luk vindue