Avatar billede Peter Praktikant
15. januar 2004 - 10:44 Der er 13 kommentarer og
1 løsning

Advanced filter tabel, adder aut. værdi i hver søjle.

Hej
Jeg har en tabel som bliver genereret via en makro der kører et advanced filter på en stor tabel. Nu ligger det sådan at jeg gerne vil have at hele søjle 2 i tabellen får lagt 50,00 til og hele søjle 2 får lagt 0,50 til. Jeg kan godt gøre dette manuelt ved at skrive værdien i en celle og så paste den som special. Men hvis jeg vil gøre det automatisk, hvordan gør jeg så? Jeg kan godt vælge hele søjlen ved at bruge noget
Range("B7", Range("B5").End(xlDown).Offset(1, 0)).Select
Men hvad skal jeg smide ind af kode for at ligge 50,00 til denne selection?
Avatar billede Peter Praktikant
15. januar 2004 - 10:45 #1
En ekstra ting, kan jeg smide en vlookup ind for hver linje, altså tabellen går fra f.eks A7 til I45. Så vil jeg gerne have smidt en bestemt kode ind i alle felterne J7 til J45, hvordan kan dette gøres med VBA?
Avatar billede jkrons Professor
15. januar 2004 - 11:23 #2
Vælg dit område og brug så:


    For Each cell In Selection
        cell.Value = cell.Value + 50
    Next cell
Avatar billede softcareconsult Nybegynder
15. januar 2004 - 11:34 #3
Range("B7", Range("B5").End(xlDown)).Select
  r = WorksheetFunction.CountA(Selection)
For Each c In Selection.Cells
  c.Value = c.Value + 50#
  ActiveSheet.Cells(c.Row, 10).Formula = "=VLOOKUP(K" & c.Row & ",$A$7:$I$" & 6 + r & ",2)"
Next c
Så får du koderne med, ret selv formlen til.
Avatar billede Peter Praktikant
15. januar 2004 - 12:36 #4
Når jeg prøver at køre det giver det fejl i linjen c.value = c.value + 50# og i linjen cell.value = cell.value + 50.
Hvad kan problemet være?
Den finder den rigtige celle, altså den ender i den første celle den skulle plusse 50 til, men der stopper den uden at gøre det.
Avatar billede Peter Praktikant
15. januar 2004 - 12:39 #5
hov, vent. Jeg har fundet ud af hvad der er galt, det er min range. Vender tilbage om lidt.
Avatar billede Peter Praktikant
15. januar 2004 - 12:47 #6
Den fejl er fundet. Problemet er, at jeg har dette område, det kan være tomt. Hvordan kan jeg vælge området og ikke mere, altså hvis området strækker sig fra A7 til I8 skal det vælges, hvis linje 7 er tom, så skal intet vælges. Hidtil har jeg gjort det med:
Range("A7", Range("I5").End(xlDown).Offset(1, 0)).Select
Men med den vælger jeg altid en tom linje med, det giver lidt problemer.
Ligeledes vil jeg gerne høre hvordan jeg kan køre den formel så den springer celler over der ikke indeholder værdier, nogle af cellerne indeholder "-" og der kludrer den jo selvfølgeligt i det.
Håber i kan hjælpe med de 2 tillægsspørgsmål, hvis i kan smider jeg nogle ekstra point ind.
Avatar billede Peter Praktikant
15. januar 2004 - 12:49 #7
Den tomme linje der vælges med er selvfølgeligt den nederste, så der vælges alle linjerne i området plus den tomme linje lige nedenunder. Det skal lige nævnes, at der de linjer der har indhold, de har indhold i alle cellerne fra A til I.
Avatar billede Peter Praktikant
15. januar 2004 - 13:36 #8
Jeg har prøvet dette:
Range("B7", Range("B6").End(xlDown).Offset(1, 0)).Select
For Each c In Selection.Cells
  If c = "NA" Then c = "" Else c.Value = c.Value + 50
  ActiveSheet.Cells(c.Row, 10).Formula = "=A2"
