29. januar 2004 - 22:10Der 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?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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
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?
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
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...
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
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.