Avatar billede lkh007 Nybegynder
15. juli 2014 - 13:29 Der er 26 kommentarer og
1 løsning

Automatisk Fill Down af formler i kolonner

Jeg har nogle bestemte kolonner (fra Y til og med AE) som indeholder bestemte formler, som jeg gerne vil have kopieret ned indtil der ikke er mere data i X antal rækker. Antallet af rækker med data vil skifte ugentligt og området for de skiftende data er fra kolonne A til og med X mens antallet af rækker nedad som sagt vil ændres.

Kolonnerne med formler ser således ud (Y, Z, AA, AB, AC, AD og AE og de starter alle fra række 6):
- Y: =WEEKNUM(K6;2)
- Z: =VLOOKUP(S6;Wagendetails!F$2:G$310;2;FALSE)
- AA: =VLOOKUP(I6;Wagendetails!B$2:D$420;2;FALSE)
- AB: =VLOOKUP(I6;Wagendetails!B$2:D$420;3;FALSE)
- AC: =IF(V6=0;AB6;V6+AB6)
- AD: =VLOOKUP(C6;Relationen!A$2:C$550;2;FALSE)
- AE: =VLOOKUP(D6;Relationen!E$2:F$10;2;FALSE)
Nedenstående tre koder er dem jeg har forsøgt at bruge - indtil videre uden held:
Sub CMRDatenDSc_Button2_Click()
If Not Intersect(Target, Range("A:X")) Is Nothing Then 'This makes the code execute only when a value in column C is changed
Application.EnableEvents = False 'This prevents infinate loop
lastrow = Range("A1048576:X1048576").End(xlUp).Row
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault
Application.EnableEvents = True
End If
End Sub
Eller
Sub CMRDatenDSc_Button2_Click()
Private Sub Worksheet_Change(ByVal Target As Range)
lastrow = Range("A1048576:X1048576").End(xlUp).Row
Application.EnableEvents = False 'This prevents infinate loop
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault
Application.EnableEvents = True
End Sub
Eller
Sub CMRDatenDSc_Button2_Click()
a = Cells(A:X).End(xlUp).Row
b = "Y6:AE6" & a
Selection.AutoFill Destination:=Range(b)
End Sub

Jeg kan simpelthen ikke finde ud af hvor jeg har lavet en fejl så jeg vil sætte pris enhver hjælp.

På forhånd tak.
Avatar billede store-morten Ekspert
15. juli 2014 - 14:54 #1
Prøv:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A:X")) Is Nothing Then 'This makes the code execute only when a value in column A:X is changed
Application.EnableEvents = False 'This prevents infinate loop
lastrow = Range("A1048576:X1048576").End(xlUp).Row
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault
Application.EnableEvents = True
End If
End Sub
Avatar billede lkh007 Nybegynder
15. juli 2014 - 15:13 #2
Tak, store-morten

Jeg får dog en "run-time error 424 object required" når jeg kører din kode...
Avatar billede store-morten Ekspert
15. juli 2014 - 15:25 #3
Underligt?

Kan du evt. sende en kopi på E-Mail?
Avatar billede lkh007 Nybegynder
15. juli 2014 - 15:38 #4
Jeg indsætter følgende:

Sub CMRDatenDSc_Button2_Click()

If Not Intersect(Target, Range("A:X")) Is Nothing Then 'This makes the code execute only when a value in column A:X is changed
Application.EnableEvents = False 'This prevents infinate loop
lastrow = Range("A1048576:X1048576").End(xlUp).Row
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault
Application.EnableEvents = True
End If
End Sub
Avatar billede store-morten Ekspert
15. juli 2014 - 15:45 #5
Du skal ikke have:

Sub CMRDatenDSc_Button2_Click()

Med i koden.

Brug kun denne, nu med fejlbehandler:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ErrorHandle

If Not Intersect(Target, Range("A:X")) Is Nothing Then 'Makro køres ved ændring i A:X kolonner
Application.EnableEvents = False 'For at undgå loop
lastrow = Range("A1048576:X1048576").End(xlUp).Row 'Sidste række i A kolonnen
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault

BeforeExit:
Application.EnableEvents = True
End If
Exit Sub

