Avatar billede barentsen Novice
15. juni 2007 - 22:06 Der er 13 kommentarer og
1 løsning

Kan Makro laves smartere?

Jeg har 3 forskellige lister:
Liste 1: Navne
Liste 2: Byer
Liste 3: Måneder

Jeg har brug for at man i hver liste vælger hvem man er, og hvilken by og måned man ønsker og så skal der så fremkomme et resultat fra et data ark.

Dvs. der er et dataark til hver person, som er opdelt i byer og måneder.

Jeg er nybegynder med Makroer, men har lavet nedenstående makro der sådan set virker, men den er bare ret lang, og ikke færdig endnu.
Er der nogen mulighed for at gøre det smartere, eller er jeg nød til at copy paste i makroen, og så tilrette?

Håber spørgsmålet er forstået!

(der er 4 personer, 3-5 byer pr. person og 12 mdr. =4x4x12=192 forskellige resultater)

'Steen og By1
If Range("b12") = 2 And Range("d12") = 1 Then
    If Range("E12") = 1 Then
        Range("E14") = Range("Steen!D17 ")
    End If
   
    If Range("E12") = 2 Then
        Range("E14") = Range("Steen!e17 ")
    End If
   
    If Range("E12") = 3 Then
        Range("E14") = Range("Steen!f17 ")
    End If
       
    If Range("E12") = 4 Then
        Range("E14") = Range("Steen!g17 ")
    End If
   
    If Range("E12") = 5 Then
        Range("E14") = Range("Steen!h17 ")
        End If
       
    If Range("E12") = 6 Then
        Range("E14") = Range("Steen!i17 ")
        End If
       
    If Range("E12") = 7 Then
        Range("E14") = Range("Steen!j17 ")
    End If
   
    If Range("E12") = 8 Then
        Range("E14") = Range("Steen!k17 ")
    End If
   
    If Range("E12") = 9 Then
        Range("E14") = Range("Steen!l17 ")
        End If
       
    If Range("E12") = 10 Then
        Range("E14") = Range("Steen!m17 ")
    End If
       
    If Range("E12") = 11 Then
        Range("E14") = Range("Steen!n17 ")
    End If
       
    If Range("E12") = 12 Then
        Range("E14") = Range("Steen!o17 ")
    End If
       
End If
 



' Steen og by2
If Range("b12") = 2 And Range("d12") = 2 Then
    If Range("E12") = 1 Then
        Range("E14") = Range("Steen!D18 ")
    End If
   
    If Range("E12") = 2 Then
        Range("E14") = Range("Steen!e18 ")
    End If
   
    If Range("E12") = 3 Then
        Range("E14") = Range("Steen!f18 ")
    End If
       
    If Range("E12") = 4 Then
        Range("E14") = Range("Steen!g18 ")
    End If
   
    If Range("E12") = 5 Then
        Range("E14") = Range("Steen!h18 ")
        End If
       
    If Range("E12") = 6 Then
        Range("E14") = Range("Steen!i18 ")
        End If
       
    If Range("E12") = 7 Then
        Range("E14") = Range("Steen!j18 ")
    End If
   
    If Range("E12") = 8 Then
        Range("E14") = Range("Steen!k18 ")
    End If
   
    If Range("E12") = 9 Then
        Range("E14") = Range("Steen!l18 ")
        End If
       
    If Range("E12") = 10 Then
        Range("E14") = Range("Steen!m18 ")
    End If
       
    If Range("E12") = 11 Then
        Range("E14") = Range("Steen!n18 ")
    End If
       
    If Range("E12") = 12 Then
        Range("E14") = Range("Steen!o18 ")
    End If
       
End If


' Steen og by3
If Range("b12") = 2 And Range("d12") = 3 Then
    If Range("E12") = 1 Then
        Range("E14") = Range("Steen!D19 ")
    End If
   
    If Range("E12") = 2 Then
        Range("E14") = Range("Steen!e19 ")
    End If
   
    If Range("E12") = 3 Then
        Range("E14") = Range("Steen!f19 ")
    End If
       
    If Range("E12") = 4 Then
        Range("E14") = Range("Steen!g19 ")
    End If
   
    If Range("E12") = 5 Then
        Range("E14") = Range("Steen!h19 ")
        End If
       
    If Range("E12") = 6 Then
        Range("E14") = Range("Steen!i19 ")
        End If
       
    If Range("E12") = 7 Then
        Range("E14") = Range("Steen!j19 ")
    End If
   
    If Range("E12") = 8 Then
        Range("E14") = Range("Steen!k19 ")
    End If
   
    If Range("E12") = 9 Then
        Range("E14") = Range("Steen!l19 ")
        End If
       
    If Range("E12") = 10 Then
        Range("E14") = Range("Steen!m19 ")
    End If
       
    If Range("E12") = 11 Then
        Range("E14") = Range("Steen!n19 ")
    End If
       
    If Range("E12") = 12 Then
        Range("E14") = Range("Steen!o19 ")
    End If
       
End If

       
       
