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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос Excel для поиска по всей книге кроме последнего листа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос Excel для поиска по всей книге кроме последнего листа (Макросы Sub)
Макрос Excel для поиска по всей книге кроме последнего листа
Centuriy Дата: Понедельник, 07.10.2013, 08:59 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе время всем!
Недавно в бухгалтерии попросили помочь с формированием и обработкой отчетов.
Так вот, есть книга excel, в ней есть n-ное количество листов (более 300) и последний лист "итоги".
В листе "итоги" таблица с инвентаризационными номерами и количеством материалов в каждом. В листах "Лист 1",
"Лист 2", "Лист 3",... "Лист n" содержатся точно такиеже таблицы как и в листе "итоги" только количество записей
в каждой по 20 строк.
Количество материалов в листе "итоги" вводится в ручную. А задача состоит в том что после запуска макроса макрос должен перебирать
таблицу итоги по порядку, искать соответствующий инвентаризационный номер в книге
(поиск производется во всей книге, кроме листа "итоги"), и если найдется вводить количество
в найденной таблице.

Прототип книги прилагается.

Вот мои попытки:

[vba]
Код
Sub Макрос11()
Dim rr As Range, k As Integer, j As Integer
k = Sheets("итоги").UsedRange.Rows.Count
Sheets("итоги").Select
Range("B2").Select
For j = 2 To k Step 1
Range("B" & j).Select
Set rr = Cells.Find(What:=Sheets("итоги").Cells(j, 2).Value, SearchDirection:=xlNext)
If Not rr Is Nothing And rr.Column = 1 Then
rr.Offset(, 5).Value = Sheets("итоги").Cells(j, 3).Value
End If
Next j
End Sub
[/vba]

но только поиск тут пропочемуто проводится не по книге а по листу.
Также нужен диапозон поиска но как это все реализовать?
Если есть возможность, пожалуйста помогите с советами.
К сообщению приложен файл: test.xlsx (14.6 Kb)
 
Ответить
СообщениеДоброе время всем!
Недавно в бухгалтерии попросили помочь с формированием и обработкой отчетов.
Так вот, есть книга excel, в ней есть n-ное количество листов (более 300) и последний лист "итоги".
В листе "итоги" таблица с инвентаризационными номерами и количеством материалов в каждом. В листах "Лист 1",
"Лист 2", "Лист 3",... "Лист n" содержатся точно такиеже таблицы как и в листе "итоги" только количество записей
в каждой по 20 строк.
Количество материалов в листе "итоги" вводится в ручную. А задача состоит в том что после запуска макроса макрос должен перебирать
таблицу итоги по порядку, искать соответствующий инвентаризационный номер в книге
(поиск производется во всей книге, кроме листа "итоги"), и если найдется вводить количество
в найденной таблице.

Прототип книги прилагается.

Вот мои попытки:

[vba]
Код
Sub Макрос11()
Dim rr As Range, k As Integer, j As Integer
k = Sheets("итоги").UsedRange.Rows.Count
Sheets("итоги").Select
Range("B2").Select
For j = 2 To k Step 1
Range("B" & j).Select
Set rr = Cells.Find(What:=Sheets("итоги").Cells(j, 2).Value, SearchDirection:=xlNext)
If Not rr Is Nothing And rr.Column = 1 Then
rr.Offset(, 5).Value = Sheets("итоги").Cells(j, 3).Value
End If
Next j
End Sub
[/vba]

но только поиск тут пропочемуто проводится не по книге а по листу.
Также нужен диапозон поиска но как это все реализовать?
Если есть возможность, пожалуйста помогите с советами.

Автор - Centuriy
Дата добавления - 07.10.2013 в 08:59
Матраскин Дата: Понедельник, 07.10.2013, 09:26 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
но только поиск тут пропочемуто проводится не по книге а по листу.

Вам нужен цикл по листам :
[vba]
Код
For i = 1 To n Step 1
     Sheets(i).Cells(1, 1) = 1
Next
[/vba]


в интернете опять кто-то не прав
 
Ответить
Сообщение
но только поиск тут пропочемуто проводится не по книге а по листу.

Вам нужен цикл по листам :
[vba]
Код
For i = 1 To n Step 1
     Sheets(i).Cells(1, 1) = 1
Next
[/vba]

