2017-04-03 2 views
-1

Ich habe ein Makro, das eine Zeile in eine Tabelle einfügt und ich möchte es die Formeln in der neu eingefügten Zeile automatisch ausfüllen.Einfügen einer Zeile und AutoFill mit VBA

Hier ein Beispiel von dem, was ich in meiner Tabelle habe.

Edit: In meiner Zeit Tabelle eine haben 10 Spalten und mehrere Reihen aber brülle ich nur eine Spalte kopiert

ColumnB 
    TextA 
    TextA 
    TextA 
    TextA 
    TextB 
    TextB 
    TextB 
    TextB 
    TextC 
    TextC 
    TextC 
    TextC 

Der folgende Code eine neue Zeile nach TextA, TextB, TextC hinzufügen und so weiter

Sub Insert() 

    Dim LastRow As Long 
    Dim Cell As Range 

Application.ScreenUpdating = False 

    LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(-4162).Row 

    For Each Cell In Sheets("Sheet1").Range("B7:B" & LastRow) 
     If Cell.Value <> Cell.Offset(1, 0) Then 
      If Cell.Value <> "" Then 
       Sheets("Sheet1").Rows(Cell.Row + 1).Insert 
      End If 
     End If 
    Next Cell 

Application.ScreenUpdating = True 

End Sub 

Gibt es eine Möglichkeit, die Formeln automatisch zu füllen?

Ich dachte, eine Codezeile wie die folgende innerhalb meiner Schleife einzufügen, direkt nach dem Hinzufügen der neuen Zeile. Das Problem dabei ist das Range Argument. Ich weiß nicht, was zu spezifizieren darin

Selection.AutoFill Destination:=Range("A21:J22"), Type:=xlFillDefault 
+0

fügen etwas wie Bereich (Zelle, cell.offset (1,0)) –

Antwort

1

Sie so etwas wie dies versuchen kann ...

Sub Insert() 

Dim LastRow As Long 
Dim LastCol As Long 
Dim i As Long 
Dim Cell As Range 

Application.ScreenUpdating = False 

LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 

'Assuming Row6 is the header row 
LastCol = Sheets("Sheet1").Cells(6, Columns.Count).End(xlToLeft).Column 

For i = LastRow To 8 Step -1 
    If Cells(i, 2) <> "" And Cells(i, 2) <> Cells(i - 1, 2) Then 
     Range(Cells(i - 1, 1), Cells(i - 1, LastCol)).Copy 
     Cells(i, 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
     Range(Cells(i, 1), Cells(i, LastCol)).SpecialCells(xlCellTypeConstants, 3).ClearContents 
    End If 
Next i 
Application.ScreenUpdating = True 

End Sub 
0

Wie Sie Ihre Strecke kennen Sie eine der folgenden Methoden nach dem ‚Next einfügen Zelle‘Aussage:

Excel.Cells.Range("B7:B" & LastRow).Value = "=MOD(OFFSET(A7,-1,0)+ (A6<>OFFSET(A6,-1,0)),2)" 'or any function you like, e.g. '=SUM(A1+A2)' 
Excel.Cells.Range("B7:B" & LastRow).Value = "0" 
Excel.Cells.Range("B7:B" & LastRow).NumberFormat = "General" 
Excel.Cells.Range("B7:B" & LastRow).FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1:="=B6=1")