2016-06-16 28 views
0

変数に基づいて挿入する行数の行を挿入したいとします。私は行番号を台無しにすることを避けるために、下から後方に取り組んでいます。コードは以下の通りです。変数として挿入する行数の行を挿入しますか?

Option Explicit 
Sub InsertRow() 


Dim ws As Worksheet 
Dim ColA As Range 
Dim RowNo As Integer 

Dim i As Integer 

Set ws = Worksheets("Sheet1") 
Set ColA = ws.Range("A2:A944") 

For i = 2 To ColA Step -1 
RowNo = Range("B" & ":" & ColA.Row).Value 

Rows(RowNo, 0).EntireRow.Insert 
Next i 
End Sub 

問題はラインである:

RowNo = Range("B" & ":" & ColA.Row).Value 

私は正しい構文が範囲寸法の変数を含める方法を確認していません。

+1

とあなたのエラーMSGは何ですか? string + variable concatingはOKですが、奇妙なRange rangeの定義 –

+0

Forループのオープン時に型の不一致があります。範囲定義の問題は何ですか? –

+0

'RowNo = Range(" B "&": "&i).Value' 別のマクロの実行が終了した後に試行します。 –

答えて

1

このコードにはいくつかの問題があります。

  1. ColAは整数ではなく範囲です。それ自体問題ではありませんが、これはFor i = 2 To ColAが機能しないことを意味します。速い解決策はFor i = 2 To ColA.Rows.Countを使用することです。しかし、
  2. それは逆方向に動作するように意味を持たないので、これはあなたがいつもの最初の行を返します。数字が小さいループColA.Rowための内部(For i = ColA.Rows.Count To 2 Step -1
  3. に高い数からループのために実行する必要があることを意味範囲、この場合は2です。範囲を指定するために使用される連結は、有効なアドレスではない "B:2"に解決されます。
  4. コードRowNo = Range("B" & ":" & ColA.Row).Valueが範囲( "B2"?)から値を読み取ろうとしているように見える理由は明確ではありません。これは、挿入する行の数を指定するセルと見なされますか? 、セルの値にROWNO変数を設定して、Rows(RowNo, 0).EntireRow.Insertでその値を使用することにより、可変

    に基づいて挿入するために

  5. 行数と

:これは、あなたのステートメントに基づいていること入力値は実際に新しい行が挿入される前の行を決定するために使用されます。これが意図ですか?この場合、コードはループの繰り返しごとに行2に行を挿入します(942回)。だから私は "B2"からの値が挿入する行の数であると仮定します。

  1. Rows(RowNo, 0).EntireRow.Insertには列インデックスは必要ありません。

このコードを試してください:

サブのinsertRow()

Dim ws As Worksheet 
Dim ColA As Range 
Dim RowNo As Integer 
Dim i As Integer 

Set ws = Worksheets("Sheet1") 
Set ColA = ws.Range("A2:A944") 

RowNo = ColA.Row 

' Use cell B2 to set the number of rows to insert 
Dim intAddRows As Integer 
intAddRows = ws.Range("B2").Value 

For i = 1 To intAddRows 
    ws.Rows(RowNo).EntireRow.Insert 
Next i 
End Sub 

(したがって、この場合には2行)範囲ColAの開始時に行を挿入すると、移動すること、しかし、注意してください指定された行数だけ入力範囲Range("B2")がダウンします。より適切な場所から行の数を取得するコードを修正する必要があります(おそらく、intAddRows = InputBox("Number of rows to insert", "Set rows")のようになります)。

UPDATE - B列で指定した行数を追加するには:

Sub insertRows() 
    Dim ws As Worksheet 
    Dim RowNo As Integer 
    Dim lastLine As Integer 
    Dim i As Integer 

    Set ws = Worksheets("Sheet1") 
    lastLine = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 

    For RowNo = lastLine To 2 Step -1 
     For i = 1 To ws.Cells(RowNo, 2) 
      ws.Rows(RowNo + 1).EntireRow.Insert 
     Next i 
    Next RowNo 
End Sub 
+0

Woops!あなたは私の問題を誤解しましたが(変数はB2にはなく、すべての隣接するセルにあります)、私はこのことから多くを学びました。私の弱点は次のループのためです。 –

+0

ああ、私はあなたと今! B列から変数を取得するように更新されました。 – lonestorm

関連する問題