배경왜 for for 루프는 전체 데이터 세트를 처리하지 않습니까?
이벤트에 대한 티켓 할당 스프레드 시트가 있습니다. 스프레드 시트의 각 행에 할당 된 티켓의 이름과 개수가 있습니다. 각각의 이름은 별도의 행에 티켓에 한 번 중복 될 수 있도록
나는이 같은 스프레드 시트를 변경해야
나는 그것이 그러나,이 작업을 수행하는 매크로를 이상한 행동
에게 문제
,691,363 전시210매크로가 전체 데이터 세트를 반복하지 않습니다. 코드를 살펴보면 의도적으로 LastRow
의 값을 증가 시켰음에도 불구하고 For 루프 만 지정된 원래 값만큼 반복됩니다. 각 반복 끝에 새로운 값 LastRow
은 무시됩니다. 루프가 잘 작동하는 동안
이의 (a 마십시오 루프 동안을 사용하여 작업 코드는 아래를 참조)에 해당하는 않는 한 특별히 이상한 것 같다
[질문
이유는 무엇입니까 문제 섹션에서 설명하는 동작 (위)가 발생하고 왜 등가 구조와 모순 되는가?
매크로 루프
Sub InsertSurnames()
Dim LastRow As Long
Dim r As Long
Dim surname As String
Dim tickets As Integer
Dim surnameCol As Integer
Dim ticketCol As Integer
Dim targetCol As Integer
surnameCol = 1
ticketCol = 3
targetCol = 4
LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
For r = 1 To LastRow
surname = Cells(r, surnameCol).Value
tickets = Cells(r, ticketCol).Value
If (Not (Len(surname) = 0)) Then
Cells(r, targetCol).Value = surname
For x = 1 To tickets - 1
Cells(r + x, 1).EntireRow.Insert
Cells(r + x, targetCol).Value = surname
Next x
LastRow = LastRow + tickets - 1
End If
Next r
End Sub
에 대한 마 루프
Sub InsertSurnames()
Dim LastRow As Long
Dim r As Long
Dim surname As String
Dim tickets As Integer
Dim surnameCol As Integer
Dim ticketCol As Integer
Dim targetCol As Integer
surnameCol = 1
ticketCol = 3
targetCol = 4
LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
r = 1
Do While r <= LastRow
surname = Cells(r, surnameCol).Value
tickets = Cells(r, ticketCol).Value
If (Not (Len(surname) = 0)) Then
Cells(r, targetCol).Value = surname
For x = 1 To tickets - 1
Cells(r + x, 1).EntireRow.Insert
Cells(r + x, targetCol).Value = surname
Next x
LastRow = LastRow + tickets - 1
End If
r = r + 1
Loop
End Sub
다른 루프 구성 요소간에 일관성이 없다는 것은 여전히 이상한 일입니다. – chrisbunney