Excel макрос поиска по книгам

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Sheets("Данные").Select
For y = 1 To Cells.SpecialCells(xlLastCell).Row
    If Cells(y, 1) = "123" Then
        Exit For
    End If
Next y
MsgBox "Нашел в строке: " + CStr(y)

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Sheets("Данные").Select
Set fcell = Columns("A:A").Find("123")
If Not fcell Is Nothing Then
    MsgBox "Нашел в строке: " + CStr(fcell.Row)
End If

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", LookIn:=xlValues)
  Do While Not c Is Nothing
    c.Value = "qwe"
    Set c = .FindNext(c)
  Loop
End With

Обратите внимание: Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .Find("asd", After:=c, lookin:=xlValues)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastCol = Cells.SpecialCells(xlLastCell).Column
Application.FindFormat.Font.Italic = True
With Worksheets(1).Range(Cells(1, 1), Cells(lLastRow, lLastCol))
  Set c = .Find("", SearchFormat:=True)
  Do While Not c Is Nothing
    c.Font.Italic = False
    Set c = .Find("", After:=c, SearchFormat:=True)
  Loop
End With

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

With Application.FindFormat.Font 
  .Name = "Arial" 
  .FontStyle = "Regular" 
  .Size = 10 
End With

Поиск последней заполненной ячейки с помощью Find

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

Set c = Worksheets(1).UsedRange.Find("*", SearchDirection:=xlPrevious)
If Not c Is Nothing Then
  lLastRow = c.Row: lLastCol = c.Column 
Else
  lLastRow = 1: lLastCol = 1
End If
MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

Поиск по шаблону (маске)

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

Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы «т», при этом после этого слова может следовать любой текст.

With Worksheets(1).Cells
  Set c = .Find("т??т*", LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Color = RGB(255, 0, 0)
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;
~ — для обозначения символов *, ? и ~. (т.е. чтобы искать в тексте вопросительный знак, нужно написать ~?, чтобы искать именно звездочку (*), нужно написать ~* и наконец, чтобы найти в тексте тильду, необходимо написать ~~)

Поиск в скрытых строках и столбцах

Для поиска в скрытых ячейках нужно учитывать лишь один нюанс: поиск нужно осуществлять в формулах, а не в значениях, т.е. нужно использовать LookIn:=xlFormulas

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

d = Date
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Пример 8: Найти 1 марта 2018 г.

d = #3/1/2018#
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

d = #3/1/1900#
Set c = Cells.Find(Format(d, "m/d/"), LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Макрос 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)

 

Ответить

Матраскин

Дата: Понедельник, 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]


в интернете опять кто-то не прав

 

Ответить

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

 

Ответить

anvg

Дата: Понедельник, 07.10.2013, 10:35 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

Замечаний:
0% ±


2016, 365

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

 

Ответить

SkyPro

Дата: Понедельник, 07.10.2013, 10:36 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

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


skypro1111@gmail.com

 

Ответить

Centuriy

Дата: Понедельник, 07.10.2013, 11:54 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

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

 

Ответить

SkyPro

Дата: Понедельник, 07.10.2013, 12:01 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

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


skypro1111@gmail.com

 

Ответить

SkyPro

Дата: Понедельник, 07.10.2013, 12:13 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Вариант с UDF и макросом:

К сообщению приложен файл:

fnd.xlsm
(23.8 Kb)


skypro1111@gmail.com

 

Ответить

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

 

Ответить

Centuriy

Дата: Понедельник, 07.10.2013, 15:49 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

SkyPro, Спасибо! Всё работает как надо!

 

Ответить

Nast_na

Дата: Среда, 24.09.2014, 14:21 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

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

 

Ответить

Nast_na

Дата: Среда, 24.09.2014, 14:21 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

К сообщению приложен файл:

6361065.xlsx
(51.1 Kb)

 

Ответить

This is the ultimate Lookup Macro for Excel. It will search every worksheet in the workbook and return all of the matching results to a single worksheet. You do not have to specify a specific lookup_table and the data can be located anywhere on the worksheets and it will still be found and returned with this macro.

