Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Макрос для поиска позиций и вывода на лист поиска

Автор mrf, 11.03.2012, 14:59

« назад - далее »

mrf

Здравствуйте!
Нужен макрос или пример макроса для поиска позиции следующего вида:
1. на листе "поиск" вводим в ячейку А1 артикул для поиска.
2. нажимаем кнопку поиск.
3. поиск идет по всем листам книги: на 1листе в столбцах СD, на 2-4 листах в столбцах DE, на 5листе в столбцах CD.

Вывод результата на лист "поиск" полностью строки из др. листов, содержащей искомое значение. Т.е. должен быть написан "лист " на котором нашлось это значение; ниже строки содержащие данное значение; потом следующий лист.. и т.д.

Есть начало макроса, но сколько не пробывал его дописать, при запуске выходит ошибка Эксплорера и Эксель перезапускается...

Огромное спасибо, если поможете!


Sub SearchAll()
Dim sh As Worksheet, rg As Range, rgs As Range, r1 As Long, r2 As Long, r As Long, rfs As Integer
Dim c1 As Long, c2 As Long, c As Long, c0 As Long, ca As Long, s As String
Cells.EntireRow.AutoFit: On Error Resume Next
rfs = Application.ReferenceStyle: Application.ReferenceStyle = xlR1C1
With ActiveSheet.Outline: .AutomaticStyles = False: .SummaryRow = xlAbove: End With
With ActiveSheet.UsedRange.SpecialCells(xlLastCell)
If .Row > 3 Then Set rg = Range(Cells(3, 1), Cells(.Row, .Column)): _
rg.ClearContents: rg.ClearFormats: Rows.Ungroup: If Err.Number > 0 Then Err.Clear
End With: r2 = 2
For Each sh In Sheets: With sh
r1 = r2
If .Index <> ActiveSheet.Index Then
For i = 1 To 2
c = WorksheetFunction.Match(Cells(i, 1), .Rows(1), 0)
If Err.Number = 0 Then
For c1 = 2 To Cells(i, 1).End(xlToRight).Column
r = 1: Do
r = r + WorksheetFunction.Match(Cells(i, c1), .Range(.Cells(r + 1, c), .Cells(.Rows.Count, c)), 0)
If r1 <> r2 And i = 2 Then ca = WorksheetFunction.Match(Cells(3 - i, 1), Rows(r1 + 1), 0)
If Err.Number = 0 Then

Wasilic

Цитата: mrf от 11.03.2012, 14:59
Нужен макрос или пример макроса для поиска позиции следующего вида:
1. на листе "поиск" вводим в ячейку А1 артикул для поиска.
2. нажимаем кнопку поиск.
3. поиск идет по всем листам книги: на 1листе в столбцах СD, на 2-4 листах в столбцах DE, на 5листе в столбцах CD.
Вот такой (один из множества) пример макроса.
Со списка считываются имена листов и номера столбцов для поиска артикула. Только не понятно, зачем поиск по 2-м столбцам - CD, DE
если условие одно - артикул.
Разбирайтесь.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

mrf

Здравствуйте!
Номер столбца нужен, чтобы искать, например, не только по артикулу, а также по описанию, серийному номеру и т.п.
Запустил Ваш макрос, по артикулу ищет все идеально и выводит тоже. Но столкнулся с проблемой:
ввожу описание (description), соответственно меняю столбец для поиска. Для числовых значений - посик и копирование ячеек производится, но там, где значение текстовое - результат=0.
Подскажите. плз, в чем может быть проблема?
Спасибо!

Wasilic

#3
Цитата: mrf от 14.03.2012, 10:35
Здравствуйте!
по артикулу ищет все идеально и выводит тоже. Но столкнулся с проблемой:
Для числовых значений - посик и копирование ячеек производится, но там, где значение текстовое - результат=0.
Подскажите. плз, в чем может быть проблема?
А проблема в том, что артикул 2 в одной таблице как число, а в другой как текст, вот я и перевел текстовое значение в число и если оно не соответствует числу, выдается 0.
Надо было изначально определиться, каким он увас будет.
Переделал
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

mrf