Avatar billede nyhavn18 Mester
07. december 2011 - 21:56 Der 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...
Avatar billede Ialocin Novice
07. december 2011 - 22:20 #1
Hej Morten

Hvordan kan det tænkes, at du "trækker" det givne tal ?

Taster du det i en celle uden for området eller ?? og hvor vil du ha´ overskriften returneret ?


Med venlig hilsen, Nicolai
Avatar billede acore Ekspert
07. december 2011 - 22:50 #2
Tror det nemmeste er en lille vba funktion:

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).
Avatar billede nyhavn18 Mester
07. december 2011 - 23:02 #3
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.
Avatar billede nyhavn18 Mester
07. december 2011 - 23:04 #4
Ovenstående kommentar til Nicolai.

Og til acore, jeg giver den lige lidt tid inden jeg springer på VBA, håber det er OK. Vil helst have en "normal" formel-løsning...
Avatar billede nyhavn18 Mester
07. december 2011 - 23:08 #5
Hej igen Nicolai

Det var vist lidt dårligt forklaret.

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
Avatar billede 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
Avatar billede kim1a Ekspert
08. december 2011 - 09:24 #7
Lidt Storm P, men jeg tænker følgende:

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.
Avatar billede kim1a Ekspert
08. december 2011 - 09:39 #8
Ah jeg opdager så lige at data skal være sorteret for at Excel kan lave opslaget.

Løsningen kan virke hvis der er orden i tallene, både vandret og lodret - ligeledes med tekst desværre.
Avatar billede Ialocin Novice
08. december 2011 - 12:19 #9
Hej Morten

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)

Prøv det og lad høre ...

Med venlig hilsen, Nicolai
Avatar billede Slettet bruger
08. december 2011 - 12:50 #10
Hvis du for eksempel har data som følger i A1:D4

    Land1    Land2    Land3
Afd1    2587    3627    9283
Afd2    3809    7987    7031
Afd3    7987    1950    5969

og hvis du har navngivet A1:D4 som v og du har den værdi du søger på i G1, så er det et spørgsmål om du vil have returneret

Afd3;Land1 eller
Afd2;Land2

Hvis det første:

=INDEX(A1:A4;MOD(MIN(IF(v=G1;ROW(v)+1000*COLUMN(v)));1000))&";"&INDEX(A1:D1;INT(MIN(IF(v=G1;ROW(v)+1000*COLUMN(v)))/1000))

Hvis det sidste:

=INDEX(A1:A4;INT(MIN(IF(v=G1;ROW(v)*1000+COLUMN(v)))/1000))&";"&INDEX(A1:K1;MOD(MIN(IF(v=G1;ROW(v)*1000+COLUMN(v)));1000))
Avatar billede Slettet bruger
08. december 2011 - 12:52 #11
Jeg glemte at nævne, at G1 indeholder tallet 7987.
Avatar billede Slettet bruger
08. december 2011 - 13:00 #12
Og en ting mere glemte jeg, at det er matriksformler.
Avatar billede acore Ekspert
08. december 2011 - 13:44 #13
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

=OFFSET(Sheet1!$A$1;MOD(ROW(A1)-1;10)+1;INT(ROW(A1)/10)+1)

som du så kopierer fra A1 til A100.

Nu kan du hente din række-overskrift med

=OFFSET(Sheet1!$A$1;MOD(MATCH(Sheet1!$A$1;Sheet2!$A$1:$A$100;0)-1;10)+1;0)

og din kolonne-overskrift med

=OFFSET(Sheet1!$A$1;0;INT(MATCH(Sheet1!$A$1;Sheet2!$A$1:$A$100;0)/10)+1)
Avatar billede nyhavn18 Mester
15. december 2011 - 10:49 #14
Kære Alle

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"

Morten
Avatar billede Ialocin Novice
15. december 2011 - 11:56 #15
Hej Morten

Ja man kan ikke se skoven for bare træer.
Godt du fik dit problem løst :o)

Med venlig hilsen, Nicolai
Avatar billede nyhavn18 Mester
08. marts 2012 - 13:24 #16
prøver at lukke...!
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

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