Автор - Матраскин
Дата добавления - 07.10.2013 в 09:26
SkyPro Дата: Понедельник, 07.10.2013, 10:25 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub fnd()
Application.ScreenUpdating = False
Dim rCell As Range, lRow&, sh As Worksheet, sRange$, rRange As Range
      For Each sh In ThisWorkbook.Worksheets
          If sh.Name <> "Итог" Then
              Set rRange = sh.Cells.Find(What:="инв", After:=ActiveCell, LookIn:=xlValues, LookAt _
          :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
      If Not rRange Is Nothing Then
                  sRange = sh.Cells(rRange.Row + 1, rRange.Column).Address
          For Each rCell In sh.Range(sRange & ":$B$" & sh.Cells(1048576, rRange.Column).End(xlUp).Row)
              If rCell.Value <> "" Then
                  lRow = Sheets("Итог").Range("B1048576").End(xlUp).Row + 1
                  Sheets("Итог").Range("B" & lRow).Value = rCell.Value
                  Sheets("Итог").Range("B" & lRow).Offset(0, 1).Value = rCell.Offset(0, 2).Value
              End If
          Next
      End If
          End If
      Next
      Set rRange = Nothing
Application.ScreenUpdating = True
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Понедельник, 07.10.2013, 10:27
 
Ответить
Сообщение[vba]
Код
Sub fnd()
Application.ScreenUpdating = False
Dim rCell As Range, lRow&, sh As Worksheet, sRange$, rRange As Range
      For Each sh In ThisWorkbook.Worksheets
          If sh.Name <> "Итог" Then
              Set rRange = sh.Cells.Find(What:="инв", After:=ActiveCell, LookIn:=xlValues, LookAt _
          :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
      If Not rRange Is Nothing Then
                  sRange = sh.Cells(rRange.Row + 1, rRange.Column).Address
          For Each rCell In sh.Range(sRange & ":$B$" & sh.Cells(1048576, rRange.Column).End(xlUp).Row)
              If rCell.Value <> "" Then
                  lRow = Sheets("Итог").Range("B1048576").End(xlUp).Row + 1
                  Sheets("Итог").Range("B" & lRow).Value = rCell.Value
                  Sheets("Итог").Range("B" & lRow).Offset(0, 1).Value = rCell.Offset(0, 2).Value
              End If
          Next
      End If
          End If
      Next
      Set rRange = Nothing
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 07.10.2013 в 10:25
anvg Дата: Понедельник, 07.10.2013, 10:35 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Centuriy
Если решение от SkyPro подойдёт, то не забудьте отписаться и на форуме sql ru
 
Ответить
СообщениеCenturiy
Если решение от SkyPro подойдёт, то не забудьте отписаться и на форуме sql ru

Автор - anvg
Дата добавления - 07.10.2013 в 10:35
SkyPro Дата: Понедельник, 07.10.2013, 10:36 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
И на будущее указывайте, если создали аналогичные темы на других форумах.


skypro1111@gmail.com
 
Ответить
СообщениеИ на будущее указывайте, если создали аналогичные темы на других форумах.

Автор - SkyPro
Дата добавления - 07.10.2013 в 10:36
Centuriy Дата: Понедельник, 07.10.2013, 11:54 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SkyPro,
спасибо за быстрый ответ, но это что-то не то...
пожалуйста объясните что делает этот макрос... он ищет слово "инв"? и что оно возвращает при нахождении?
а можно сделать так, чтобы при нахождении совпадений он вставлял данные с столбца количество (лист "итог") на аналогичный столбец в других листах?
[moder]Centuriy, не нужно полностью цитировать сообщения, отвечать можно и без цитат[/moder]
 
Ответить
СообщениеSkyPro,
спасибо за быстрый ответ, но это что-то не то...
пожалуйста объясните что делает этот макрос... он ищет слово "инв"? и что оно возвращает при нахождении?
а можно сделать так, чтобы при нахождении совпадений он вставлял данные с столбца количество (лист "итог") на аналогичный столбец в других листах?
[moder]Centuriy, не нужно полностью цитировать сообщения, отвечать можно и без цитат[/moder]

Автор - Centuriy
Дата добавления - 07.10.2013 в 11:54
SkyPro Дата: Понедельник, 07.10.2013, 12:01 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Видимо я не правильно понял суть задачи.
Этот макрос перебирает все листы, ищет заголовок "инв", и копирует данные в итоговый лист.


skypro1111@gmail.com
 
Ответить
СообщениеВидимо я не правильно понял суть задачи.
Этот макрос перебирает все листы, ищет заголовок "инв", и копирует данные в итоговый лист.

Автор - SkyPro
Дата добавления - 07.10.2013 в 12:01
SkyPro Дата: Понедельник, 07.10.2013, 12:13 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Вариант с UDF и макросом:
К сообщению приложен файл: fnd.xlsm (23.8 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеВариант с UDF и макросом:

Автор - SkyPro
Дата добавления - 07.10.2013 в 12:13
SkyPro Дата: Понедельник, 07.10.2013, 12:14 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Macro:[vba]
Код
Sub fnd()
On Error Resume Next
Dim rcell As Range, lRow&, i&
lRow = Sheets("итог").Range("b1048576").End(xlUp).Row
For Each rcell In Sheets("итог").Range("b2:b" & lRow)
      If rcell.Value <> "" Then
          For i = 1 To Sheets.Count
              If Not Sheets(i).Name = "итог" Then
                  rcell.Offset(0, 1).Value = Sheets(i).Cells.Find(What:=rcell.Value, After:=ActiveCell, LookIn:=xlValues, LookAt _
                  :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(0, 2).Value
              End If
          Next
      End If
Next
End Sub
[/vba]

UDF:
[vba]
Код
Function fndval(rcell As Range) As Double
On Error Resume Next
Dim i&
      If rcell.Value <> "" Then
          For i = 1 To Sheets.Count
              If Not Sheets(i).Name = "итог" Then
                  fndval = Sheets(i).Cells.Find(What:=rcell.Value, After:=ActiveCell, LookIn:=xlValues, LookAt _
                  :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(0, 2).Value
              End If
          Next
      End If
End Function
[/vba]

[offtop]Прошу прощения, что не поместил все в один пост. Завтыкал :).


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Понедельник, 07.10.2013, 12:16
 
Ответить
СообщениеMacro:[vba]
Код
Sub fnd()
On Error Resume Next
Dim rcell As Range, lRow&, i&
lRow = Sheets("итог").Range("b1048576").End(xlUp).Row
For Each rcell In Sheets("итог").Range("b2:b" & lRow)
      If rcell.Value <> "" Then
          For i = 1 To Sheets.Count
              If Not Sheets(i).Name = "итог" Then
                  rcell.Offset(0, 1).Value = Sheets(i).Cells.Find(What:=rcell.Value, After:=ActiveCell, LookIn:=xlValues, LookAt _
                  :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(0, 2).Value
              End If
          Next
      End If
Next
End Sub
[/vba]

UDF:
[vba]
Код
Function fndval(rcell As Range) As Double
On Error Resume Next
Dim i&
      If rcell.Value <> "" Then
          For i = 1 To Sheets.Count
              If Not Sheets(i).Name = "итог" Then
                  fndval = Sheets(i).Cells.Find(What:=rcell.Value, After:=ActiveCell, LookIn:=xlValues, LookAt _
                  :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(0, 2).Value
              End If
          Next
      End If
End Function
[/vba]

[offtop]Прошу прощения, что не поместил все в один пост. Завтыкал :).

Автор - SkyPro
Дата добавления - 07.10.2013 в 12:14
Centuriy Дата: Понедельник, 07.10.2013, 15:49 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SkyPro, Спасибо! Всё работает как надо!
 
Ответить
СообщениеSkyPro, Спасибо! Всё работает как надо!

Автор - Centuriy
Дата добавления - 07.10.2013 в 15:49
Nast_na Дата: Среда, 24.09.2014, 14:21 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, мне бы очень пригодился этот макрос в работе, но только в более усложненном варианте. помогите, пожалуйста, а то мне самой никак.
В "Свод" таблица должна собираться информация согласно кода по столбцу В из остальных листов в столбцы, выделенные оранжевым цветом, с разбивкой по месяцам и видам имущества. Спасибо!
 
Ответить
СообщениеЗдравствуйте, мне бы очень пригодился этот макрос в работе, но только в более усложненном варианте. помогите, пожалуйста, а то мне самой никак.
В "Свод" таблица должна собираться информация согласно кода по столбцу В из остальных листов в столбцы, выделенные оранжевым цветом, с разбивкой по месяцам и видам имущества. Спасибо!

Автор - Nast_na
Дата добавления - 24.09.2014 в 14:21
Nast_na Дата: Среда, 24.09.2014, 14:21 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
К сообщению приложен файл: 6361065.xlsx (51.1 Kb)
 
Ответить
Сообщениесам файл
[moder]Не безобразничайте

Автор - Nast_na
Дата добавления - 24.09.2014 в 14:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос Excel для поиска по всей книге кроме последнего листа (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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