'Her havner vi ved programfejl
ErrorHandle:
Resume BeforeExit 'Dirigerer tilbage til BeforeExit

End Sub


Hvis du vil aktiverer med en knap:
Sub CMRDatenDSc_Button2_Click()
On Error GoTo ErrorHandle

Application.EnableEvents = False 'For at undgå loop
lastrow = Range("A1048576:X1048576").End(xlUp).Row 'Sidste række i A kolonnen
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault

BeforeExit:
Application.EnableEvents = True
End If
Exit Sub

'Her havner vi ved programfejl
ErrorHandle:
Resume BeforeExit 'Dirigerer tilbage til BeforeExit

End Sub
Avatar billede store-morten Ekspert
15. juli 2014 - 15:53 #6
Velkommen på Eksperten.dk

Som spørger, skal du bruge:
Kommentar (til forslag)

Og når du har fået et 'Svar' på dit spørgsmål, du kan bruge,
beder du den der har hjulpet dig, om at lægge et:
Svar (til løsninger og pointgivning)

Her er en lille film om:
Hvordan man accepterer svar på Eksperten.dk
http://www.youtube.com/watch?v=s26DGiuvXBo
Avatar billede lkh007 Nybegynder
15. juli 2014 - 16:37 #7
Tak. Jeg prøvede løsningen med knappen, som jeg har indsat men fik nu fejlmeldingen "Compile Error: End if without block If"...
Avatar billede store-morten Ekspert
15. juli 2014 - 16:43 #8
Min fejl :-)

Slet linien 'End if'
Avatar billede lkh007 Nybegynder
15. juli 2014 - 18:50 #9
Tusind tak for hjælpen, store-morten.

Koden virker nu helt perfekt. Kan du forklare hvorfor If Not Intersect ikke skal med koden for knappen, når antallet af rækker ændres for kolonne A til X?

Igen tak og god aften.
Avatar billede store-morten Ekspert
15. juli 2014 - 19:02 #10
Se kommentaren fremhævet med fed i 'svar' 5
Koden køres når der sker ændring i arket.

Så du skal vælge om makro skal køres ved ændring i arket eller ved tryk på knap.
Avatar billede lkh007 Nybegynder
15. juli 2014 - 19:32 #11
Selvfølgelig - mange tak for hjælpen :)
Avatar billede store-morten Ekspert
15. juli 2014 - 21:10 #12
Velbekomme og tak for point
Avatar billede lkh007 Nybegynder
17. juli 2014 - 10:37 #13
Hej igen store-morten

Jeg har fundet ud af at de ugentlige data jeg sætter ind i regnearket nogle gange også er mindre end den forrige uges data. Dvs. at jeg nogle gange må slette de overskydende celler i kolonne Y til AE, fordi der ikke er tilsvarende data i de resterende rækker/kolonner (altså fra sidste række med data i de faste kolonner A til X).

Kan din formel justeres til ikke bare at fylde formler nedad men i forhold til de rækker af data der sættes in under kolonne A til X?

På forhånd tak.
Avatar billede store-morten Ekspert
17. juli 2014 - 11:41 #14
Er der data i cellerne Y1 til AE6 ?

"Kan din formel justeres til ikke bare at fylde formler nedad men i forhold til de rækker af data der sættes in under kolonne A til X?"

Jo, det gør den nu, men der er formler fra tidligere herunder.
Avatar billede store-morten Ekspert
17. juli 2014 - 11:50 #15
Eller er der data under der ikke må slettes?
Avatar billede store-morten Ekspert
17. juli 2014 - 11:53 #16
Hvordan indsætter du nye data?
Avatar billede lkh007 Nybegynder
17. juli 2014 - 12:04 #17
Alle räkker starter fra räkke 6, hvor jeg fra rökke 6 og nedad indsätter data manuelt (copy/paste) - og det er saa altid fra kolonne A til og med X. Der er saa faste formler fra kolonne X til AE, som jeg saa vil have fyldt nedad ud fra hvor mange räkker med data, der er sat ind.
Avatar billede store-morten Ekspert
17. juli 2014 - 12:14 #18
Du kan slette gamle formler med:

