나는 VBA를 능가하는 합리적으로 새롭고 매크로를 개발하려는 벽에 부딪 혔습니다. A에서 S까지의 데이터를 포함하는 액세스 데이터베이스의 출력이 있습니다. 출력에는 가변 개수의 행이 있지만 항상 헤더 행이 포함되어 있습니다. C 열에는 여러 행에 공통적 인 값이 있습니다 (예 : C2 : C7은 '바나나', C8 : C9는 '바스켓', C10 : C21은 '버킷'). C 열의 공통 값은 동적입니다. C 열의 값은 항상 연속적입니다.
C 열의 값이 변경되는시기를 식별하고 C 열 (및 머리글 행)에 동일한 값을 가진 행에 대해 A ~ S 열을 C 열 값으로 저장된 새 통합 문서에 붙여 넣는 매크로를 만들려고했습니다. 파일 이름으로 원본 통합 문서에서이 범위를 삭제하고 C 열의 값 수를 반복합니다. C 열에 3 개의 값이 있으면 내 코드가 작동하는 것 같습니다. 그러나 이보다 더 많은 경우 코드는 C 열의 값 변경을 찾기위한 기준을 무시하고 C 열에 여러 값을 포함하는 범위를 가진 새 통합 문서를 만듭니다.
나는 루프의 각 반복마다 변수가 지워지지 않는다는 사실 때문일 수 있다고 생각했지만 웹에서 본 모든 것은 이것이 문제가되지 않아야 함을 시사합니다. If 문은 새 통합 문서 코드를 msgbox로 바꾸었을 때 작동하는 것 같지만 통합 문서 코드는 그렇지 않습니다. For 루프의 문제라고 생각하지만 어떻게 해결해야할지 모르겠습니다. 나는 수많은 SO 페이지를 검색하고 보았지만 사용할 수있는 답을 찾지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.
내 코드는 다음과 같습니다.
Sub number()
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet, wsO As Worksheet
Dim cell, rng As Range
Set rng = Range("C2:C97")
For Each cell In rng
If cell.Value <> cell.Offset(1, 0).Value Then
Set wbI = ActiveWorkbook
Set wsI = wbI.Worksheets("Worklist")
Set wbO = Workbooks.Add
With wbO
Set wsO = wbO.Sheets("Sheet1")
.SaveAs Filename:="C:\Users\svanwo0\Desktop\" & cell & ".xls", FileFormat:=56
wsI.Range("A1:S1").Copy
wsO.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
wsI.Rows("2:" & cell.Row).Copy
wsO.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Close SaveChanges:=True
End With
Set wbI = Nothing
Set wsI = Nothing
Set wbO = Nothing
Set wsO = Nothing
Rows("2:" & cell.Row).EntireRow.Delete (xlUp)
End If
Next cell
End Sub
미리 감사드립니다
vanw0001
이것은 루프에서 앞으로 나아가고 줄을 삭제하면 문제가 발생하는 경우 중 하나입니다.
반복 할 범위를 설정했습니다. 삭제하면 데이터가 위로 이동되지만 여전히 다음 물리적 행으로 이동하므로 매번 재설정되지 않습니다.
기본적으로 날짜의 전체 영역을 삭제하고 있기 때문에 삭제가 끝날 때까지 기다릴 것입니다. 다음 데이터 블록의 시작 행을 유지하는 변수를 만듭니다.
Sub number()
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet, wsO As Worksheet
Dim cell, rng As Range
Dim stRw As Long
Set rng = Range("C2:C97")
stRw = 2
For Each cell In rng
If cell.Value <> cell.Offset(1, 0).Value Then
Set wbI = ActiveWorkbook
Set wsI = wbI.Worksheets("Worklist")
Set wbO = Workbooks.Add
With wbO
Set wsO = wbO.Sheets("Sheet1")
.SaveAs Filename:="C:\Users\svanwo0\Desktop\" & cell & ".xls", FileFormat:=56
wsI.Range("A1:S1").Copy
wsO.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
wsI.Rows(stRw & ":" & cell.Row).Copy
wsO.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Close SaveChanges:=True
stRw = cell.Row + 1
End With
Set wbI = Nothing
Set wsI = Nothing
Set wbO = Nothing
Set wsO = Nothing
End If
Next cell
Rows("2:97").EntireRow.Delete (xlUp)
End Sub
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다