07. december 2011 - 21:56Der er
15 kommentarer og 1 løsning
opslag i område..
Hej til jer!
Jeg sidder og nusser lidt med et regneark, og har brug for følgende, hvis nogen kan være behjælpelig.
Jeg har 10 rækker og 10 koloner. Jeg har navngivet kolonerne A til J og rækkerne ligeså. I de hundrede felter som er omkranset af mine "overskrifter" har jeg skrevet tallene mellem 1 og 100, på vilkårlige pladser.
Kan der laves (og jeg tror på det, men har ikke haft held hverken i hjælpekassen eller på nettet til at finde svaret) en formel som returnerer rækkeoverskriften (A-J) og/eller koloneoverskriften (A-J) udfra et givent tal (mellem 1 0g 100) i en celle.
På forhånd tak for hjælpen Morten
PS. Da jeg af gode grunde ikke kan vurdere om det er let, medium eller svært spørgsmål, tager jeg det sikre valg for ikke at skuffe nogen, og udlodder 100 point...
Function mlookup(v As Variant, r As Range, Optional mode As Integer = 0) As Variant mlookup = CVErr(xlErrNA) For Each c In r If (v = c.Value) Then Select Case mode Case 1: ' Column mlookup = c.Column Case 2: ' Row mlookup = c.Row Case Else: ' Address mlookup = c.Address End Select Exit For End If Next End Function
Lad os antage, at du har dine tal i B2:K11 og det tal, du leder efter i A1.
Når du har lagt funktionen ind, kan du hente række-overskrift med
=OFFSET($A$1;mlookup($A$1;$B$2:$K$11;2)-1;0)
og kolonne-overskrift med
=OFFSET($A$1;0;mlookup($A$1;$B$2:$K$11;1)-1)
Eller du kan finde adressen med
=mlookup($A$1;$B$2:$K$11;0)
Jeg vil ikke afvise, at det kan laves uden vba, men umiddelbart kan jeg ikke se det (i hvert fald ikke hvis det skal være generelt).
Tænker lidt at det er en slags opslagsfunktion hvor jeg taster tallet den skal finde koordinaterne (overskrifterne) til ind i en celle og nabocellen (eller de to næste celler) fortæller mig kolone og række-overskrift.
Hvis nu jeg har tallene fra 1-100 stående i en lang række, med en ledig celle ved siden af sig, hvori der står formlen: "find i 10 X 10 kassen overskrifterne til det tal der står ved siden af her"
Disse formel felter fylder så sig selv ud når jeg løbende skriver tallene ind i 10 X 10 kassen.
Måske bedre forklaret
Synes godt om
Slettet bruger
08. december 2011 - 08:14#6
Hvis du vil sende en fil der klart viser opgaven skal jeg gerne forsøge. hans.knudsensnabelamail.tele.dk
Lav dine tal til tekst for at kunne bruge VLookup (Lopslag). så laver du rækkenavnene om til tal fortløbende, start med 2 (og skriver dem "bagerst" i din 10x10 kasse (for at kunne bruge Lookup.
Så kan du lave et opslag i hver række om tallet er der, og når du så har den række tallet er i kan du via opslag få f.eks. rækkenummere og derefter bruge det nummer til at finde kolonneoverskrift.
Det lyder dog som en omstændig proces der kræver et nyt opslag for hver af af de 100 tal du vil lede efter.
Jeg vil gerne lave det første stykke for dig hvis du vil sende mig en mail.
Jeg melder også pas, hvad angår en ren Excel formel :o( Om den findes, aner jeg simpelthen ikke ??
Men jeg vil gerne byde ind med følgende VBA kode:
I mit regneark, på Sheet1 har jeg i området/rækken B1:K1 skrevet overskrifterne A-J ... og i området/kolonnen A2:A11 skrevet de samme overskrifter.
I området/kolonne A14:A113 har jeg tallene fra 1-100
Og så til koden ...
I worksheets Change hændelse har jeg følgende: Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Integer Dim k As Integer Dim v As Integer Dim s As String
'hvis der sker ændringer i området "B2:K11" If Not Intersect(Target, Range("B2:K11")) Is Nothing Then
'hvis værdin i den aktuelle celle ikke er tom If Target <> "" Then
'sæt r = den aktuelle række - 1 r = Target.Row - 1
'sæt k = den aktuelle kolonne - 1 k = Target.Column - 1
'sæt s = række og kolonne overskrifter s = Target.Offset(0, -k).Value & " - " & Target.Offset(-r, 0).Value
'sæt v= værdien i den aktuelle celle v = Target.Value
'kald proceduren Find med argumenterne v (værdien) og s (overskrifter) Find v, s
End If
End If End Sub
og som en selvstændig procedure, der kaldes fra Change hændelsen, har jeg ... Sub Find(v, s) Dim c As Range
'I området "A12:A113" på det første worksheet With Worksheets(1).Range("A12:A113")
'sæt objekt variabel c = det fundne "område" Set c = .Find(v, LookIn:=xlValues)
'hvis der blev fundet en matchende værdi If Not c Is Nothing Then
'sæt celle til højre = med værdien af s (overskrifterne) c.Offset(0, 1).Value = s
'Hvis der ikke blev fundet nogen matchende værdier Else
MsgBox "Der er ingen match"
Exit Sub End If
End With
End Sub
Hvis der tastes i området med de 10 x 10 felter aktiveres Change hændelsen og den søger ned gennem tallene 1-100 og skriver område overskrifterne til højre for det matchende tal.
Koden tjekker IKKE for, om det er et tal der er tastet i 10 x 10 området ... men det kan helt sikkert lade sig lave :o)
Hvis du gerne vil klare det uden vba (selv om jeg synes, at min løsning i #2 er enkel og effektiv), så kræver det, at du er indstillet på nogle hjælpeceller.
Antag, at du har dine tal i Sheet1!B2:K11 og det tal, du leder efter i Sheet1!A1. Overskrifter står så i række 1 og kolonne A.
Lav så et hjælpesheet - her Sheet2 - hvor du i A1 skriver
Først vil jeg lige undskylde for min manglende tilstedværelse, juletravlhed og for meget arbejde kom desværre i vejen.
Dernæst vil jeg takke jer alle for at tilbyde hjælp med løsningsmuligheder.
Hvad der skete med mit problem var at jeg blev overhalet af den nemmeste løsning af alle, en APP...
Jeg søgte at lave en løsning på et lille problem jeg havde, en løsning jeg kunne impotere til min smartphones office-program. Derfor ingen VBA...
Da jeg havde prøvet mig frem med Excel og jeres løsningsforslag, blev jeg gjort opmærksom på en APP som kunne løse mit problem. Så alt i mens jeg prøvede at opfinde den dybe tallerken, med jeres hjælp, var der en programør et eller andet sted der allerede havde klaret ærterne.
Igen tak for jeres tid, og næste gang jeg har et problem, lover jeg at støvsuge android-markedet før jeg vender mig mod "Eksperterne"
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.