Forfatter |
Emne Søg Emne funktioner
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Emne: MID funktion med flere udfald Sendt: 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!!
|
|
|
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Accepteret svar
Sendt: 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"
|
|
Mads32
Guld bruger
Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
|
Sendt: 07.Nov.2017 kl. 16:50 |
Hej
Prøv med denne formel
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.
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 08.Nov.2017 kl. 07:56 |
Hej Er ikke helt sikker på hvad din formel gør sammenlignet med min :-)
|
|
Mads32
Guld bruger
Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
|
Sendt: 08.Nov.2017 kl. 08:57 |
Jeg ved ikke hvorfor din formel ikke virker.
Den jeg har lavet virker.
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 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).
|
|
Mads32
Guld bruger
Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
|
Sendt: 08.Nov.2017 kl. 19:08 |
Slutter dine faktura numre alt sådan???
-10xxxxxxxx-frodsfsds
Kan du så ikke anvende
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".
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 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
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 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
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 09.Nov.2017 kl. 10:20 |
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! :-)
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 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?
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 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! :-)
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 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
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 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.
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Accepteret svar
Sendt: 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"
|
|
Kapitain
Forum Begynder
Medlem: 28.Sep.2017
Status: Offline
Point: 12
|
Sendt: 14.Nov.2017 kl. 09:19 |
Tak Kurt!!!! :-) Det løste problemet!!
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 14.Nov.2017 kl. 09:22 |
Kapitain skrev:
Tak Kurt!!!! :-) Det løste problemet!! |
Velbekomme!
|
|