' Steen og by4
If Range("b12") = 2 And Range("d12") = 4 Then
    If Range("E12") = 1 Then
        Range("E14") = Range("Steen!D20 ")
    End If
   
    If Range("E12") = 2 Then
        Range("E14") = Range("Steen!e20 ")
    End If
   
    If Range("E12") = 3 Then
        Range("E14") = Range("Steen!f20 ")
    End If
       
    If Range("E12") = 4 Then
        Range("E14") = Range("Steen!g20 ")
    End If
   
    If Range("E12") = 5 Then
        Range("E14") = Range("Steen!h20 ")
        End If
       
    If Range("E12") = 6 Then
        Range("E14") = Range("Steen!i20 ")
        End If
       
    If Range("E12") = 7 Then
        Range("E14") = Range("Steen!j20 ")
    End If
   
    If Range("E12") = 8 Then
        Range("E14") = Range("Steen!k20 ")
    End If
   
    If Range("E12") = 9 Then
        Range("E14") = Range("Steen!l20 ")
        End If
       
    If Range("E12") = 10 Then
        Range("E14") = Range("Steen!m20 ")
    End If
       
    If Range("E12") = 11 Then
        Range("E14") = Range("Steen!n20 ")
    End If
       
    If Range("E12") = 12 Then
        Range("E14") = Range("Steen!o20 ")
    End If
     
     
End If

       
' Steen og by5
If Range("b12") = 2 And Range("d12") = 5 Then
    If Range("E12") = 1 Then
        Range("E14") = Range("Steen!D21 ")
    End If
   
    If Range("E12") = 2 Then
        Range("E14") = Range("Steen!e21 ")
    End If
   
    If Range("E12") = 3 Then
        Range("E14") = Range("Steen!f21 ")
    End If
       
    If Range("E12") = 4 Then
        Range("E14") = Range("Steen!g21 ")
    End If
   
    If Range("E12") = 5 Then
        Range("E14") = Range("Steen!h21 ")
        End If
       
    If Range("E12") = 6 Then
        Range("E14") = Range("Steen!i21 ")
        End If
       
    If Range("E12") = 7 Then
        Range("E14") = Range("Steen!j21 ")
    End If
   
    If Range("E12") = 8 Then
        Range("E14") = Range("Steen!k21 ")
    End If
   
    If Range("E12") = 9 Then
        Range("E14") = Range("Steen!l21 ")
        End If
       
    If Range("E12") = 10 Then
        Range("E14") = Range("Steen!m21 ")
    End If
       
    If Range("E12") = 11 Then
        Range("E14") = Range("Steen!n21 ")
    End If
       
    If Range("E12") = 12 Then
        Range("E14") = Range("Steen!o21 ")
    End If
     
     
End If
Avatar billede cool_m_f Nybegynder
15. juni 2007 - 23:49 #1
Hvad med noget i stil med dette her

**************************************************************
Public Sub brugervalg()

Select Case Worksheets("ark1").Cells(12, 2)
Case 1
navn = "Steen"
Case 2
navn = "John"
Case 3
navn = "Timea"
Case 4
navn = "Simone"
End Select

Select Case Worksheets("ark1").Cells(12, 4)
Case 1
a = 17
Case 2
a = 18
Case 3
a = 19
Case 4
a = 20
End Select

b = Worksheets("ark1").Cells(12, 5)

Worksheets("ark1").Cells(14, 5) = Worksheets(navn).Cells(a, b + 3)

End Sub
***********************************************************************

(  cells(Række, Kolonne) )

spørg endelig hvis der er noget du ikke forstår
Avatar billede barentsen Novice
16. juni 2007 - 02:34 #2
Tak for kommentar - cool m f

Som sagt er jeg nybegynder med det her makro-værk - men prøver at forstå hvad du har lavet...

- Starter du med at angive, at hvis felt B12(Cels(12,2)) = 1 så: Navn = "Steen"
og hvis 2 så navn = "John" osv.?

- Derefter det samme bare i felt D12 så a=17...

- Derefter b =... : b=felt E12

- Derefter felt E14 = ark(navn) hvor navnet er Steen hvis felt B12=1 osv. og rækken angives ved nr. i felt D12 og kollonnen angives ved nr. i E12 + 3 ?

Hvis det er rigtigt forstået, så burde det fungere. Men tallet i felt E14 ændres ikke uanset hvad der står i felterne B12, D12 og E12.

Eksempel: Jeg har nu værdierne 2 i alle 3 felter (B,D og E12)
Dette burde vel give mig Johns data fra ark("John")felt E18, ik'? Det gør den bare ikke.

Er der en fejl, eller forstår jeg ikke helt hvad der sker?

Min makro ser sådan ud nu:

'Eksperten

Public Sub brugervalg()

Select Case Worksheets("ark1").Cells(12, 2)
Case 1
navn = "Henrik"
Case 2
navn = "Steen"
Case 3
navn = "Thomas"
Case 4
navn = "Tom"
End Select

Select Case Worksheets("ark1").Cells(12, 4)
Case 1
a = 17
Case 2
a = 18
Case 3
a = 19
Case 4
a = 20
Case 5
a = 21
End Select