Sub Return_Results_Entire_Workbook()

'This does not search the worksheet that will contain the results of the search

' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
' ||||||||||||||||||| ------------ TeachExcel.com -------------- |||||||||||||||||||||||||
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'Number for the worksheet that contains the value for which to search
searchValueSheet = "Sheet1"

'Get the value for which we need to search into the macro
searchValue = Sheets(searchValueSheet).Range("A2").Value

'how many columns to the right of any "found" value that you want to use to return the data
returnValueOffset = 1

'The sheet where the results should be placed
outputValueSheet = "Sheet1"

'The column in the sheet where the results should be placed
outputValueCol = 2

'The row in the sheet where the results should be placed
'everything from this row down must be empty!
outputValueRow = 2

'clear the results display area
Sheets(outputValueSheet).Range(Cells(outputValueRow, outputValueCol), Cells(Rows.Count, outputValueCol)).Clear


'count the worksheets in the workbook
wsCount = ActiveWorkbook.Worksheets.Count

'loop through the worksheets in the workbook
For i = 1 To wsCount
    
    'Don't search the sheet with the lookup value or returned values - assumes source data will be on other tabs.
    If i <> Sheets(searchValueSheet).Index And i <> Sheets(outputValueSheet).Index Then
    
        'Perform the search, which is a two-step process below
        Set Rng = Worksheets(i).Cells.Find(What:=searchValue, _
                LookIn:=xlValues, _
                LookAt:=xlWhole, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlNext, _
                MatchCase:=False)
                
        If Not Rng Is Nothing Then
        
            rangeLoopAddress = Rng.Address
            
            Do
                Set Rng = Sheets(i).Cells.FindNext(Rng)
                Sheets(outputValueSheet).Cells(Cells(Rows.Count, outputValueCol).End(xlUp).Row + 1, outputValueCol).Value = Sheets(i).Range(Rng.Address).Offset(0, returnValueOffset).Value
            Loop While Not Rng Is Nothing And Rng.Address <> rangeLoopAddress
            
        End If
    
    End If

Next i


End Sub 

The code above may seem confusing but you really only have to change a few things to get it to work with your data.

You will have to tell the macro which worksheet contains the value you are searching for, where that search value is located, on which worksheet you want to return the data once it is found and where within that worksheet you want to display the data.

First, change the searchValueSheet to the name of the worksheet that contains the value for which you want to search, the searchValue.

The searchValue is the cell reference of the cell that is used to locate the data to return. Change A2 to the reference of the cell that contains the value you are searching for or the cell where you will input that value. Remember, this cell should be located on the searchValueSheet mentioned above.

The returnValueOffset is a very important value. This tells the macro how far to the right to go to find the data that you want to return once a match for the searchValue has been found. Note that the returned data must come from the same row as the data that matches the searchValue.

The outputValueSheet is the name of the worksheet where you want to return the data. Change the name from Sheet1 to whatever you need. This can be the same as the searchValueSheet or different, it doesn’t matter.

The outputValueCol is the column where you want to display the results within the outputValueSheet

The outputValueRow is the first row in which the returned results should be displayed in the outputValueCol on the outputValueSheet.

Anothing important thing to note is that this macro will NOT search through the worksheets that are referenced by the searchValueSheet or the outputValueSheet. This should not usually matter but, if it does, the easiest solution is to create a specific «Search» tab and set the macro to return everything there.

It may seem like a lot to change, but at least I made it easy for you! ;) And, once you set this macro up to work the way you want, it will save you TONS of time.

I hope this helps! :)


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Vlookup Macro to Return All Matching Results from a Sheet in Excel

Macro: This Excel Macro works like a better Vlookup function because it returns ALL of the matchi…

Vlookup to Return All Matching Results

Tutorial:
Here is an Excel formula that will act like a Vlookup that returns every matching result …

Vlookup Macro to Return All Matching Results and Stack them with Previous Results

Macro: This is very similar to the other Vlookup type Macro in that it returns all of the results…

Excel 365 Wildcard Vlookup to Return All Partial Matches

