Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 28.09.2015
Сообщений: 271
1

Поиск текста с выводом адреса ячейки

07.09.2017, 20:01. Просмотров 2568. Ответов 8
Метки нет (Все метки)

Добрый вечер, специалисты по экселю.
Помогите разобраться с проблемой.

В книге несколько листов.
На листах 1,2,3,4 в некоторых ячейках находится текст.
На листе "Поиск" - находится столбец C5:C17 - в котором вписаны слова, по которым я хочу осуществить поиск.

Как макросом - провести поиск ключевых слов по листам 1,2,3,4 и вывести найденный текст - в третью строку листа "Поиск" - с выводом адреса ячейки, в которой был найден этот текст ?
0
Вложения
Тип файла: xls 24757.xls (33.0 Кб, 11 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2017, 20:01
Ответы с готовыми решениями:

Поиск адреса ячейки по условию
Добрый день! Недавно стала писать макросы. Помогите пожалуйста с кодом, а то уже голову сломала. ...

Как реализовать поиск текста в .txt файле с выводом всех возможных результатов в ListBox?
Здравствуйте! Задачка вот какая. Если документ "1234.txt". В нём содержится примерно такой текст:...

Поиск и замена текста Word из ячейки Excel
Здравствуйте. Стоит такая задача: Требуется создать папку с именем из ячейки эксель, копировать...

Поиск ячейки в массиве данных по части текста
Вот такая вот незадача, или задачка =) Есть массив смешанных (цифры, текст) данных. 5 столбцов 5...

8
3354 / 2063 / 673
Регистрация: 02.11.2012
Сообщений: 5,372
08.09.2017, 11:06 2
на листе один текст всегда в одном экземпляре?
0
3 / 3 / 1
Регистрация: 28.09.2015
Сообщений: 271
08.09.2017, 11:11  [ТС] 3
Vlad999 , нет - может быть несколько ячеек с похожим текстом
0
3354 / 2063 / 673
Регистрация: 02.11.2012
Сообщений: 5,372
08.09.2017, 11:22 4
для одного.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub vvv()
Dim Ws As Worksheet, i%, FR As Range, adr$, f$
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row
f = Cells(i, 3).Value
    For Each Ws In Sheets
    If Ws.Name <> "Поиск" Then
       Set FR = Ws.Cells.Find(f)
       If Not FR Is Nothing Then adr = adr & " " & Ws.Name & "!" & FR.Address
    End If
    Next
Cells(i, 5) = adr
adr = ""
Next
End Sub
для нескольких чуть позже. пока занят.
0
3 / 3 / 1
Регистрация: 28.09.2015
Сообщений: 271
08.09.2017, 12:26  [ТС] 5
Vlad999 , ясно
0
3354 / 2063 / 673
Регистрация: 02.11.2012
Сообщений: 5,372
08.09.2017, 12:43 6
yl3d, результат записывать в одну ячейку или один адрес - одна ячейка?

Добавлено через 6 минут
проверяйте
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
Sub vvv()
Dim Ws As Worksheet, i%, FR As Range, adr$, f$, a$, ms()
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row
f = Cells(i, 3).Value
    For Each Ws In Sheets
    If Ws.Name <> "Поиск" Then
       Set FR = Ws.Cells.Find(f)
       If Not FR Is Nothing Then
          adr = adr & " " & Ws.Name & "!" & FR.Address
          '---цикл по следующим найденным ячейкам
          a = FR.Address '---запоминаем адрес первой найденной ячейки
          Do
            Set FR = Ws.Cells.FindNext(FR)
            If FR.Address = a Then Exit Do
            adr = adr & " " & Ws.Name & "!" & FR.Address
          Loop
          '-----------
        End If
    End If
    Next
'Cells(i, 5) = adr 'если в одну
'если один адрес - одна ячейка
ms = Split(Mid(adr, 2, 1000))
Cells(i, 5).Resize(, UBound(ms) + 1) = ms
'-------------------------
adr = ""
Next
End Sub
0
3 / 3 / 1
Регистрация: 28.09.2015
Сообщений: 271
08.09.2017, 13:16  [ТС] 7
Vlad999 , один адрес- одна ячейка.

Добавлено через 29 минут
Vlad999 , не работает.
Выдает ошибку "run-time error '13': Type mistmatch"
и подсвечивает строку кода: ms = Split(Mid(adr, 2, 1000))
0
3354 / 2063 / 673
Регистрация: 02.11.2012
Сообщений: 5,372
08.09.2017, 13:31 8
Лучший ответ Сообщение было отмечено yl3d как решение

Решение

1. уберите скобки у ms
Visual Basic
1
Dim ms
2. замените часть кода, это еще одна проверка если искомое не найдено.
Visual Basic
1
2
3
4
If adr <> "" Then
  ms = Split(Mid(adr, 2, 1000))
  Cells(i, 5).Resize(, UBound(ms) + 1) = ms
End If
1
3 / 3 / 1
Регистрация: 28.09.2015
Сообщений: 271
08.09.2017, 15:30  [ТС] 9
Vlad999 , спасибо большое.
Все работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2017, 15:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с матрицами, поиск наибольшей строки с ее выводом и выводом ее суммы
Написать программу: дана прямоугольная матрица размером m на n. Выделить в ней строку имеющую...

Поиск фрагмента текста в ячейке и вывод сопоставления из другой ячейки
Добрый день! Помогите написать формулу. Искомые значения - в столбце А на листе 2 Массив, где...

Поиск на 1 листе текста со 2-й ячейки 6 столбца со сравнением на 2-листе со 2-й ячейки 6 столбца
Прошу помочь Макрос поиска на 1-ом листе текста со 2-й ячейки 6 столбца с сравнением его на 2-листе...

Поле ввода адреса с динамическим выводом подсказки
Всем привет! Подскажите пожалуйста каким образом возможно реализовать поле ввода почтового адреса...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.