Для работы мне необходимо создавать много Excel файлов по шаблону, но с некоторыми отличными данными. В одном таком Excel файле есть несколько листов, которые так же создаются по шаблону и имеют некоторые различные данные. В данный момент я создал шаблон файла, где на 1ом листе вписываю все данные, которые автоматически заполняются по остальным листам. Но так же есть данные, которые необходимо взять из Базы данных. На 1ом листе я пишу № пункта из этой базы данных и далее через формулу ЕСЛИМН в ячейках возвращаются нужные мне данные из Базы данных. Таким образом, по каждому файлу приходится работать отдельно. Я бы хотел сделать 1 общий файл Excel, в котором бы прописывал все данные и № пунктов из БАзы данных, после чего, по "нажатию кнопки" создавались бы листы Excel, где все было бы уже заполнено. Здесь уже формулами не обойтись, нужно использовать VBA. Может ли кто нибудь, пожалуйста, помочь с решением этой проблемы. То есть описать принцип, по которому я бы мог самостоятельно всё это сделать.
Прикрепляю примеры (условные), как у меня это сделано сейчас. 2 файла, каждый в 2х форматах (2019 и 2003)
Здравствуйте всем.
Для работы мне необходимо создавать много Excel файлов по шаблону, но с некоторыми отличными данными. В одном таком Excel файле есть несколько листов, которые так же создаются по шаблону и имеют некоторые различные данные. В данный момент я создал шаблон файла, где на 1ом листе вписываю все данные, которые автоматически заполняются по остальным листам. Но так же есть данные, которые необходимо взять из Базы данных. На 1ом листе я пишу № пункта из этой базы данных и далее через формулу ЕСЛИМН в ячейках возвращаются нужные мне данные из Базы данных. Таким образом, по каждому файлу приходится работать отдельно. Я бы хотел сделать 1 общий файл Excel, в котором бы прописывал все данные и № пунктов из БАзы данных, после чего, по "нажатию кнопки" создавались бы листы Excel, где все было бы уже заполнено. Здесь уже формулами не обойтись, нужно использовать VBA. Может ли кто нибудь, пожалуйста, помочь с решением этой проблемы. То есть описать принцип, по которому я бы мог самостоятельно всё это сделать.
Прикрепляю примеры (условные), как у меня это сделано сейчас. 2 файла, каждый в 2х форматах (2019 и 2003)NoNameLogin
NoNameLogin, приветствую! можно например так (подразумевается положение ячеек на первом листе так же как и в примере): [vba]
Код
Sub РазнестиПоЛистам() Dim arr, i, j, lr, title, sht As Worksheet With ThisWorkbook.Worksheets("Данные") lr = .Cells(.Rows.Count, 2).End(xlUp).Row arr = .Range(.Cells(4, 2), .Cells(5, lr)): title = .Range("C3:E3") End With For i = LBound(arr, 1) To UBound(arr, 1) Set sht = ThisWorkbook.Worksheets.Add(after:=Sheets(Sheets.Count)) sht.Name = arr(i, 1): lr = 3 With sht .Cells(2, 4).Resize(1, UBound(title, 2)) = title For j = 2 To UBound(arr, 2) .Cells(3, lr + 1) = arr(i, j): lr = lr + 1 Next j End With Next i End Sub
[/vba]
NoNameLogin, приветствую! можно например так (подразумевается положение ячеек на первом листе так же как и в примере): [vba]
Код
Sub РазнестиПоЛистам() Dim arr, i, j, lr, title, sht As Worksheet With ThisWorkbook.Worksheets("Данные") lr = .Cells(.Rows.Count, 2).End(xlUp).Row arr = .Range(.Cells(4, 2), .Cells(5, lr)): title = .Range("C3:E3") End With For i = LBound(arr, 1) To UBound(arr, 1) Set sht = ThisWorkbook.Worksheets.Add(after:=Sheets(Sheets.Count)) sht.Name = arr(i, 1): lr = 3 With sht .Cells(2, 4).Resize(1, UBound(title, 2)) = title For j = 2 To UBound(arr, 2) .Cells(3, lr + 1) = arr(i, j): lr = lr + 1 Next j End With Next i End Sub