Avatar billede Heilskov Novice
24. august 2016 - 09:03 Der er 16 kommentarer og
1 løsning

Kopiere celler fra et ark til et andet i excel og indsætte i næste ledige række

Hej
Jeg har forsøgt af flere omgange at lave en Makro, som kan kopiere celler fra et ark over til et ark i samme dokument. Cellerne skal indsættes i næste ledige række i tabellen.

Mit behov er følgende:
Fra Ark 7 skal følgende kopieres:
Kolonne B-K, række 8-50 (alternativ alle de rækker som er udfyldt fra 8 og ned, hvis muligt.)
Skal indsættes i Ark 1 i samme rækkefølge som ovenstående - dvs. kolonne B-K, næste ledige række i tabellen.

I tabellen har jeg forskellige formler fra kolonne L-O, så det er vigtigt at disse ikke overskrives.

Jeg er TOTAL nybegynder, og har forsøgt at kode dette, ved hjælp af andre lignende indlæg herinde, men har endnu ikke fået det til at fungere :(

Håber I kan hjælpe mig...
Avatar billede kim1a Ekspert
24. august 2016 - 11:35 #1
Prøv at vise os hvad du har so far - fremfor at vi skal skabe det hele forfra.

Jeg forestiller mig du skal have et par variabler - herunder den der skal finde "hullet" i Ark1 hvor du skal starte med at indsætte.

Måske specialcells(xlend;xldown) kan hjælpe dig på vej hvis ikke allerede du har dem?
Avatar billede Heilskov Novice
24. august 2016 - 14:34 #2
Hej Kim

Ved ikke helt om jeg forstår dig helt korrekt.
Vil du gerne have en fil at kigge i, og i så fald - hvordan kan jeg vedhæfte en fil hertil???

Jeg er kun der, hvor jeg har tabellerne sat op i de to Ark, og så har jeg manuelt kopieret fra det ene ark, og indsat i det andet. Så det er vist helt fra scratch.

Forsøgte mig med at indspille en markro, ved at kopiere de enkelte kolonner, men den blev ved med at overskrive de gamle data.
Avatar billede kim1a Ekspert
24. august 2016 - 15:23 #3
Ah - okay. Så er det helt forfra. Jeg fik bare indtrykket af at du havde været igang :-)

Lad os håbe der er en som er hurtig så. Jeg vil se på det senere i dag og give et udkast.
Avatar billede jens48 Ekspert
24. august 2016 - 19:26 #4
Prøv med denne makro:

Sub Flyt()
Dim RFra, RTil As Integer
RFra = Application.WorksheetFunction.CountA(Sheets("Ark7").Range("B8:B50")) + 7
RTil = Sheets("Ark1").Range("B65536").End(xlUp).Row
Sheets("Ark7").Range("B8:K" & RFra).Copy Destination:=Sheets("Ark1").Range("B" & RTil)
End Sub
Avatar billede jens48 Ekspert
24. august 2016 - 20:09 #5
En lille rettelse til makroen (den anden makro overskrev sidste linie):

Sub Flyt()
Dim RFra, RTil As Integer
RFra = Application.WorksheetFunction.CountA(Sheets("Ark7").Range("B8:B50")) + 7
RTil = Sheets("Ark1").Range("B65536").End(xlUp).Row +1
Sheets("Ark7").Range("B8:K" & RFra).Copy Destination:=Sheets("Ark1").Range("B" & RTil)
End Sub
Avatar billede Heilskov Novice
25. august 2016 - 11:06 #6
Hej Jens

Tak for ovenstående. Det er korrekt forstået, at jeg kopierer koden ind i VBA Projektet - Denne_projektmappe i Visual Basic ikke?

Den melder en fejl som hedder: Subscript out of range, når jeg tildeler makroen til knappen og tester den.

En lille tilføjelse til tidligere. Ark 1 hedder i mit skema Samleark og Ark 7 hedder Converter.

Har du et forslag til, hvad der kan være galt?
Avatar billede Heilskov Novice
25. august 2016 - 11:25 #7
Hej Igen Jens

Jeg forsøgte mig lige lidt frem, og lavede et nyt modul til mit projekt i Visual Basic.
Heri indsatte jeg din formel og ændrede navnene, så det passer med mine kolonner.
Og så overførte den faktisk til arket :)

Der opstod imidlertid et par nye udfordringer:

1)
Den næste ledige linje i det ark, som der skal indsættes i er linje 323, men makroen indsætter først data i linje 1292.

2)
I tabellen i ark 7 (Converter), som jeg vil kopiere, har jeg i kolonne B, C, J og K lavet formler, som beregner på bagrund af de øvrige kolonner. Jeg vil ikke flytte formlerne med over i mit ark 1 (Samleark) - kun de værdier, som den beregner.

Kan vi klare den? :)
Avatar billede jens48 Ekspert
25. august 2016 - 15:52 #8
Ang. punkt 1: Du har sikkert noget stående i celle B1291. Der er to mulige løsninger. Du kan slette det eller hvis det ikke er muligt ændre linie 4 (i nedenstående eksempel linie 5) til:

RTil = Sheets("Ark1").Range("B1290").End(xlUp).Row +1

Denne makro hvor jeg har indsat de rigtige arknavne indsætter kun værdierne:

Sub Flyt()
Dim RFra, RTil As Integer
x = ActiveCell.Address
RFra = Application.WorksheetFunction.CountA(Sheets("Converter").Range("B8:B50")) + 7
RTil = Sheets("Samleark").Range("B1290").End(xlUp).Row
Sheets("Converter").Range("B8:K" & RFra).Copy
Sheets("Samleark").Range("B" & RTil).PasteSpecial xlPasteValues
Range(x).Select
End Sub
Avatar billede Heilskov Novice
25. august 2016 - 21:54 #9
Hej Jens
Vi nærmer os noget der kan bruges. Nu kan jeg i hvert fald overføre værdier fra det ene ark til det andet :)

Fandt også udfordringen med mit spørgsmål 1), vedrørende at den fylder ind i felter længere nede i tabellen. Fejlen ligger vist i forklaringen af min problemstilling :)

Der var ingen data i linje 1292, foruden formlerne i kolonne MNO. Udfordringen tror jeg er, at definerede i min problemstilling, at jeg gerne vil kopiere Værdierne B8 til B50, men det er ikke altid at jeg udnytter alle rækker. Dvs., at der reelt måske kun er 4 rækker der er aktive/udfyldte, og i så fald er det kun dem, som skal kopieres med over i samlearket. Giver det mening, og er det muligt at kode sig ud af det?

To ekstra mindre udfordringer, som jeg er stødt på, nu vi er i gang:
1) Når jeg trykker på Flyt data knappen, må billedet gerne automatisk skifte til Samlearket
2) Jeg vil rigtig gerne have, hvis de aktive celler i samlearket i kolonne B-O automatisk farves lysegrønne, hvis værdien i cellen i kolonne B hedder "Optimeret". Har forsøgt med en betinget formel, men kan ikke få den til at lave det på de enkelte rækker.

Tak for hjælpen... :) :)
Avatar billede Heilskov Novice
26. august 2016 - 07:36 #10
Hej igen Jens

Jeg kom lige til at tænke lidt mere... :)

Hvis det ikke er muligt at kode således, at kun celler med aktive værdier (dvs. tal og ikke formler) flyttes, kan man så alternativt koble en HVIS formel på flyttefunktionen, således at den kun flytter de rækker B-K, række 8:50, hvis der er en værdi i kolonne I, som er større end 0,1?
Avatar billede jens48 Ekspert
26. august 2016 - 07:53 #11
Skal det forstås således at celler med formler ikke skal kopieres, eller skal værdien af formelerne kopieres. Den sidste makro jeg sendte overfører værdien af formlerne.
Men du ønsker altså at teste hver enkelt række på hvad der står i kolonne I?
Avatar billede Heilskov Novice
26. august 2016 - 10:36 #12
Hej Jens

Det er kunsten lige at få det formuleret, så det giver mening :)

Du har helt ret i, at formlerne i cellerne ikke skal kopieres - kun værdierne.
I arket har jeg lavet rækkerne 8-50 med gennemgående HVIS formler i kolonne B, D, J og K. Alle disse kolonnerne udfyldes alene med værdier, hvis værdien i I > 0,1. Er I <  0,1, vil kolonne B, D, J og K være blanke.

Hvor mange rækker jeg skal kopiere over til mit andet ark, varierer fra gang til gang. Nogle gange skal der 5 rækker med over, andre gange 43 rækker.

Hvis muligt, vil det derfor give god mening, at den tester de enkelte rækker ift. værdien i I.
Altså:
Hvis I>0,1  overføres alle værdier i rækken fra kolonne B-K.
Hvis I<0,1  overføres ingenting.

Giver det mening? Ellers uddyber jeg gerne yderligere.

Det er vel ikke muligt at vedhæfte et ark herinde? :)
Avatar billede jens48 Ekspert
26. august 2016 - 10:46 #13
Du kan ikke uploade et ark her. Men du kan f.eks. benytte www.dropbox.com. Det er gratis. Jeg prøver at kigge på det i aften
Avatar billede Heilskov Novice
26. august 2016 - 11:33 #14
OK. Giver min forklaring mening, for så gider jeg ikke til at bøvle med at lave Dropbox :) :)
Avatar billede jens48 Ekspert
26. august 2016 - 11:43 #15
Det gør den
Avatar billede jens48 Ekspert
26. august 2016 - 15:09 #16
Prøv me denne makro:

Sub Flyt()
Dim R, RTil As Integer
For R = 8 To 50
RTil = Sheets("Samleark").Range("B1290").End(xlUp).Row
If IsNumeric(Sheets("Converter").Range("I" & R)) And Sheets("Converter").Range("I" & R) >= 0.1 Then
Sheets("Converter").Range("B" & R & ":K" & R).Copy
Sheets("Samleark").Range("B" & RTil + 1).PasteSpecial xlPasteValues
End If
Next
Application.CutCopyMode = False
Sheets("Samleark").Select
Range("B" & RTil).Select
End Sub

Angående formattering, så gå til B2 og marker området B2:O100 (eller længere ned) og skriv under formattering denne formel:

=$B2="Optimeret"
Og farv det grønt
Avatar billede Heilskov Novice
26. august 2016 - 21:46 #17
Hej Jens

Den er bare lige i øjet.
Tusind mange tak for din store hjælp!

Det bliver et super værktøj...
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