Sub CMRDatenDSc_Button2_Click()
On Error GoTo ErrorHandle

Application.EnableEvents = False 'For at undgå loop

Range("Y7:AE1048576").Clear 'Sletter gamle formler

lastrow = Range("A1048576:X1048576").End(xlUp).Row 'Sidste række i A kolonnen
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault

BeforeExit:
Application.EnableEvents = True
Exit Sub

'Her havner vi ved programfejl
ErrorHandle:
Resume BeforeExit 'Dirigerer tilbage til BeforeExit

End Sub


Koden bliver lidt langsommere.
Ret evt. Y7:AE1048576 til din max antal rækker.
Avatar billede lkh007 Nybegynder
21. juli 2014 - 10:41 #19
Hej igen

Tusind tak. Formlen virker men ja, den er lidt langsommere - indtil videre uden at Excel crasher.

Jeg kan desværre ikke sætte et max antal rækker ind, da antallet vil ændre sig hver uge. Derfor har jeg sat det maksimale antal rækker i Excel ind.

God dag.
Avatar billede store-morten Ekspert
21. juli 2014 - 10:50 #20
Velbekomme.

Er det muligt at sætte et tegn i Y1 til Y6 og skjule disse med farven hvid, så disse ikke kan ses?
Avatar billede lkh007 Nybegynder
21. juli 2014 - 11:05 #21
Y1 til og med Y4 er tomme men i Y5 har jeg en header (tekst) for resten af kolonne Y (fra Y6 og ned). Det samme er tilfældet for kolonne Z til AE.
Avatar billede store-morten Ekspert
21. juli 2014 - 11:32 #22
Hvis du i Y1 til og med Y4 skriver "Tom" og skjuler disse med tekst farve.

Så kan du fange sidste række med formler, inden de slettes:

Sub CMRDatenDSc_Button2_Click()

On Error GoTo ErrorHandle

Application.EnableEvents = False 'For at undgå loop

lastrow = Range("Y1048576").End(xlUp).Row 'Sidste række i Y kolonnen
Range("Y7:AE" & lastrow).Clear 'Sletter gamle formler


lastrow = Range("A1048576:X1048576").End(xlUp).Row 'Sidste række i A:X kolonnen
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault

BeforeExit:
Application.EnableEvents = True
Exit Sub

'Her havner vi ved programfejl
ErrorHandle:
Resume BeforeExit 'Dirigerer tilbage til BeforeExit

End Sub
Avatar billede store-morten Ekspert
21. juli 2014 - 11:40 #23
Man kan evt. Sætte teksten "tom" og sletten den igen, med makroen :-)
Avatar billede store-morten Ekspert
21. juli 2014 - 11:48 #24
Sub CMRDatenDSc_Button2_Click()
On Error GoTo ErrorHandle

Application.EnableEvents = False 'For at undgå loop

Range("Y1,Y2, Y3, Y4").Value = "Tom" 'Skriver miderlig tekst
lastrow = Range("Y1048576").End(xlUp).Row 'Sidste række i Y kolonnen
Range("Y7:AE" & lastrow).Clear 'Sletter gamle formler
Range("Y1,Y2, Y3, Y4").Clear 'Sletter miderlig tekst

lastrow = Range("A1048576:X1048576").End(xlUp).Row 'Sidste række i A:X kolonnen
Range("Y6:AE6").AutoFill Destination:=Range("Y6:AE" & lastrow), Type:=xlFillDefault

BeforeExit:
Application.EnableEvents = True
Exit Sub

'Her havner vi ved programfejl
ErrorHandle:
Resume BeforeExit 'Dirigerer tilbage til BeforeExit

End Sub
Avatar billede lkh007 Nybegynder
21. juli 2014 - 12:23 #25
Mange tak. Så koden burde køre hurtigere nu?

Kan jeg stadig skrive "Tom", når jeg har Excel på engelsk?
Avatar billede store-morten Ekspert
21. juli 2014 - 12:28 #26
Ja, du kan skrive hvad du vil, da det er en tekst, der skrives i cellerne :-)
Avatar billede lkh007 Nybegynder
21. juli 2014 - 12:57 #27
Super. Tak for hjælpen - igen :)
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