Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketMID funktion med flere udfald

 Besvar Besvar
Forfatter
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg 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!!
 
 
 
Til top



Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Accepteret svar Accepteret svar
Direkte link til dette indlæg 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"
Til top
Mads32 Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
Direkte link til dette indlæg Sendt: 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.
Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg Sendt: 08.Nov.2017 kl. 07:56
Hej
Er ikke helt sikker på hvad din formel gør sammenlignet med min :-)
Til top
Mads32 Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
Direkte link til dette indlæg Sendt: 08.Nov.2017 kl. 08:57
Jeg ved ikke hvorfor din formel ikke virker.

Den jeg har lavet virker.


Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg 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).
Til top
Mads32 Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 26.Feb.2016
Land: Danmark
Status: Offline
Point: 1317
Direkte link til dette indlæg Sendt: 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".





Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg 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

Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg 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
Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg Sendt: 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! :-)
Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg 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?
Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg 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! :-)
Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg 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
Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg 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. 
Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Accepteret svar Accepteret svar
Direkte link til dette indlæg 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"
Til top
Kapitain Se dropdown
Forum Begynder
Forum Begynder
Avatar

Medlem: 28.Sep.2017
Status: Offline
Point: 12
Direkte link til dette indlæg Sendt: 14.Nov.2017 kl. 09:19
Tak Kurt!!!! :-) Det løste problemet!!
Til top
Kurt Kubik Se dropdown
Sølv bruger
Sølv bruger


Medlem: 18.Feb.2012
Status: Offline
Point: 209
Direkte link til dette indlæg Sendt: 14.Nov.2017 kl. 09:22
Citat: Kapitain Kapitain skrev:

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

Velbekomme! Smile
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk