2017-09-21 12 views
0

セルの下に新しい行を挿入する際に問題があります。私は各アクティブなセルの下に新しい行を挿入する必要があります。このコードでExcelがクラッシュします。おかげで助けを求めExcel vba - アクティブセルの新しい行を挿入

Sub CopyRow() 

    Dim cel As Range 
    Dim selectedRange As Range 

    Set selectedRange = Application.Selection 

    For Each cel In selectedRange.Cells 
     cel.Offset(1, 0).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow 
     'copy data 
     cel.Offset(1, 0).Value = cel.Value 
    Next cel 

End Sub 
+2

は 'cel.Offsetお試しください(1、0).EntireRow.Insert'これは、あなたが遭遇しているエラーの過去を取得しますが、新たに挿入された行が選択された範囲の一部になっている新しい問題にぶつかるので、次の反復は新しい行を挿入して終了する無限ループで選択した範囲の最後のセルから開始し、反復の後ろに行を挿入する( 'step -1')ステップを繰り返すループが必要な場合があります。 – JNevill

答えて

0

これは、選択した範囲のスナップショットを取り、その後、UsedRangeに後方に動作します:


Option Explicit 

Public Sub CopyRows() 
    Dim sRng As Range, sRow As Long, sr As Variant 
    Dim r As Long, lb As Long, ub As Long 

    Set sRng = Application.Selection 
    sRow = sRng.Row 
    If sRng.CountLarge = 1 Then 
     With ActiveSheet.UsedRange 
      .Rows(sRow + 1).EntireRow.Insert Shift:=xlShiftDown 
      .Rows(sRow + 1).Value2 = .Rows(sRow).Value2 
     End With 
    Else 
     sr = sRng 
     lb = LBound(sr) 
     ub = UBound(sr) 
     Application.ScreenUpdating = False 
     With ActiveSheet.UsedRange 
      For r = ub To lb Step -1 
       .Rows(r + sRow).EntireRow.Insert Shift:=xlShiftDown 
       .Rows(r + sRow).Value2 = .Rows(r + sRow - 1).Value2 
      Next 
      .Rows(lb + sRow - 1 & ":" & ub * 2 + sRow - 1).Select 
     End With 
     Application.ScreenUpdating = True 
    End If 
End Sub 
関連する問題