Tutorial: This post is related to the following video:

TeachExcel explained how to perform a Vlooku…

Print Preview Screen Display for The Entire Workbook in Excel

Macro: This free Excel macro allows you to quickly and easily display the print preview windo…

Complete Guide to Printing in Excel Macros — PrintOut Method in Excel

Macro: This free Excel macro illustrates all of the possible parameters and arguments that yo…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Прошу помочь.  
Мне нужен макрос, который берет все данные из 10 столбца и ищет их  
совпадение во всех открытых файлах. При совпадении, пусть в 12 столбце, напротив совпавшего кода будет запись, — «имя файла, номер строки», если совпадение происходит и с  
другим файлом, то такая же запись в 13 столбце, 14-ом.. Формула здесь  
не поможет, т.к. прайс-листы у всех разные и к каждому прикручивать  
ВПР…    
——————————  
Если есть возможность организовать поиск в определенной папке, не открывая файлы, это было бы вообще замечательно.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Была похожая тема, Pavel55 код писал, посмотрите  

http://www.planetaexcel.ru/forum.php?thread_id=15065  

  В файле присутствует макрос «ПоискВоВсехФайлахИПапках»  

  Данный макрос:  
1. запрашивает текст для поиска (число, слово, выражение);  
2. запрашивает папку для поиска;  
3. уточняет, искать ли данные во вложенных папках (Папка1Папка2Папка3 и т.д.);  
4. осуществляет поиск текста во всех файлах Excel, на всех листах, во всех вложенных папках (если в пункте 3 ответили «Да»)  
5. создаёт отдельную книгу с листом «Отчёт», куда копирует найденную информацию целыми строками, с указанием папки, названия книги и листа, где было найдено

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Hugo, спасибо. Классный поиск. Pavel55, Вам тоже спасибо большое. Молодец.  

  ———-  
.. и опять старик приходит к синему морю. :)  

  А реально ли доработать так, чтобы сразу все данные вводить для поиска, а не по одному?

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

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

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=04.07.2011 12:09}{thema=}{post}Hugo, спасибо. Классный поиск. Pavel55, Вам тоже спасибо большое. Молодец.  

  ———-  
.. и опять старик приходит к синему морю. :)  

  А реально ли доработать так, чтобы сразу все данные вводить для поиска, а не по одному?{/post}{/quote}конечно)

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Реально может быть до 10-15 файлов. Строк от 10000 до 65000. Структура у всех файлов разная. Я Вам примерно накопировал из разных прайсов. Если этого мало, то только по электронке могу.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

Эх, уже нарисовал(«формульный» макрос, без открытия файлов), но раз структура файлов разная, то не пойдет. Видимо, только Find.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

{quote}{login=nilem}{date=04.07.2011 01:04}{thema=}{post}Эх, уже нарисовал(«формульный» макрос, без открытия файлов), но раз структура файлов разная, то не пойдет. Видимо, только Find.{/post}{/quote}  

  Спасибо за  участие, nilem.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=04.07.2011 01:29}{thema=Re: }{post}{quote}{login=nilem}{date=04.07.2011 01:04}{thema=}{post}Эх, уже нарисовал(«формульный» макрос, без открытия файлов), но раз структура файлов разная, то не пойдет. Видимо, только Find.{/post}{/quote}  

  Спасибо за  участие, nilem.{/post}{/quote}посмотрите работает ли. Времени разбираться нету) Alt+F8

 

Ну, раз уж написал. Этот файл нужно положить в одну папку с файлами-источниками.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

nerv, сработало. Долго правда, но отлично сработало, даже ссылки сразу на файлы нарисовал. Спасибо.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

{quote}{login=}{date=04.07.2011 01:54}{thema=}{post}Ну, раз уж написал. Этот файл нужно положить в одну папку с файлами-источниками.{/post}{/quote}  

  Ваш макрос  — GetValue200? Положил к исходным файлам, потестил. Долго ждал, ничего не произошло.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

nerv, а этот параметр могу я перед началом работы макроса задать сам — TextToFind = [J2:J22]? Т.к. в файле может быть [J2:J5] и [J2:J35]. Т.е. скажем TextToFind = [(выделенный диапазон)]?

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

«Ваш макрос — GetValue200? Положил к исходным файлам, потестил. Долго ждал, ничего не произошло.»  
Наверное, просто очень долго.  
Вот вариант, должно быть побыстрее. Суть такая: ищем первое совпадение в файле-источнике, и берем данные из того столбца, где нашли это совпадение.  
Попробуйте. Ну, для интереса.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Спотыкается на этой строке:  

  Set r = .Sheets(1).UsedRange.Find(What:=x(k, 1), LookIn:=xlValues, LookAt:=xlWhole)

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=04.07.2011 02:18}{thema=}{post}nerv, а этот параметр могу я перед началом работы макроса задать сам — TextToFind = [J2:J22]? Т.к. в файле может быть [J2:J5] и [J2:J35]. Т.е. скажем TextToFind = [(выделенный диапазон)]?{/post}{/quote}конечно ; ) Только не более 1-го диапазона за раз.

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

Последний раз :)  
Если нет, значит нет.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

…та же картинка — 10 минут в задумчивости, а потом мне надоедает.  

  —  
95554

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

{quote}{login=nerv}{date=04.07.2011 03:04}{thema=Re: }{post}{quote}{login=Владимир}{date=04.07.2011 02:18}{thema=}{post}nerv, а этот параметр могу я перед началом работы макроса задать сам — TextToFind = [J2:J22]? Т.к. в файле может быть [J2:J5] и [J2:J35]. Т.е. скажем TextToFind = [(выделенный диапазон)]?{/post}{/quote}конечно ; ) Только не более 1-го диапазона за раз.{/post}{/quote}

  Ваш макрос сразу бросается искать, он не предлагает ввести значения, как у Pavel55. Поэтому я и спрашиваю, переделать можете на то, чтобы я диапазон для поиска сам указывал?  

  —  
15768

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Макрос не мой)  

  ‘TextToFind = [J2:J22] — за комментируйте эту строку (как сделал я здесь)

  эту  
‘TextToFind = Application.InputBox(«Введите текст для поиска:», «Поиск»)  
замените на эту  
TextToFind = Application.InputBox(«Введите текст для поиска:», «Поиск», Type:=8)

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=nerv}{date=04.07.2011 04:06}{thema=to Владимир}{post}Макрос не мой)  

  ‘TextToFind = [J2:J22] — за комментируйте эту строку (как сделал я здесь)

  эту  
‘TextToFind = Application.InputBox(«Введите текст для поиска:», «Поиск»)  
замените на эту  
TextToFind = Application.InputBox(«Введите текст для поиска:», «Поиск», Type:=8){/post}{/quote}  
Только текст тоже нужно поменять — ведь диапазон нужно указывать. :))

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

TextToFind = [J2:J22] — а с этим ограничением что сделать?

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=04.07.2011 05:13}{thema=}{post}TextToFind = [J2:J22] — а с этим ограничением что сделать?{/post}{/quote}советую закомментировать (поставить ‘ в начале строки), мало ли в дальнейшим потребуется

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

.. всё равно не предлагает выбор диапазона сделать.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=04.07.2011 08:12}{thema=}{post}.. всё равно не предлагает выбор диапазона сделать.{/post}{/quote}Должно) Попробуйте это. Выделяете диапазон, например, мышкой.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Dim TextToFind As Variant можно сразу Range объявлять.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Сказка..    
nerv, я Ваш должник. Спасибо.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

В процессе работы появились маленькие недоделки.  

  1. Макрос не ищет одну ячейку, выдаёт ошибку. Если указываю более одной, то порядок.  
2. Не всегда, но иногда найденные результаты дублируются. Проверял, — повторов в файле нет.  
3. Частенько от макроса происходит предупреждение «Данные с которыми вы работали могли быть потеряны.. Восстановить…» Пока ничего страшного не произошло, но напрягает перспектива потерять файл..

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Владимир}{date=06.07.2011 10:14}{thema=}{post}В процессе работы появились маленькие недоделки.  

  1. Макрос не ищет одну ячейку, выдаёт ошибку. Если указываю более одной, то порядок.  
