Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск и подстановка данных из книги - Страница 2 - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 2 из 2«12
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поиск и подстановка данных из книги (Формулы/Formulas)
Поиск и подстановка данных из книги
Perfect2You Дата: Среда, 02.08.2017, 16:42 | Сообщение № 21
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 234
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Вот простенький:
[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

sN1 = ActiveWorkbook.Worksheets(1).Name
ActiveWorkbook.Worksheets(1).Copy Before:=ActiveWorkbook.Sheets(1)
ActiveSheet.Name = "Свод"
strEnd1 = Sheets("Свод").Cells(Sheets("Свод").Rows.Count, 1).End(xlUp).Row

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".

Если работать будет долго, можно ускорять, внедрив в него отключение пересчета и прорисовки экрана. На форуме можно найти, в справке.

Удачи в дивном новом мире!!!
К сообщению приложен файл: _7720387.xlsm(20Kb)
 
Ответить
СообщениеВот простенький:
[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

sN1 = ActiveWorkbook.Worksheets(1).Name
ActiveWorkbook.Worksheets(1).Copy Before:=ActiveWorkbook.Sheets(1)
ActiveSheet.Name = "Свод"
strEnd1 = Sheets("Свод").Cells(Sheets("Свод").Rows.Count, 1).End(xlUp).Row

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".

Если работать будет долго, можно ускорять, внедрив в него отключение пересчета и прорисовки экрана. На форуме можно найти, в справке.

Удачи в дивном новом мире!!!

Автор - Perfect2You
Дата добавления - 02.08.2017 в 16:42
Udik Дата: Среда, 02.08.2017, 17:01 | Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 1589
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Как-то так
[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. И оный прайс должен лежать в одной папке с обработчиком.
К сообщению приложен файл: 9338458.xlsm(19Kb) · 4749467.xlsx(11Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Среда, 02.08.2017, 17:13
 
Ответить
СообщениеКак-то так
[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
Дата добавления - 02.08.2017 в 17:01
InExSu Дата: Среда, 02.08.2017, 19:14 | Сообщение № 23
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 22 ±
Замечаний: 60% ±

Excel 2010
Как написать макрос

Уже написали
 
Ответить
Сообщение
Как написать макрос

Уже написали

Автор - InExSu
Дата добавления - 02.08.2017 в 19:14
L-e-n-o-k Дата: Четверг, 03.08.2017, 09:38 | Сообщение № 24
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2000 и ранее
Спасибо всем большущее
 
Ответить
СообщениеСпасибо всем большущее

Автор - L-e-n-o-k
Дата добавления - 03.08.2017 в 09:38
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поиск и подстановка данных из книги (Формулы/Formulas)
Страница 2 из 2«12
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!