По сути, я пытаюсь разбить свой «мастер-файл excel» на кучу новых файлов, используя одни и те же данные. Я могу создать новый файл, сделать запись и затем сохранить; однако я не могу добавить несколько записей в один файл. Мне кажется, что я ломаю голову над какой-то базовой логикой кодирования.
Основной файл Excel выглядит следующим образом:
A B C D
1 XXX-01 100 Description1 4
2 XXX-01 104 Description2 2
3 XXX-01 209 Description3 3
4 XXX-02 102 Description4 5
5 XXX-02 355 Description5 1
6 XXX-02 322 Description6 1
7 XXX-02 943 Description7 9
8 XXX-02 231 Description8 4
9 XXX-03 124 Description9 4
10 XXX-03 555 Description10 2
Где A: GroupID B: Part_Number C: Описание D: Количество
Из вышеизложенного я хотел бы создать 3 файла excel (XXX-01, XXX-02, XXX-03), где каждый файл содержит соответствующие данные.
Например, XXX-01.xlsx будет выглядеть следующим образом:
A B C D
1 Item# Part Description Qty
2 1 100 Description1 4
3 2 104 Description2 2
4 3 209 Description3 3
Где строка 1 предназначена для заголовков, одинаковых для каждого файла XXX-##.
Чтобы установить базовый уровень того, где находится мой код: для создания файла вставьте одну строку, но затем закройте и перезапишите предыдущий файл. (Украдено из: Создать, назвать и заполнить новую книгу данными а>)
Sub CreateBooks()
Dim oCell As Excel.Range
Dim oWorkbook As Excel.Workbook
Application.DisplayAlerts = False
For Each oCell In Range("A:A")
If oCell.Value = "" Then Exit For
Set oWorkbook = Workbooks.Add
oWorkbook.Sheets(1).Cells(1, 1).Value = oCell.Offset(0, 1).Value
oWorkbook.Close True, oCell.Value
Next oCell
Application.DisplayAlerts = True
End Sub
Я добавил следующее, чтобы вставить свой путь сохранения в столбец A Мастера:
Dim Path As String
Path = "C:\Users\MyComputer\Documents"
For Each oCell In Range("A:A")
If oCell.Value = "" Then Exit For
oCell.Value = Path & oCell.Value
Next oCell
Моя цель с приведенными ниже правками состояла в том, чтобы повторить цикл for, если ячейка ниже oCell эквивалентна значению oCell. Возможно, здесь больше подойдет цикл Do While; Однако.
Dim Row_Counter As Integer
For Each oCell In Range("A:A")
If oCell.Value = "" Then Exit For
Set oWorkbook = Workbooks.Add
oWorkbook.Sheets(1).Cells(Row_Counter, 2).Value = oCell.Offset(0, 1).Value
oWorkbook.Sheets(1).Cells(Row_Counter, 3).Value = oCell.Offset(0, 2).Value
oWorkbook.Sheets(1).Cells(Row_Counter, 4).Value = oCell.Offset(0, 3).Value
For Each Next_oCell In Range("A:A")
If Next_oCell.Value = oCell.Value Then
Row_Counter = Row_Counter + 1
oWorkbook.Sheets(1).Cells(Row_Counter, 2).Value = Next_oCell.Offset(0, 1).Value
oWorkbook.Sheets(1).Cells(Row_Counter, 3).Value = Next_oCell.Offset(0, 2).Value
oWorkbook.Sheets(1).Cells(Row_Counter, 4).Value = Next_oCell.Offset(0, 3).Value
End If
Next Next_oCell
При этом я все еще получаю только один файл, который перезаписывается. Я думаю, что моя проблема (или, по крайней мере, одна из них) заключается в том, что у меня нет средства сказать: «Пройти все строки с этим значением в столбце A, а затем перейти к первой строке с новым номером».
Любая помощь будет принята с благодарностью!