b = Worksheets("ark1").Cells(12, 5)

Worksheets("ark1").Cells(14, 5) = Worksheets(navn).Cells(a, b + 3)



End Sub
Avatar billede cool_m_f Nybegynder
16. juni 2007 - 03:13 #3
det er helt rigtigt ;-)
hedder arket hvor den henter input fra 'ark1' eller hedder det noget andet ?
hvis det hedder noget andet skal det lige ændres i makroen
( worksheets("ark1") --> worksheets("whatever") )
Avatar billede cool_m_f Nybegynder
16. juni 2007 - 03:25 #4
prøv at åbne din makro, vælg sidste linie ( Worksheets("ark1").Cells(14, 5) = Worksheets(navn).Cells(a, b + 3) )
tryk på F9 (breakpoint, dvs at makroen stopper op og venter til du beder den om at fortsætte), sæt markøren på navn og tryk på shift F9 (du laver en watch liste, dvs at du kan se hvilken værdi navn har) , gør det samme med a og b.
kør nu din makro og aflæs din watchlist, det burde hjælpe os med af finde fejlen
Avatar billede excelent Ekspert
16. juni 2007 - 09:15 #5
Sub Test()
Range("E14") = Sheets(Range("B12").Value + 1).Cells(Range("E12").Value + 16, Range("D12").Value + 3)
End Sub
Avatar billede excelent Ekspert
16. juni 2007 - 09:29 #6
Forudsætniger er:
Arknavn som svarer til 1 i celle B12 er nr. 2 fra venstre
Arknavn som svarer til 2 i celle B12 er nr. 3 fra venstre
osv..

Sheets(1) = Arket længst til venstre
Sheets(2) = Arket nr. 2 fra venstre osv...
Står der 2 i celle B12 returnerer Sheets(Range("B12").Value + 1)
værdier fra Arket nr. 3 fra venstre
Avatar billede barentsen Novice
16. juni 2007 - 12:10 #7
Tak for jeres gode forsøg på at hjælpe. Og hvis/når de virker, er det jo noget smartere, end det jeg selv startede med...

Men jeg kan ikke få det til at virke, hverken forslag fra cool m f eller excelent.

Cool m f: Jeg vælger den sidste linie og trykker F9 - linien bliver farvet brun og der er en "prik" ude til venstre. Jeg klikker så markøren blinker lige før navn i () og trykker shift F9 - Dette giver en Quick watch hvor der står: Context= VBAProject.Modul2.brugervalg, Expression= navn, Value= <Out of context>
Dette gør sig også gældende for a og b.

Nogle bud på hvad jeg kan gøre forkert - er der evt. andre oplysninger du skal bruge for at komme videre?

excelent: Dit løsning ser sådan set ret smart ud, men den kan jeg heller ikke få til at virke.
Eneste ændring jeg har lavet i din linie er, at jeg har ændret +1 til +4, da 1 i felt B12 svarer til ark 5, 2 = ark 6 osv. - Er det korrekt?

Gad vide om årsagen til at begge jeres løsninger ikke virker hos mig, er den samme...?
Avatar billede excelent Ekspert
16. juni 2007 - 13:19 #8
ja din ændring ser rigtig ud

mht. B12 - går ud fra den kan have værdierne 1 til 4 -(navne)?
og D12 værdierne 1 til 12 (måneder - kolonne D-O) ?
og E12 værdierne 1 til 5 (byer - række 17 til 21) ?

du kan også prøve at sende dit ark
Avatar billede barentsen Novice
16. juni 2007 - 15:40 #9
Det er byerne der står i D12 og månederne i E12 - men ellers burde det være rigtigt.
Hvis du skriver din mailadr. kan det være jeg sender arket i aften. Skal ud af døren nu... (Skal evt. også lige have slettet en del i arket, da noget er fortroligt)
Avatar billede excelent Ekspert
16. juni 2007 - 15:49 #10
pm@madsen.tdcadsl.dk
Avatar billede barentsen Novice
16. juni 2007 - 23:52 #11
Tja, heldigvis skrev jeg at jeg var nybegynder med det her macro halløj - for nu har jeg fundet min fejl, og ja, begge jeres løsninger virker, så smid et svar så får I begge to nogle point.

I er vel nysgerrige nok til at vide hvad fejlen var!
Jeg havde da glemt at tilføje den nye macro til den Liste som jeg vælger i, dvs. jeg blev ved med at køre med min gamle macro. Ups

Nu har jeg så bare et nyt spørgsmål, vedr. listen med macroen, men det opretter jeg lige et nyt spørgsmål til.
Avatar billede cool_m_f Nybegynder
17. juni 2007 - 14:52 #12
ingen points til mig, tak

ps da du havde lavet den quick watch, manglede du bare at køre makroen, så var a, b og navn blevet udfyldt med værdier i stedet for <out of context>
Avatar billede excelent Ekspert
18. juni 2007 - 18:57 #13
ok
Avatar billede barentsen Novice
19. juni 2007 - 07:55 #14
Tak for hjælpen
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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