2017-04-20 7 views
0

下に挿入する行の数を指定するセルがある行があります。私のコードのその部分は正常に動作しました。元の行の内容を取り出して新しく作成した行に貼り付け、その行の特定のセルから情報を削除したいとします。それが私が問題を抱えているところです。ここに私のコードは次のとおりです。私は、元の行をコピーして、私のMSのクリップボード上にあるが、貼り付けられませんされて、私の新しく作成された行に、元の行の内容を貼り付けることができない理由行を作成し、元の行をコピーして新しい行に貼り付けます

Set ws = ActiveSheet 

Dim rw, num As Long 

rw = 5 

While ws.Cells(rw, 16).Value <> "" 
    num = ws.Cells(rw, 16).Value 

    If num = 0 Then 
     rw = rw + 1 
    Else 

     Range(Cells(rw + 1, 16), Cells(rw + num, 16)).EntireRow.Insert shift:=xlDown 
     Rows(rw).Select 
     Selection.Copy 
     Range(Rows(rw + 1), Rows(rw + num)).Paste 
     Range(Cells(rw + 1, 9), Cells(rw + num, 9)).ClearContents 
     rw = rw + num + 1 
    End If 
Wend 

End Sub 

私は理解していません。 Range()、Paste、Rows()、Paste、Cells()を使って試してみました。どんな助けでも大変感謝しています。

答えて

0

あなたは、私が@pascalbaroが書いたもの使用するだけでなく、select文を取り除く

 

    Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial xlPasteValues 
    Application.CutCopyMode = False 

または

 

    Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial Paste:=xlPasteAll, _ 
      Operation:=xlNone, SkipBlanks:=True, Transpose:=False 
     Application.CutCopyMode = False 

0

を試すことができます。さらに、これが唯一のサブルーチンであれば、画面の更新を制限することができます。単にそれらを呼び出すだけではない場合。

Application.ScreenUpdating = False 
Set ws = ActiveSheet 
Dim rw, num As Long 
rw = 5 

While ws.Cells(rw, 16).Value <> "" 
    num = ws.Cells(rw, 16).Value 

    If num = 0 Then 
     rw = rw + 1 
    Else 

     Range(Cells(rw + 1, 16), Cells(rw + num, 16)).EntireRow.Insert shift:=xlDown 

     'remove the selection statements 
     Rows(rw).Copy 

     Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial Paste:=xlPasteAll, _ 
      Operation:=xlNone, SkipBlanks:=True, Transpose:=False 

     Range(Cells(rw + 1, 9), Cells(rw + num, 9)).ClearContents 

     rw = rw + num + 1 

    Application.CutCopyMode = False 

    End If 
Wend 

Application.ScreenUpdating = True 
関連する問題