Next c
Men den ændrer ikke cellerne der indeholder "NA" til "" og fejler så ved indsættelse af celle =A2 bagefter. Kan i fortælle mig hvad jeg gør galt?
Jeg mangler også stadigvæk at finde ud af at vælge det rigtige interval og ikke vælge en ekstra linje. Grunden til at jeg bruger et offset, det er fordi at når tabellen ikke indeholder data, så vælges linje 6 istedet og slettes, dette er ikke meningen. Hvis jeg istedet vælger fra I7 og ned, så går den jo helt i bund når tabellen er tom. Måske hvis man laver en test først som checker om I7 er tom eller ej, hvis den er, så skal den ikke vælge noget.
Avatar billede Peter Praktikant
15. januar 2004 - 13:41 #9
ok, jeg manglede noget .Value, så nu er det kun den rigtige range der skal vælges.
Avatar billede Peter Praktikant
15. januar 2004 - 14:03 #10
Ok, jeg har nu lavet det sådan at der bliver lagt værdier til hver enkelt søjle i tabellen. Men jeg synes det går meget langsomt, også selvom jeg slår screenupdating fra.
Kan det passe at det tager flere sekunder for at ordne en tabel med 100 indgange?
Koden jeg har brugt:
Range("B7", Range("B6").End(xlDown).Offset(1, 0)).Select
        For Each c In Selection.Cells
            If c.Value = "NA" Then c.Value = "" Else c.Value = c.Value + 50
            If ActiveSheet.Cells(c.Row, 3).Value = "NA" Then ActiveSheet.Cells(c.Row, 3).Value = "" Else ActiveSheet.Cells(c.Row, 3).Value = ActiveSheet.Cells(c.Row, 3).Value + 0.5
            If ActiveSheet.Cells(c.Row, 4).Value = "NA" Then ActiveSheet.Cells(c.Row, 4).Value = "" Else ActiveSheet.Cells(c.Row, 4).Value = ActiveSheet.Cells(c.Row, 4).Value + 0.5
            If ActiveSheet.Cells(c.Row, 5).Value = "NA" Then ActiveSheet.Cells(c.Row, 5).Value = "" Else ActiveSheet.Cells(c.Row, 5).Value = ActiveSheet.Cells(c.Row, 5).Value + 0.5
            If ActiveSheet.Cells(c.Row, 6).Value = "NA" Then ActiveSheet.Cells(c.Row, 6).Value = "" Else ActiveSheet.Cells(c.Row, 6).Value = ActiveSheet.Cells(c.Row, 6).Value + 0.5
            If ActiveSheet.Cells(c.Row, 7).Value = "NA" Then ActiveSheet.Cells(c.Row, 7).Value = "" Else ActiveSheet.Cells(c.Row, 7).Value = ActiveSheet.Cells(c.Row, 7).Value + 0.25
            If ActiveSheet.Cells(c.Row, 8).Value = "NA" Then ActiveSheet.Cells(c.Row, 8).Value = "" Else ActiveSheet.Cells(c.Row, 8).Value = ActiveSheet.Cells(c.Row, 8).Value + 0.25
            ActiveSheet.Cells(c.Row, 10).Formula = "=A2"
        Next c

Er der en smartere kode at bruge som går hurtigere og er mere elegant?
Avatar billede softcareconsult Nybegynder
15. januar 2004 - 17:45 #11
Kan du ikke sende arket til John_Fjord@hotmail.com, så skal jeg kigge lidt på den.
Lidt afhængig hvad det er du vil, lyder det som der kunne være en nemmere måde.
Avatar billede Peter Praktikant
15. januar 2004 - 18:32 #12
tak for tilbuddet, men nu har jeg faktisk fået det til at køre som jeg gerne vil have det. Jeg har fået hjælp af bak til at smide alt data over i en matrix og arbejde på det der, det går noget hurtigere.
Avatar billede Peter Praktikant
15. januar 2004 - 18:33 #13
men hvis du ligger et svar kan du og jkrons dele pointene.
Avatar billede Peter Praktikant
17. januar 2004 - 18:53 #14
Tak for hjælpen til jer begge to. Det viste sig at løsningen var for langsom til mit brug, men det ledte mig hen mod den løsning der blev valgt i stedet. Så problemet er løst og det er jo det der tæller.
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