26. marts 2017 - 18:25Der 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.
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)
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.
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-.
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"))
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
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.
Både acore og xl-Enthusiast er brugbare løsninger - kan godt se det er lidt kompliceret at løse.
Synes godt om
Ny brugerNybegynder
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.