Sub Свод() Dim wS As Worksheet Dim sN1 As String Dim strEnd1 As Long, strEnd2 As Long
If ActiveWorkbook.Worksheets.Count < 2 Then Exit Sub For Each wS In ActiveWorkbook.Worksheets If wS.Name = "Свод" Then MsgBox "Уже есть сводный лист!" Exit Sub End If Next wS
For Each wS In ActiveWorkbook.Worksheets If (wS.Name <> "Свод") And (wS.Name <> sN1) Then strEnd2 = wS.Cells(wS.Rows.Count, 1).End(xlUp).Row wS.Rows("1:" & strEnd2).Copy Sheets("Свод").Rows(strEnd1 + 1) strEnd1 = strEnd1 + strEnd2 End If Next wS
End Sub
[/vba]
Макрос будет обрабатывать активную книгу. Если активная будет не та, в которой он лежит - свою не тронет. Макрос вставит лист "Свод". Если такой уже есть, не станет работать, оповестив об этом. На лист "Свод" вставит со всех листов активной книги, по первому столбцу определив конец данных.
Запускать - "Alt"+"F8", затем выбрать нужный макрос и нажать "Выполнить". Файл с макросом при этом должен быть открыт. Чтобы посмотреть текст макроса вместо "Выполнить" можно нажать "Изменить". Самостоятельно перейти в окно VBA, можно нажав "Alt"+"F11".
Если работать будет долго, можно ускорять, внедрив в него отключение пересчета и прорисовки экрана. На форуме можно найти, в справке.
Удачи в дивном новом мире!!!
Вот простенький: [vba]
Код
Sub Свод() Dim wS As Worksheet Dim sN1 As String Dim strEnd1 As Long, strEnd2 As Long
If ActiveWorkbook.Worksheets.Count < 2 Then Exit Sub For Each wS In ActiveWorkbook.Worksheets If wS.Name = "Свод" Then MsgBox "Уже есть сводный лист!" Exit Sub End If Next wS
For Each wS In ActiveWorkbook.Worksheets If (wS.Name <> "Свод") And (wS.Name <> sN1) Then strEnd2 = wS.Cells(wS.Rows.Count, 1).End(xlUp).Row wS.Rows("1:" & strEnd2).Copy Sheets("Свод").Rows(strEnd1 + 1) strEnd1 = strEnd1 + strEnd2 End If Next wS
End Sub
[/vba]
Макрос будет обрабатывать активную книгу. Если активная будет не та, в которой он лежит - свою не тронет. Макрос вставит лист "Свод". Если такой уже есть, не станет работать, оповестив об этом. На лист "Свод" вставит со всех листов активной книги, по первому столбцу определив конец данных.
Запускать - "Alt"+"F8", затем выбрать нужный макрос и нажать "Выполнить". Файл с макросом при этом должен быть открыт. Чтобы посмотреть текст макроса вместо "Выполнить" можно нажать "Изменить". Самостоятельно перейти в окно VBA, можно нажав "Alt"+"F11".
Если работать будет долго, можно ускорять, внедрив в него отключение пересчета и прорисовки экрана. На форуме можно найти, в справке.
Public Sub main() Dim wb As Workbook Dim oDict As Object Dim i As Long, rowLast& Dim strPath As String Dim unoSh Const fName = "прайс.xlsx"
Set oDict = CreateObject("Scripting.Dictionary") strPath = ThisWorkbook.Path & "\" & fName Workbooks.Open Filename:=strPath, ReadOnly:=True Set wb = Application.ActiveWorkbook ThisWorkbook.Activate With wb For Each unoSh In .Worksheets With unoSh Application.StatusBar = "Обрабатываем лист " & unoSh.Name rowLast = .Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To rowLast If .Cells(i, 1).Value <> "" Then If Not oDict.exists(.Cells(i, 1).Value) Then oDict(.Cells(i, 1).Value) = .Cells(i, 2).Value End If End If Next i End With Next wb.Close End With
With ThisWorkbook.ActiveSheet rowLast = .Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To rowLast If oDict.exists(.Cells(i, 1).Value) Then .Cells(i, 2).Value = oDict(.Cells(i, 1).Value) Else .Cells(i, 2).Value = "-||-" End If Next i End With
Application.StatusBar = False
End Sub
[/vba] имя книги с прайсом указывается в макросе, сейчас это, кто бы мог подумать, прайс.xlsx. И оный прайс должен лежать в одной папке с обработчиком.
Как-то так [vba]
Код
Option Explicit
Public Sub main() Dim wb As Workbook Dim oDict As Object Dim i As Long, rowLast& Dim strPath As String Dim unoSh Const fName = "прайс.xlsx"
Set oDict = CreateObject("Scripting.Dictionary") strPath = ThisWorkbook.Path & "\" & fName Workbooks.Open Filename:=strPath, ReadOnly:=True Set wb = Application.ActiveWorkbook ThisWorkbook.Activate With wb For Each unoSh In .Worksheets With unoSh Application.StatusBar = "Обрабатываем лист " & unoSh.Name rowLast = .Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To rowLast If .Cells(i, 1).Value <> "" Then If Not oDict.exists(.Cells(i, 1).Value) Then oDict(.Cells(i, 1).Value) = .Cells(i, 2).Value End If End If Next i End With Next wb.Close End With
With ThisWorkbook.ActiveSheet rowLast = .Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To rowLast If oDict.exists(.Cells(i, 1).Value) Then .Cells(i, 2).Value = oDict(.Cells(i, 1).Value) Else .Cells(i, 2).Value = "-||-" End If Next i End With
Application.StatusBar = False
End Sub
[/vba] имя книги с прайсом указывается в макросе, сейчас это, кто бы мог подумать, прайс.xlsx. И оный прайс должен лежать в одной папке с обработчиком.Udik