2. Не всегда, но иногда найденные результаты дублируются. Проверял, — повторов в файле нет.  
3. Частенько от макроса происходит предупреждение «Данные с которыми вы работали могли быть потеряны.. Восстановить…» Пока ничего страшного не произошло, но напрягает перспектива потерять файл..{/post}{/quote}попробуйте так. Но я ни чего не обещаю

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

#30

06.07.2011 10:26:36

Имхо, со словарем все же должно быть быстрее и надежнее. Владимир, попробуйте выбрать 2-3 (ну или больше) файла с прайсами, наиболее отличающиеся по расположению данных, форматам и пр. Пришлите сюда: valej5@mail.ru

  • Надстройки Excel
  • Поиск в Excel
  • Панель инструментов
  • Книги Excel
  • текстовые строки
  • Форма ввода

Наверняка, вы сталкивались с ситуацией, когда необходимо производить поиск некоторого значения по всей книге Excel (искать частичное совпадение на всех листах активной книги)

Штатными средствами Excel вывести поле для поиска на панель инструментов не удаётся, а вызывать каждый раз диалоговое окно нажатием комбинации клавиш Ctrl + F не всегда удобно.

На помощь придёт эта надстройка — она формирует в строке меню Excel 2003 поле для поиска по всем листам:

Достаточно ввести искомый текст, и нажать клавишу Enter, — и перед вами полный список всех подходящих ячеек со всех листов книги.

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

Поместите эту надстройку в папку автозагрузки Excel — и это поле будет появляться при каждом запуске программы.

Конечно, функциональность этой надстройки присутствует и в Excel, — если в настройках поиска выбрать опцию «Искать в книге»:

Поиск по всем листам в Excel

Моя же надстройка чуть упрощает работу — не надо нажимать лишние кнопки для типа Ctrl + F, и не надо выбирать область поиска.

К тому же, при использовании надстройки, вы можете провести мышом (при нажатой левой кнопке) по результатам поиска, — и Excel пролистает (выделит) все найденные ячейки по очереди (во встроенном поиске Excel надо щелкать на каждом результате отдельно)

(добавлено 29.07.2011)  Немного подправил код надстройки:

  • теперь форма с результатами закрывается по нажатию Esc
  • при отсутствии открытой книги не выводится пустая форма
  • панель инструментов не сбрасывается к настройкам «по-умолчанию» перед добавлением поля
  • 200774 просмотра

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

0 / 0 / 0

Регистрация: 18.11.2019

Сообщений: 5

1

Excel

Поиск строк в книге по содержимому в ячейке (макрос)

27.10.2021, 17:57. Показов 1577. Ответов 7


Студворк — интернет-сервис помощи студентам

Здравствуйте! Помогите пожалуйста! Нужен макрос с такой задачей. На Листе1 выделить любую ячейку (всегда разные ячейки и данные в них разные) и по содержимому выделенной ячейки на Листе2 найти и отобразить только те строки (строк может быть несколько), где есть содержимое выделенной ячейки. Например, есть некий массив на Листе1, с набором различных данных. Становимся на любую ячейку на Листе1, запускаем макрос, на Листе2 (там тоже массив данных) отображаются только те строки, в которых есть данные из выбранной ячейки Листа1.



0



Burk

1811 / 1134 / 345

Регистрация: 11.07.2014

Сообщений: 3,999

27.10.2021, 19:52

2

Vladimir241267, например, так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub proba()
Dim RgF As Range, Tex, Rang As Range
Application.ScreenUpdating = False
Sheets(1).Select
If InStr(Selection.Address, ":") > 0 Then _
   MsgBox "Выделена не одна ячейка!": Exit Sub
