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

Узнай цену своей работы

Формулировка задачи:

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

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

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Sub Ïîèñê_ГўГ®_ГўГ±ГҐГµ_ГґГ*éëГ*Гµ()
  4. Dim iShtName$, iPath$, iFileName$, firstAddress$
  5. Dim iSheet As Worksheet, iFoundSht As Worksheet
  6. Dim iTempWB As Workbook, iBazaWB As Workbook
  7. Dim TextToFind As Variant, iFoundRng As Range
  8. Dim FD As FileDialog, iLastRow&
  9. Dim FoundAny As Boolean
  10.  
  11.     TextToFind = Application.InputBox("Ââåäèòå ГІГҐГЄГ±ГІ äëÿ ïîèñêГ*:", "Ïîèñê")
  12.     If TextToFind = "" Or TextToFind = False Then Exit Sub
  13.     TextToFind = Trim(TextToFind)
  14.     Set FD = Application.FileDialog(msoFileDialogFilePicker)
  15.     With FD
  16.         .AllowMultiSelect = False
  17.         .Title = "ÓêГ*æèòå ëþáîé ГґГ*éë Гў ГЇГ*ГЇГЄГҐ"
  18.         .ButtonName = "ÂûáðГ*ГІГј ГЇГ*ГЇГЄГі"
  19.         If .Show = False Then Exit Sub Else iPath = Mid(.SelectedItems(1), 1, InStrRev(.SelectedItems(1), "\"))
  20.     End With
  21.     Set FD = Nothing
  22.     Workbooks.Add
  23.     Sheets.Add.Name = "Ïîèñê"
  24.     Set iFoundSht = ActiveSheet
  25.     iFoundSht.Cells(1, 1) = "Èùåì: " & TextToFind
  26.     iFoundSht.Cells(1, 1).Font.Bold = True
  27.     With Application
  28.         .ScreenUpdating = False
  29.         .Calculation = xlManual
  30.         .StatusBar = "Èä¸ò ïîèñê..."
  31.         .ShowWindowsInTaskbar = False
  32.         iFileName = Dir(iPath & "*.xls")
  33.         Do While iFileName$ <> ""
  34.             Set iTempWB = Workbooks.Open(Filename:=iPath & iFileName, UpdateLinks:=False, ReadOnly:=True)
  35.             For Each iSheet In iTempWB.Sheets
  36.                 If iSheet.FilterMode = True Then iSheet.ShowAllData
  37.                 Set iFoundRng = iSheet.Cells.Find(What:=TextToFind, LookIn:=xlFormulas, LookAt:=xlPart)
  38.                 If Not iFoundRng Is Nothing Then
  39.                     FoundAny = True
  40.                     firstAddress = iFoundRng.Address
  41.                     Do
  42.                         With iFoundSht
  43.                             iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  44.                             If iLastRow = 1 Then iLastRow = 2
  45.                             If iShtName <> iSheet.Name Then    'åñëè Г*îâûé ГґГ*éë
  46.                                With .Cells(iLastRow + 2, 1)
  47.                                     .Value = "Г”Г*éë: " & iTempWB.Name & ", Ëèñò: " & iSheet.Name
  48.                                     .Font.Bold = True
  49.                                 End With
  50.                             End If
  51.                             iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)    'êîïèðóåì ГўГ±Гѕ ñòðîêó
  52.                            iShtName = iSheet.Name
  53.                         End With
  54.                         Set iFoundRng = iSheet.Cells.FindNext(iFoundRng)
  55.                     Loop While iFoundRng.Address <> firstAddress
  56.                 Else
  57.                 End If
  58.             Next
  59.             iTempWB.Close SaveChanges:=False
  60.             iFileName = Dir
  61.         Loop
  62.         .StatusBar = False
  63.         .ShowWindowsInTaskbar = True
  64.         .EnableEvents = True
  65.         .Calculation = xlCalculationAutomatic
  66.         .ScreenUpdating = True
  67.     End With
  68.     If FoundAny = False Then
  69.         MsgBox "Г’ГҐГЄГ±ГІ '" & TextToFind & "' Г*ГЁ Гў îäГ*îì ГЁГ§ ГґГ*éëîâ Гў ГЇГ*ГЇГЄГҐ:" & Chr(10) & iPath & Chr(10) & " Г*ГҐ áûë Г*Г*éäåГ*!", 48, "ГЋГІГ·ВёГІ"
  70.         iFoundSht.Parent.Close SaveChanges:=False
  71.         Exit Sub
  72.     End If
  73.     MsgBox "Ïîèñê " & TextToFind & " Г§Г*âåðø¸Г*!", 64, "Ïîèñê"
  74. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы