Avatar billede C_jorgen Juniormester
26. marts 2017 - 18:25 Der er 9 kommentarer og
2 løsninger

Returner del af tekst (sql-udtræk) linjer med variabel tekstlængde ud fra liste med data

Jeg har i en fane en kolonne med data f.eks lignende -1-, -200-, -3729-, mfl. (tal med bindestreg foran/bagved og flere hunderede linjer i listen). I en anden fane en kolonne har jeg sql-udtræk med felter indeholdende tekster med variabel længde. Teksterne indeholder måske nogle af dataene fra listen. Ud for hver række med tekster i en kolonne ved siden af ønskes returneret data fra listen såfremt de indgår i teksten f.eks -3727-. Såfremt teksten indeholder flere af dataene eller ingen data må der meldes fejl ud for den linje. (evt. skrive "flere data forekommer" eller skrive "ingen data forekommer")
Alternativt at lave eksempel hvor kravet dog er at data enten kun vil forekomme en gang i teksten eller slet ikke forekommer i teksten.
Avatar billede xl-Enthusiast Ekspert
27. marts 2017 - 08:40 #1
Du ville gøre det noget nemmere for dem der gerne vil forsøge at hjælpe dig, hvis du gav konkrete eksempler på, hvad du har (for eksempel i A1:A10) og hviket resultater du ønsker (for eksempel i B1:B10)
Avatar billede C_jorgen Juniormester
29. marts 2017 - 17:48 #2
A1 : -200-          B1: tekstindholdvariabelt-3729-xxxxx      C1: -3729-
A2: -3729-        B2: tekstlængdevariabeltxxx-1-xxx          C2: -1-
A3: -1-              B3: tekstxxx-200-xxxx                              C3: -200-
A4: -300-          B4: tekst-800-xxxx                                  C4: Skrive "ingen data"
A5: -600            B5: tekst-200-xxxx-300-xx                      C5: Skrive "flere data"

Så hvis indhold i A1:A5 indgår i B1 et sted i teksten skrives det fundne i C1.
Avatar billede acore Ekspert
29. marts 2017 - 18:00 #3
Hvis du vil kigge efter et af "tallene" i A-kolonnen i Bx, så tror jeg det er svært i Excel. Men hvis det er ok at finde den streng i Bx, der står mellem to "-" og så lede efter den i kolonne A, så er det betydeligt lettere.

Er det sidste en ok løsning?
Avatar billede C_jorgen Juniormester
29. marts 2017 - 18:24 #4
Ja det tror jeg vil kunne arbejdes videre med. Gerne med tillæg af hvordan man tilknytter betingelse om at mellem de to - skal der være 4 tal ellers ikke søge. Så kun søge hvis -3729- ej -200- pga nogle gange står i tekst xxxx-200-3729-xxx og der skal kun kunne findes og returneres -3729-.
Avatar billede acore Ekspert
29. marts 2017 - 20:19 #5
Tror ikke dit ønske om 4 tal kan opfyldes uden videre.

I det her eksempel leder jeg efter -xxxx- hvor x kan være et hvilket som helst tegn.

Jeg benytter et par hjælpekolonner (kan skjules eller placeres på et andet ark). Kan sikkert godt laves som en lang formel, men den bliver svært uoverskuelig.

Kolonne D: Finder den tekst, er skal ledes efter (eller #VÆRDI#, hvis den ikke findes):
=MIDT(B1;SØG("-????-";B1);6)

Kolonne E: Finder nummeret på den første række i A-kolonnen, der matcher:
=SAMMENLIGN(D1;$A$1:$A$10;0)

Kolonne F: Finder nummeret på den anden række i A-kolonnen, der matcher:
=E1+SAMMENLIGN(D1;FORSKYDNING($A$1:$A$10;E1;0;RÆKKER($A$1:$A$10)-E1+1;1);0)

Kolonne C: Uddrager resultatet fra hjælpekolonnerne:
=HVIS(OG(ER.TAL(E1);ER.FEJL(F1));D1;HVIS(ER.FEJL(E1);"ingen data";"flere data"))
Avatar billede bak Seniormester
29. marts 2017 - 20:56 #6
her er en user defined function, der kan gøre arbejdet for dig..
i C1 kan du indsætte
=FindValue(B1 ; $A$1:$A$100)
bare kopier nedad.
Hvis du kun vil se efter 4-cifrede tal så kan du jo nøjes med at have 4cifrede tal i kolonne A

Public Function FindValue(Searchstring As String, Searchwords As Range) As String
    Dim iFoundNumber As Integer, vFoundValue As String
    Dim c As Range

    For Each c In Searchwords
        If Searchstring Like "*" & c.Value & "*" Then
            iFoundNumber = iFoundNumber + 1
            If iFoundNumber > 1 Then Exit For
            vFoundValue = c.Value
        End If
    Next

    If iFoundNumber = 0 Then
        FindValue = "None found"
    Else
        If iFoundNumber > 1 Then
            FindValue = "More than one found"
        Else
            FindValue = vFoundValue
        End If
    End If

End Function
Avatar billede xl-Enthusiast Ekspert
29. marts 2017 - 22:21 #7
Hvis du er interesseret i en absolut rædselsfuld lang matrixformel (samt en hjælpekolonne) så se:

https://www.dropbox.com/s/jd0x5uxyhcpp4a1/sql.udtr%C3%A6k.xlsx?dl=0
Avatar billede xl-Enthusiast Ekspert
30. marts 2017 - 07:54 #8
Der var en mindre fejl i den tidligere uploade fil, så her er en ny:

https://www.dropbox.com/s/htqbooea17dz15s/sql.udtr%C3%A6k_2.xlsx?dl=0

Bemærk, at hvis du har rigtig mange rækker er der risiko for, at matrixformlen vil lægge Excel død. Et forhold der kun bliver forstærket af, hvis du har formlerne i et andet ark end der hvor data er.
Avatar billede C_jorgen Juniormester
10. april 2017 - 14:10 #9
Tak for input til alle - det har givet lidt mere indsigt i problematikken og nogle input jeg vil kunne bruge i den videre forståelse af Excel.
Avatar billede xl-Enthusiast Ekspert
10. april 2017 - 17:19 #10
Så ingen af forslagene løste opgaven - eller hvad?
Avatar billede C_jorgen Juniormester
11. april 2017 - 09:21 #11
Både acore og xl-Enthusiast er brugbare løsninger - kan godt se det er lidt kompliceret at løse.
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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