Tex = Selection.Value
Sheets(2).Activate
Set Rang = ActiveSheet.UsedRange
Rang.EntireRow.Hidden = True
Set RgF = Rang.Find(Tex)
If RgF Is Nothing Then MsgBox "Нет искомого текста!": Exit Sub
S = RgF.Address
Beg:
Set RgF = Rang.FindNext(RgF)
If S = RgF.Address Then GoTo OUT 'пошел повтор, закончить работу
Rows(RgF.Row).EntireRow.Hidden = False
GoTo Beg
OUT: Application.ScreenUpdating = True
End Sub



0



Narimanych

2628 / 1634 / 744

Регистрация: 23.03.2015

Сообщений: 5,135

27.10.2021, 20:37

3

Vladimir241267,

Кликните здесь для просмотра всего текста

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
Sub MMM()
Dim coll As New Collection
If Selection.Cells.Count > 1 Then Exit Sub
x = Selection.Value
    With Worksheets(2)
        Set r = .Cells.Find(x, LookIn:=xlValues, LookAt:=xlWhole)
            If Not r Is Nothing Then
                ops = r.Address
                Do
                    coll.Add r.Row
                    Set r = .Cells.FindNext(r)
                    If r Is Nothing Then Exit Do
                Loop While r.Address <> ops
            End If
        ReDim ARR(1 To .UsedRange.Find("*", SearchDirection:=xlPrevious).Row)
        For i = 1 To .UsedRange.Find("*", SearchDirection:=xlPrevious).Row
          For j = 1 To coll.Count
              If i = coll.Item(j) Then
                ARR(i) = False
                Exit For
              Else
                ARR(i) = True
              End If
          Next
        Next
          
        For i = 1 To Worksheets(2).UsedRange.Find("*", SearchDirection:=xlPrevious).Row
             .Rows(i).Hidden = ARR(i)
        Next
    End With
End Sub



0



Vladimir241267

0 / 0 / 0

Регистрация: 18.11.2019

Сообщений: 5

28.10.2021, 08:58

 [ТС]

4

Burk, работает. Нужно сделать еще чтобы строка 1 не скрывалась, там заголовок таблицы.

Добавлено через 1 минуту
Narimanych, минут 5 ждал, макрос не завершился. Пришлось через «диспетчер задач» снять задачу Excel.

Добавлено через 6 минут
Я вчера, пока ждал ответ на свой вопрос сделал следующее.
Работает, но только по одному столбцу, где открывается фильтр для вставки значения для поиска.

Visual Basic
1
2
3
4
5
6
7
8
9
Sub test()
 
a = ActiveCell
Sheets("Замечания").Select
    ActiveSheet.ListObjects("Таблица12").Range.AutoFilter Field:=2, Criteria1:=a
        
    Application.CutCopyMode = False
 
End Sub



0



Burk

1811 / 1134 / 345

Регистрация: 11.07.2014

Сообщений: 3,999

28.10.2021, 11:01

5

Цитата
Сообщение от Vladimir241267
Посмотреть сообщение

строка 1 не скрывалась,

Vladimir241267, а поставить перед строкой 20

Visual Basic
1
Rows(1).EntireRow.Hidden = False

тяжело сообразить?



0



297 / 157 / 86

Регистрация: 01.04.2020

Сообщений: 436

28.10.2021, 14:28

6

Цитата
Сообщение от Burk
Посмотреть сообщение

тяжело сообразить?

тяжелo даже спасибo сказать
( и ещё там надo пoсле стрoки 13 дoбавить такую же как 17,
чтoбы oтoбражалась и первая найденная ячейка / стрoка )



1



Burk

1811 / 1134 / 345

Регистрация: 11.07.2014

Сообщений: 3,999

28.10.2021, 14:58

7

Добавлено через 12 минут
elixi, я понял про что вы говорите, вы правы, не проверял, надо еще перед строкой 20 поставить

Visual Basic
1
Rows(Range(S).row).EntireRow.Hidden = False



2



0 / 0 / 0

Регистрация: 18.11.2019

Сообщений: 5

29.10.2021, 08:48

 [ТС]

8

Конечно скажу и говорю Спасибо! Всем! Только что вернулся к этой теме. Еще даже не успел попробовать все Ваши скрипты.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

29.10.2021, 08:48

8

Как всегда искать по всей книге?

