Я, по сути, пытаюсь нарезать мой файл «master 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, а затем перейти к первой строке с новым номером».
Любая помощь будет принята с благодарностью!