2016-06-16 4 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가 무엇입니까? 문자열 + 변수 concating 괜찮아 보이지만 이상한 범위 범위 정의 –

+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. 에 더 높은 숫자에서 for 루프를 실행해야 의미 범위,이 경우에는 2입니다. 범위를 지정하는 데 사용 된 연결은 유효한 주소가 아닌 "B : 2"로 해석됩니다.
  4. 코드 RowNo = Range("B" & ":" & ColA.Row).Value이 범위 ("B2"?)에서 값을 읽는 중일 것 같은 이유가 명확하지 않습니다. 이것은 삽입 할 행 수를 지정하는 셀로 간주됩니까? 이것은한다는 성명을 기반으로합니다 Rows(RowNo, 0).EntireRow.Insert로 그 값을 사용하여 다음 셀 값에 RowNo 변수를 설정하고하여 행의 수와

변수

에 따라 삽입하려면 입력 값은 실제로 새 행이 삽입되기 전에 행을 판별하는 데 사용됩니다. 이것이 의도였습니까? 이 경우 코드는 루프의 모든 반복 (942 회)에 대해 행 2에 행을 삽입합니다. 그래서 "B2"의 값은 삽입 할 행의 수라고 가정합니다.

  1. Rows(RowNo, 0).EntireRow.Insert에는 열 색인이 필요하지 않습니다. 이동 범위 ColA의 시작 부분에 행을 삽입하는 (그래서이 경우 2 행), 그러나,

    하위 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 
    

    주의 사항 :

이 코드를 사용해보십시오 입력 범위 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