12 / 12 / 4
Регистрация: 16.03.2012
Сообщений: 252
1

Макрос поиска и вывода строк, содержащих значение поиска

16.03.2012, 11:24. Показов 60246. Ответов 101
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть макрос для поиска значения из ячейки А1 по всему листу и копированием строк из всех листов, содержащих это значение.
Но есть и проблема: макрос поиска ищет только цифровые значения из указанной ячейки. Текстовые или смешанные не находит.
Если знаете как подправить, помогите плз!!!
Вот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Sub SearchPN()
  Dim iCopi As Range
  Dim iPast As Range
  AR = Range("A1")   'значение для поиска
  SZ = 15
  PS = Cells(Rows.Count, 1).End(xlUp).Row
  Rows("15:" & PS).Delete Shift:=xlUp
  For I = 3 To 9
    IL = Cells(I, 5) 'номер листа
    KL = Cells(I, 6) 'номер столбца
    Cells(SZ, 2) = IL
    SZ = SZ + 1
    Set iCopi = Worksheets(IL).Range("A1:AD1")
    Set iPast = Worksheets("SEARCH").Range("A" & SZ)
    iCopi.Copy iPast
    SZ = SZ + 1
    PS = Sheets(IL).Cells(Rows.Count, KL).End(xlUp).Row
    For J = 2 To PS
      R = Val(Sheets(IL).Cells(J, KL))
      If Val(Sheets(IL).Cells(J, KL)) = AR Then
         Set iCopi = Worksheets(IL).Range("A" & J & ":AD" & J)
         Set iPast = Worksheets("SEARCH").Range("A" & SZ)
         iCopi.Copy iPast
         SZ = SZ + 1
      End If
    Next J
    SZ = SZ + 1
  Next I
End Sub
 
 
Sub Add_line()
    '
    ' Add_line Macro
    '
    ' Keyboard Shortcut: Ctrl+q
    '
    With ThisWorkbook.ActiveSheet
        Set iDiapazon = .UsedRange
        With iDiapazon
            nREnd = .Row + .Rows.Count - 1
            nCEnd = .Column + .Columns.Count - 1
        End With
        Set iDiapazon = Nothing
            
        If nREnd < 3 Then: MsgBox "Íå ïðîâåäåíî íè îäíîé îïåðàöèè.", vbInformation + vbOKOnly, "Ñîîáùåíèå ñèñòåìû": Exit Sub
            
