Avatar billede h_s Forsker
29. januar 2004 - 22:10 Der er 6 kommentarer og
2 løsninger

Indsæt linje via makro

Hejsa

Jeg har et regneark, hvor jeg indtaster mit benzinforbrug i rækker og i nogle af kolonnerne (E,G,I:K,M) er der nogle formler der bl.a. udregner km/l mv.

I dag indsætter jeg en ny række på slave måden ved at markerer hele rækken og bagefter "trække" formlerne fra rækken ovenfor.

Jeg har prøvet at lave en makro:
Selection.Insert Shift:=xlDown
    Range("E7").Select
    Selection.AutoFill Destination:=Range("E7:E8"), Type:=xlFillDefault
    Range("E7:E8").Select
    Range("G7").Select
    Selection.AutoFill Destination:=Range("G7:G8"), Type:=xlFillDefault
    Range("G7:G8").Select
    Range("I7:K7").Select
    Selection.AutoFill Destination:=Range("I7:K8"), Type:=xlFillDefault
    Range("I7:K8").Select
    Range("M7").Select
    Selection.AutoFill Destination:=Range("M7:M8"), Type:=xlFillDefault
    Range("M7:M8").Select
    Range("B8").Select

Problemet med den er, som I kan se, den kopier altid række 7 til række 8 - Det passer jo kun en gang!
Samtidig skal jeg stille mig i den række, hvor jeg ovenfor gerne vil have indsat en en række. Det kan jeg godt leve med, men kan man ikke lave et eller andet, hvor der altid indsættes en række lige over "i alt" rækken?
Avatar billede kabbak Professor
30. januar 2004 - 00:05 #1
Sub IndsaetRow()
    Range("A65536").End(xlUp).Select 'finder sidste række i A kolonnen
    ActiveCell.EntireRow.Insert Shift:=xlDown ' indsætter række lige over sidste række
    For I = 1 To 12
If ActiveCell.Offset(-1, I).HasFormula Then ' har celler i rækken ovenover en formel
  ActiveCell.Offset(-1, I).AutoFill _
  Destination:=Range(ActiveCell.Offset(-1, I), ActiveCell.Offset(0, I)) _
  , Type:=xlFillDefault ' hvis overstående celler har en formel trækkes den ned,
                        'Fra A kolonnen og 12 kolonner til højre
  End If
Next
End Sub
Avatar billede h_s Forsker
31. januar 2004 - 15:09 #2
Den virker fint, bortset fra at Ialt ikke står i kolonne A men i D. Det betyder der ikke står noget under alle tankningerne. Kan du hjælpe med det eller "skal" jeg skrive noget neders i kolonne A?
Avatar billede kabbak Professor
31. januar 2004 - 16:19 #3
Er rettet til.

Sub IndsaetRow()
  R = Range("D65536").End(xlUp).Row 'finder sidste række i D kolonnen
    Range("A" & R).Select
    ActiveCell.EntireRow.Insert Shift:=xlDown ' indsætter række lige over sidste række
    Range("A" & R).Select
    For I = 1 To 12
If ActiveCell.Offset(-1, I).HasFormula Then ' har celler i rækken ovenover en formel
  ActiveCell.Offset(-1, I).AutoFill _
  Destination:=Range(ActiveCell.Offset(-1, I), ActiveCell.Offset(0, I)) _
  , Type:=xlFillDefault ' hvis overstående celler har en formel trækkes den ned,
                        'Fra A kolonnen og 12 kolonner til højre
  End If
Next
End Sub
Avatar billede h_s Forsker
01. februar 2004 - 09:31 #4
Nu virker indæsttelse af rækken, men den nye række indgår ikke i summeringerne i I alt rækken. Ex. Jeg har I alt i række 8 - Sum på km er: Sum(E5:E7) efter indsættelse af række, så  I alt er række 9, er E8 ikke kommet med i sum-formlen. Samtidig har jeg en betinget formatering, så dårligste værdi bliver rød og bedste værdi bliver blå. Det ordnede jeg før ved at have en ekstra række, der var noget smallere end de andre mellem sidste række af indtastningerne og I alt-rækken. Det virker heller ikke nu. Forviret? :-) Hvis du vil se filen, så sig til...
Avatar billede kabbak Professor
01. februar 2004 - 09:35 #5
sendtil#kabbak@tiscali.dk

fjern sendtil#
Avatar billede kabbak Professor
01. februar 2004 - 10:03 #6
Er retuneret og rettet, har indsat en smal række lige over totaler, så den nye række indsættes 2 rækker oppe, talt fra bunden.

Her er koden

Sub IndsaetRow()
  R = Range("D65536").End(xlUp).Row 'finder sidste række i D kolonnen
    Range("A" & R - 1).Select
    ActiveCell.EntireRow.Insert Shift:=xlDown ' indsætter række lige over sidste række
    Range("A" & R - 1).Select
    For I = 1 To 12
If ActiveCell.Offset(-1, I).HasFormula Then ' har celler i rækken ovenover en formel
  ActiveCell.Offset(-1, I).AutoFill _
  Destination:=Range(ActiveCell.Offset(-1, I), ActiveCell.Offset(0, I)) _
  , Type:=xlFillDefault ' hvis overstående celler har en formel trækkes den ned,
                        'Fra A kolonnen og 12 kolonner til højre
  End If
Next
End Sub
Avatar billede h_s Forsker
01. februar 2004 - 10:51 #7
Det virker perfekt - TAK :-)
Avatar billede kabbak Professor
01. februar 2004 - 11:03 #8
Tak for point ;-))
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