В Excel, когда вы применяете функцию «Найти и заменить», он по умолчанию будет искать на текущем листе, если вы всегда хотите искать на всех листах, вам нужно изменить Простыня в Workbook под Опция в Найти и заменить диалог при включении книги каждый раз. Как можно настроить поиск по всей книге вместо активного листа по умолчанию?

Всегда искать по всей книге с кодом VBA

Всегда выполнять поиск по всей книге с помощью Kutools for Excel


стрелка синий правый пузырь Всегда искать по всей книге с кодом VBA

Фактически, у нас нет прямого способа изменить область поиска на всю книгу по умолчанию в Excel, но вы можете применить следующий код VBA в качестве обходного пути. С помощью этого кода вам не нужно изменять область поиска каждый раз, когда вы обедаете эту книгу.

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: всегда искать по всей книге:

Sub FindReplace_WB()
'Updateby Extendoffice
    Dim ws As Worksheet
    Dim xFind As String
    Dim xRep As String
    Application.ScreenUpdating = False
    On Error Resume Next
    xFind = Application.InputBox("Find what", "Kutools for Excel", "", , , , , 2)
    xRep = Application.InputBox("Replace with", "Kutools for Excel", "", , , , , 2)
    If xFind = "" Then
        MsgBox "wrong...", vbInformation, "Kutools for Excel"
        Exit Sub
    End If
    For Each ws In ThisWorkbook.Worksheets
        ws.UsedRange.Replace What:=xFind, Replacement:=xRep, LookAt:=xlWhole
    Next ws
    On Error GoTo 0
    Application.ScreenUpdating = True
End Sub

3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и в появившихся диалоговых окнах введите текстовые значения в поля «Найти» и «Заменить на» отдельно, см. снимок экрана:

книга поиска документов 1

4, Затем нажмите OK, все значения во всей книге, которую вы хотите, были заменены необходимыми значениями.

5. Сохраните книгу как Excel Macro-Enabled Workbook формат, и в следующий раз, когда вы откроете эту книгу, вы всегда сможете применить этот код для поиска во всей книге.


стрелка синий правый пузырь Всегда выполнять поиск по всей книге с помощью Kutools for Excel

Если у вас есть Kutools for Excel, С его Область переходов утилиту, вы всегда можете найти и заменить на листе, всей книге или нескольких открытых книгах по мере необходимости.

После установки Kutools for Excel, пожалуйста, сделайте следующее:

1. Нажмите КутулсНавигация, см. снимок экрана:

2. В Навигация панели, нажмите книга поиска документов 4 кнопку, чтобы перейти к Параметры навигации, в центре параметров укажите необходимый объем по умолчанию в поле Найти и заменить раздел, в этом случае я выберу Активная рабочая тетрадь, см. снимок экрана:

книга поиска документов 3

книга поиска документов 5

3. Затем нажмите OK кнопку, закройте и снова откройте книгу, чтобы применить эффект настройки, а теперь перейдите к Навигация панель и щелкните книга поиска документов 6 для активации Найти и заменить функция. в Найти и заменить панели, выполните следующие операции:

(1.) Под В вы можете видеть, что область действия по умолчанию была изменена на Активная рабочая тетрадь;

(2.) Под Замените на вкладке введите текст, который хотите найти и заменить отдельно, в поле Найти то, что и Заменить текстовое окно;

(3.) Затем щелкните Заменить все кнопку, чтобы заменить текст в активной книге, которая вам нужна.

Нажмите Скачать бесплатно Kutools for Excel от Yhao сейчас!

4. С этого момента, когда вы открываете любую книгу и применяете это Найти и заменить Утилита Kutools, область поиска по умолчанию является активной книгой.

Более 300 функций могут сделать вашу работу более эффективной, вы можете скачать Kutools for Excel на бесплатную трассу.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Понравилась статья? Поделить с друзьями:
  • Excel макрос поиск ячейки по значению
  • Excel макрос поиск числа
  • Excel макрос поиск текста в ячейке
  • Excel макрос поиск пустой ячейки в excel
  • Excel макрос поиск по строкам