'        MsgBox " - ñòðîêà " & nREnd & Chr(10) & " - ñòîëáåö " & nCEnd, vbInformation + vbOKOnly, "Êðàéíèå:"
        
        Rows(nREnd + 1).Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove
        
        Range(.Cells(nREnd, 1), .Cells(nREnd, nCEnd)).Copy
        Range(.Cells(nREnd + 1, 1), .Cells(nREnd + 1, 1)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
 
    End With
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2012, 11:24
Ответы с готовыми решениями:

Макрос поиска вводимого значение и вывода всей строки
Привет! Ломаю голову уже несколько часов... Помогите, пожалуйста, срочно нужно написать что-то...

разработать консольное приложение для ввода с клавиатуры массива строк и поиска среди них строк, содержащих заданный строковый фрагмент.
Помогите пожалуйстааа!!! Не пойму как это сделать на C#. Контрольное задание Необходимо...

Вывод количества строк в файлах, содержащих заданные строки поиска
Создайте командный файл, выводящий количество строк в файлах, содержащие за- данные строки поиска...

Макрос поиска и копирования строк, которые совпадают с искомым значением
Здравствуйте, Нужно сделать макрос, который будет искать значение в таблице и выводить строки...

101
5599 / 1587 / 408
Регистрация: 23.12.2010
Сообщений: 2,370
Записей в блоге: 1
16.03.2012, 13:58 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Замени
Visual Basic
1
2
3
AR = Range("A1")   
' и
If Val(Sheets(IL).Cells(j, KL)) = AR Then
на
Visual Basic
1
2
3
AR = Trim(CStr(Range("A1")))
' и
If InStr(1, CStr(Sheets(IL).Cells(j, KL)), AR) > 0 Then
Если хочешь использовать для поиска символы и коды подстановки "?" , "*", [A-C,d], [1-9,0]
то if такое
Visual Basic
1
If CStr(Sheets(IL).Cells(j, KL)) Like AR  Then
1
12 / 12 / 4
Регистрация: 16.03.2012
Сообщений: 252
16.03.2012, 16:16  [ТС] 3
Огромное спасибо!!
Работает!!!!!!!!!!!!!!!

Добавлено через 1 час 4 минуты
Уважаемый KoGG!
Столкнулся с такой проблемой: Например нужно найти не точное совпадение, а вхождение значения поиска в ячейку массива поиска. Какой строкой и куда это нужно вписать?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
16.03.2012, 20:42 4
Цитата Сообщение от mrf Посмотреть сообщение
Столкнулся с такой проблемой: Например нужно найти не точное совпадение, а вхождение значения поиска в ячейку массива поиска. Какой строкой и куда это нужно вписать?
Visual Basic
1
If Looking_In Like "*" & Looking_For & "*" Then
Где Looking_In - это текст, в котором вы ищите, а Looking_For - это текст, который вы ищите. "*" - это элемент маски поиска Like, означающий 0 и более любых символов. Подробнее про оператор Like можно посмотреть здесь.
1
12 / 12 / 4
Регистрация: 16.03.2012
Сообщений: 252
19.03.2012, 09:13  [ТС] 5
Спасибо
Перечитал несколько раз, и ничего не понял
Т.е. я эту строчку
Visual Basic
1
If CStr(Sheets(IL).Cells(J, KL)) = AR Then
меняю на
Visual Basic
1
If CStr(Sheets(IL).Cells(J, KL)) Looking_in Like & Looking_for Like "AR" Then
Вобщем, я попробывал все вариации... Как эту строчку правильно вписать и куда?
0
Эксперт WindowsАвтор FAQ
18066 / 7669 / 891
Регистрация: 25.12.2011
Сообщений: 11,438
Записей в блоге: 17
19.03.2012, 21:49 6
Visual Basic
1
If CStr(Sheets(IL).Cells(J, KL)) Like "*" & AR & "*" Then
или
Visual Basic
1
If InStr(CStr(Sheets(IL).Cells(j, KL)), AR) <> 0 Then
1
12 / 12 / 4
Регистрация: 16.03.2012
Сообщений: 252
20.03.2012, 10:38  [ТС] 7
Спасибо!
Макрос работает!
облегчило работу на 30% минимум!
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 18:36 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Подскажите, знающие люди. Имеется похожий макрос, который ищет в документах excel необходимое слово и копирует оттуда строку с найденным словом в новый документ. Все работает как положено. Как усовершенствовать макрос, чтобы искал по словосочетанию.

Например, нужно находить прайсовые строки, в которых есть записи "бампер" и "чери" в разных ячейках. По отдельности эти слова ищутся без проблем, а нужно ("бампер and чери" или "чери and бампер"), если вы понимаете о чем я..

код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Explicit
 
Sub Ïîèñê_âî_âñåõ_ôàéëàõ()
Dim iShtName$, iPath$, iFileName$, firstAddress$
Dim iSheet As Worksheet, iFoundSht As Worksheet
Dim iTempWB As Workbook, iBazaWB As Workbook
Dim TextToFind As Variant, iFoundRng As Range
Dim FD As FileDialog, iLastRow&
Dim FoundAny As Boolean
 
    TextToFind = Application.InputBox("Ââåäèòå òåêñò äëÿ ïîèñêà:", "Ïîèñê")
    If TextToFind = "" Or TextToFind = False Then Exit Sub
    TextToFind = Trim(TextToFind)
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    With FD
        .AllowMultiSelect = False
        .Title = "Óêàæèòå ëþáîé ôàéë â ïàïêå"
        .ButtonName = "Âûáðàòü ïàïêó"
        If .Show = False Then Exit Sub Else iPath = Mid(.SelectedItems(1), 1, InStrRev(.SelectedItems(1), "\"))
    End With
    Set FD = Nothing
    Workbooks.Add
    Sheets.Add.Name = "Ïîèñê"
    Set iFoundSht = ActiveSheet
    iFoundSht.Cells(1, 1) = "Èùåì: " & TextToFind
    iFoundSht.Cells(1, 1).Font.Bold = True
    With Application
        .ScreenUpdating = False
        .Calculation = xlManual
        .StatusBar = "Èä¸ò ïîèñê..."
        .ShowWindowsInTaskbar = False
        iFileName = Dir(iPath & "*.xls")
        Do While iFileName$ <> ""
            Set iTempWB = Workbooks.Open(Filename:=iPath & iFileName, UpdateLinks:=False, ReadOnly:=True)
            For Each iSheet In iTempWB.Sheets
                If iSheet.FilterMode = True Then iSheet.ShowAllData
                Set iFoundRng = iSheet.Cells.Find(What:=TextToFind, LookIn:=xlFormulas, LookAt:=xlPart)
                If Not iFoundRng Is Nothing Then
                    FoundAny = True
                    firstAddress = iFoundRng.Address
                    Do
                        With iFoundSht
                            iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                            If iLastRow = 1 Then iLastRow = 2
                            If iShtName <> iSheet.Name Then    'åñëè íîâûé ôàéë
                                With .Cells(iLastRow + 2, 1)
                                    .Value = "Ôàéë: " & iTempWB.Name & ", Ëèñò: " & iSheet.Name
                                    .Font.Bold = True
                                End With
                            End If
                            iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)    'êîïèðóåì âñþ ñòðîêó
                            iShtName = iSheet.Name
                        End With
                        Set iFoundRng = iSheet.Cells.FindNext(iFoundRng)
                    Loop While iFoundRng.Address <> firstAddress
                Else
                End If
            Next
            iTempWB.Close SaveChanges:=False
            iFileName = Dir
        Loop
        .StatusBar = False
        .ShowWindowsInTaskbar = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
    If FoundAny = False Then
        MsgBox "Òåêñò '" & TextToFind & "' íè â îäíîì èç ôàéëîâ â ïàïêå:" & Chr(10) & iPath & Chr(10) & " íå áûë íàéäåí!", 48, "Îò÷¸ò"
        iFoundSht.Parent.Close SaveChanges:=False
        Exit Sub
    End If
    MsgBox "Ïîèñê " & TextToFind & " çàâåðø¸í!", 64, "Ïîèñê"
End Sub
0
1300 / 402 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.08.2012, 19:38 9
re100, выложите образец книги и поясните, что надо сделать.

Примечание: всю книгу не выкладывайте; оставьте в книге столько данных, чтобы можно было понять вашу ситуацию.
0
Эксперт WindowsАвтор FAQ
18066 / 7669 / 891
Регистрация: 25.12.2011
Сообщений: 11,438
Записей в блоге: 17
20.08.2012, 20:35 10
Visual Basic
1
if instr(st,"бампер")<>0 and instr(st,"чери")<>0 then
или так:
Visual Basic
1
if st like "*бампер*чери*" or st like "*чери*бампер*" then
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:09 11
Цитата Сообщение от Dragokas Посмотреть сообщение
Visual Basic
1
if instr(st,"бампер")<>0 and instr(st,"чери")<>0 then
или так:
Visual Basic
1
if st like "*бампер*чери*" or st like "*чери*бампер*" then
Спасибо, не совсем то, что нужно. При запуске макроса открывается окно ввода искомого слова - а по прайсам это может быть и "зеркало geely" и "ручка двери lanos". Нужно, чтобы поиск был по неточному вхождению.

Такой поиск нужен, чтобы получать более точные результаты при подборе запчасти для клиента, вот.
0
1300 / 402 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.08.2012, 22:12 12
re100, выложите фрагмент вашей книги.
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:15 13
Цитата Сообщение от Busine2012 Посмотреть сообщение
re100, выложите образец книги и поясните, что надо сделать.

Примечание: всю книгу не выкладывайте; оставьте в книге столько данных, чтобы можно было понять вашу ситуацию.
Макрос производит поиск введенного слова по всем книгам xls, находящимся в папке. В моем случае это прайсы поставщиков - их около 15. Таким образом, можно найти запчасть по коду, что удобно. Но не у всех запчастей есть код, поэтому иногда нужно искать не по одному слову, а по двум или трем словам.
Если мы введем в форму поиска макроса два слова - бампер chery, то поиск будет искать точное совпадение, а формулировка в строке может быт ь"chery a11 бампер задний".

В общем, нужно получить неточное вхождение ключевого слова.
Могу выложить несколько прайсов, для наглядности.
0
1300 / 402 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.08.2012, 22:16 14
re100, в вашем случае без образца книги, с которой нужно работать, очень долго будут код писать.
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:18 15
Цитата Сообщение от Busine2012 Посмотреть сообщение
re100, выложите фрагмент вашей книги.
вот три прайса, по которым можно вести поиск макросом.
 Комментарий модератора 
Ссылка удалена
0
1300 / 402 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.08.2012, 22:20 16
re100, если вы не хотите выкладывать книгу, то вам надо задавать тогда конкретный вопрос, а у вас целое техническое задание на написание кода.
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:24 17
Цитата Сообщение от Busine2012 Посмотреть сообщение
re100, если вы не хотите выкладывать книгу, то вам надо задавать тогда конкретный вопрос, а у вас целое техническое задание на написание кода.
выложил ссылку. Я надеялся, можно решить это проблемку незначительным допиливанием текущего макроса
0
Апострофф
20.08.2012, 22:33
  #18
 Комментарий модератора 
re100, грузим вложения на форум (скрепка в расширенном режиме редактора сообщения -
выбери файл и не забудь загрузить)
Ссылки на скачку не приветствуются - читайте правила
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:40 19
Приложил макрос.
Вложения
Тип файла: rar Поиск.rar (16.2 Кб, 352 просмотров)
0
0 / 0 / 1
Регистрация: 20.08.2012
Сообщений: 8
20.08.2012, 22:55 20
Цитата Сообщение от Апострофф Посмотреть сообщение
re100, грузим вложения на форум (скрепка в расширенном режиме редактора сообщения -
выбери файл и не забудь загрузить)
Ссылки на скачку не приветствуются - читайте правила
епт, как я их выложу без ссылки, если на форуме ограничение по размеру загружаемых файлов?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2012, 22:55
Помогаю со студенческими работами здесь

Макрос для поиска заполненных строк в таблице и переноса их в другую книгу
Добрый день, хочу попросить помощи знающих, как написать подобный макрос. В общем - то дело в том,...

Запрет вывода строк содержащих значение #Ошибка
Подскажите пожалуйста как в можно в запросе указать такое условие отбора, чтобы строка содержащая...

Как составить рег.выражение для поиска строк, содержащих только буквы, цифры, точки, и подчеркивания
подскажите, пожалуста, как составить рег.выражение для поиска сток, содержащих только буквы, цифры,...

Как доработать макрос для копирования строк из файлов, содержащих определенное значение
Подскажите пожалуйста, следующее: есть макрос для копирования строк из файлов, содержащих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru