У меня есть база данных с длинным списком имен и уникальными значениями, связанными с именами. Что я хочу сделать, так это создать один рабочий лист для каждого человека, а затем скопировать только их данные в указанный диапазон на своем листе, а затем перейти к следующему человеку, скопировать данные на их рабочий лист и т. Д.Извлечение данных из базы данных Excel
Here - это ссылка к примеру рабочего листа (в форме документации Google, заметьте - я фактически использую Excel 2010, а не документы Google).
Я смог создать все листы с помощью следующего кода на новом листе, который я назвал «Сотрудник». Все, что я сделал с этим листом, - это удалить повторяющиеся значения имен, чтобы я мог иметь список всех имен для рабочих листов.
Любая помощь очень ценится. Заранее спасибо.
Sub CreateSheetsFromAList()
Dim nameSource As String 'sheet name where to read names
Dim nameColumn As String 'column where the names are located
Dim nameStartRow As Long 'row from where name starts
Dim nameEndRow As Long 'row where name ends
Dim employeeName As String 'employee name
Dim newSheet As Worksheet
nameSource = "Employee"
nameColumn = "A"
nameStartRow = 1
'find the last cell in use
nameEndRow = Sheets(nameSource).Cells(Rows.Count, nameColumn).End(xlUp).Row
'loop till last row
Do While (nameStartRow <= nameEndRow)
'get the name
employeeName = Sheets(nameSource).Cells(nameStartRow, nameColumn)
'remove any white space
employeeName = Trim(employeeName)
' if name is not equal to ""
If (employeeName <> vbNullString) Then
On Error Resume Next 'do not throw error
Err.Clear 'clear any existing error
'if sheet name is not present this will cause error that we are going to leverage
Sheets(employeeName).Name = employeeName
If (Err.Number > 0) Then
'sheet was not there, so it create error, so we can create this sheet
Err.Clear
On Error GoTo -1 'disable exception so to reuse in loop
'add new sheet
Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count))
'rename sheet
newSheet.Name = employeeName
'paste training material
Sheets(employeeName).Cells(1, "A").PasteSpecial
Application.CutCopyMode = False
End If
End If
nameStartRow = nameStartRow + 1 'increment row
Loop
End Sub
Так в чем же проблема? –
В моем фактическом документе у меня есть более 200 отдельных имен, около 200 строк данных для каждого уникального имени. Я ищу способ автоматического выбора всех datapoints для одного имени, вставки их на лист, соответствующий этому имени, а затем перейти к следующему уникальному имени в списке. Выполнение этого вручную (с фильтром по именам) занимает очень много времени и подвержено ошибкам. – user2829172