Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск определённого слова в название листа книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск определённого слова в название листа книги (Макросы/Sub)
Поиск определённого слова в название листа книги
Elhust Дата: Понедельник, 17.04.2017, 10:32 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток Добрые люди гуру Excel и просто специалисты.
Вопрос такой есть много книг с большим кол-ом листов. Мне нужен лист (Резюме) но они в книгах с добавлением разных слов по бокам
типо (Резюме_вафывф или Резюме_ава_ава_ава или пробел перед самим словом)

пытался через * и обозначением имени через стринг но чтёт он ищет в листах только точные название и такого не может быть ..
[vba]
Код

Sub All_File()
    Dim sh As Worksheet, wsDataSheet As Object, lLastrow As Long, sh1 As String
    Dim iCell As Range, iCell1 As Range, i As Long, iCell2 As Range, iCell3 As Range
    Dim iSearchText$, iSearchText1$
    Dim sFolder As String, sFiles As String

'---------------------------------------------------------------------------------------------------
iSearchText$ = "Номер один*"
iSearchText1$ = "Номер Два"
sh1 = "*Резюме*"
'---------------------------------------------------------------------------------------------------
Set wsDataSheet = ActiveWorkbook.Sheets("Вывод")              'Лист на который вставляются значения

lLastrow = wsDataSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
'-------------------------------------------------------------------------------------------------------
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        'открываем книгу
        Workbooks.Open sFolder & sFiles
        On Error Resume Next
'---------------------------------------Цикл по листам--------------------------------------------------
'For Each sh In Worksheets
' If sh.Name <> "Резюме_ГРУППА*" Then GoTo Point
'-------------------------------------------------------------------------------------------------------
Set sh = Sheets(sh1)                    'Лист с которого производиться поиск
'-------------------------------------------------------------------------------------------------------
Set iCell = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart)
Set iCell1 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart)
Set iCell2 = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart)
Set iCell3 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart)
'-------------------------------------------------------------------------------------------------------
     Set iCell = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart).Offset(1, 6)
     Set iCell1 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart).Offset(1, 3)
     Set iCell2 = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart).Offset(0, 1)
     Set iCell3 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart).Offset(0, 1)
'-------------------------------------------------------------------------------------------------------
     wsDataSheet.Cells(lLastrow, 1).Value = iCell
     wsDataSheet.Cells(lLastrow, 2).Value = iCell1
     wsDataSheet.Cells(lLastrow, 3).Value = iCell2
     wsDataSheet.Cells(lLastrow, 4).Value = iCell3
     lLastrow = lLastrow + 1
    
'-------------------------------------------------------------------------------------------------------
'Point:
'Next sh
'-------------------------------------------------------------------------------------------------------
        ActiveWorkbook.Close False 'если поставить False - книга будет закрыта без сохранения
        sFiles = Dir
    Loop

    Application.ScreenUpdating = True

End Sub
[/vba]


Каждый сам выбирает правила игры
 
Ответить
СообщениеДоброго времени суток Добрые люди гуру Excel и просто специалисты.
Вопрос такой есть много книг с большим кол-ом листов. Мне нужен лист (Резюме) но они в книгах с добавлением разных слов по бокам
типо (Резюме_вафывф или Резюме_ава_ава_ава или пробел перед самим словом)

пытался через * и обозначением имени через стринг но чтёт он ищет в листах только точные название и такого не может быть ..
[vba]
Код

Sub All_File()
    Dim sh As Worksheet, wsDataSheet As Object, lLastrow As Long, sh1 As String
    Dim iCell As Range, iCell1 As Range, i As Long, iCell2 As Range, iCell3 As Range
    Dim iSearchText$, iSearchText1$
    Dim sFolder As String, sFiles As String

'---------------------------------------------------------------------------------------------------
iSearchText$ = "Номер один*"
iSearchText1$ = "Номер Два"
sh1 = "*Резюме*"
'---------------------------------------------------------------------------------------------------
Set wsDataSheet = ActiveWorkbook.Sheets("Вывод")              'Лист на который вставляются значения

lLastrow = wsDataSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
'-------------------------------------------------------------------------------------------------------
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        'открываем книгу
        Workbooks.Open sFolder & sFiles
        On Error Resume Next
'---------------------------------------Цикл по листам--------------------------------------------------
'For Each sh In Worksheets
' If sh.Name <> "Резюме_ГРУППА*" Then GoTo Point
'-------------------------------------------------------------------------------------------------------
Set sh = Sheets(sh1)                    'Лист с которого производиться поиск
'-------------------------------------------------------------------------------------------------------
Set iCell = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart)
Set iCell1 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart)
Set iCell2 = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart)
Set iCell3 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart)
'-------------------------------------------------------------------------------------------------------
     Set iCell = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart).Offset(1, 6)
     Set iCell1 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart).Offset(1, 3)
     Set iCell2 = sh.UsedRange.Find(iSearchText$, , xlFormulas, xlPart).Offset(0, 1)
     Set iCell3 = sh.UsedRange.Find(iSearchText1$, , xlFormulas, xlPart).Offset(0, 1)
'-------------------------------------------------------------------------------------------------------
     wsDataSheet.Cells(lLastrow, 1).Value = iCell
     wsDataSheet.Cells(lLastrow, 2).Value = iCell1
     wsDataSheet.Cells(lLastrow, 3).Value = iCell2
     wsDataSheet.Cells(lLastrow, 4).Value = iCell3
     lLastrow = lLastrow + 1
    
'-------------------------------------------------------------------------------------------------------
'Point:
'Next sh
'-------------------------------------------------------------------------------------------------------
        ActiveWorkbook.Close False 'если поставить False - книга будет закрыта без сохранения
        sFiles = Dir
    Loop

    Application.ScreenUpdating = True

End Sub
[/vba]

Автор - Elhust
Дата добавления - 17.04.2017 в 10:32
_Boroda_ Дата: Понедельник, 17.04.2017, 10:36 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Попробуйте искать через instr, например
https://msdn.microsoft.com/ru-ru/library/8460tsh1(v=vs.90).aspx

[p.s.]В коде не разбирался[/p.s.]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПопробуйте искать через instr, например
https://msdn.microsoft.com/ru-ru/library/8460tsh1(v=vs.90).aspx

[p.s.]В коде не разбирался[/p.s.]

Автор - _Boroda_
Дата добавления - 17.04.2017 в 10:36
Elhust Дата: Понедельник, 17.04.2017, 10:37 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
вот там макрос All_File
К сообщению приложен файл: Test.xls (63.0 Kb)


Каждый сам выбирает правила игры
 
Ответить
Сообщениевот там макрос All_File

Автор - Elhust
Дата добавления - 17.04.2017 в 10:37
Elhust Дата: Понедельник, 17.04.2017, 10:37 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, через другой тип переменных или это метод .. сейчас загуглю


Каждый сам выбирает правила игры
 
Ответить
Сообщение_Boroda_, через другой тип переменных или это метод .. сейчас загуглю

Автор - Elhust
Дата добавления - 17.04.2017 в 10:37
Elhust Дата: Понедельник, 17.04.2017, 13:47 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
Если кому надо будет я решил эту задачу так

[vba]
Код

Sub tt()
Dim sh As Worksheet
Dim lilpeep As Boolean
'-------------------------------------------------------------------------------------------------------
For Each sh In Worksheets
lilpeep = InStr(sh.Name, "Резюме")
If lilpeep = False Then GoTo Point
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Point:
Next sh
'-------------------------------------------------------------------------------------------------------
End Sub
[/vba]


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

[vba]
Код

Sub tt()
Dim sh As Worksheet
Dim lilpeep As Boolean
'-------------------------------------------------------------------------------------------------------
For Each sh In Worksheets
lilpeep = InStr(sh.Name, "Резюме")
If lilpeep = False Then GoTo Point
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Point:
Next sh
'-------------------------------------------------------------------------------------------------------
End Sub
[/vba]

Автор - Elhust
Дата добавления - 17.04.2017 в 13:47
Elhust Дата: Понедельник, 17.04.2017, 13:48 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Ты так имел ввиду ?) а то такое чувство что я по другому сделал ) но работает норм )


Каждый сам выбирает правила игры
 
Ответить
Сообщение_Boroda_, Ты так имел ввиду ?) а то такое чувство что я по другому сделал ) но работает норм )

Автор - Elhust
Дата добавления - 17.04.2017 в 13:48
китин Дата: Понедельник, 17.04.2017, 14:12 | Сообщение № 7
Группа: Модераторы
Ранг: Экселист
Сообщений: 7019
Репутация: 1074 ±
Замечаний: 0% ±

Excel 2007;2010;2016


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Понедельник, 17.04.2017, 14:12
 
Ответить
СообщениеElhust, вы так близко знакомы с Boroda ?

Автор - китин
Дата добавления - 17.04.2017 в 14:12
Elhust Дата: Понедельник, 17.04.2017, 14:51 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
китин, просто решил поделиться своей радостью и поинтерисоваться правильно ли я воспользовался инструментом , понимаю что возможно он старше меня и мне бы уважения надо проявлять и не говорить как с другом которого знаю всю жизнь , прошу прощения если что не так пусть лучше все счастливы будут а я так делать больше не буду тогда


Каждый сам выбирает правила игры
 
Ответить
Сообщениекитин, просто решил поделиться своей радостью и поинтерисоваться правильно ли я воспользовался инструментом , понимаю что возможно он старше меня и мне бы уважения надо проявлять и не говорить как с другом которого знаю всю жизнь , прошу прощения если что не так пусть лучше все счастливы будут а я так делать больше не буду тогда

Автор - Elhust
Дата добавления - 17.04.2017 в 14:51
Elhust Дата: Понедельник, 17.04.2017, 14:53 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
китин, только сейчас прочитал дальше спасибо что глаза открыли .. забылся


Каждый сам выбирает правила игры
 
Ответить
Сообщениекитин, только сейчас прочитал дальше спасибо что глаза открыли .. забылся

Автор - Elhust
Дата добавления - 17.04.2017 в 14:53
Elhust Дата: Понедельник, 17.04.2017, 14:55 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
китин, На вы так на вы ... радости полны штаны просто были когда понял как сделать


Каждый сам выбирает правила игры
 
Ответить
Сообщениекитин, На вы так на вы ... радости полны штаны просто были когда понял как сделать

Автор - Elhust
Дата добавления - 17.04.2017 в 14:55
_Boroda_ Дата: Понедельник, 17.04.2017, 15:03 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Да ладно, нормально все. Я прекрасно понимаю разницу между случайностью и сознательной невежливостью типа вот этого http://www.excelworld.ru/forum/2-31753-205246-16-1483623799

Имел в виду так в части instr, но не сщвсем так в остальном. Зачем Вам ГоТу? Вот так можно
[vba]
Код
For Each sh In Worksheets
lilpeep = InStr(sh.Name, "Резюме")
If lilpeep Then
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Next sh
[/vba]
[p.s.]Игорь, спасибо


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа ладно, нормально все. Я прекрасно понимаю разницу между случайностью и сознательной невежливостью типа вот этого http://www.excelworld.ru/forum/2-31753-205246-16-1483623799

Имел в виду так в части instr, но не сщвсем так в остальном. Зачем Вам ГоТу? Вот так можно
[vba]
Код
For Each sh In Worksheets
lilpeep = InStr(sh.Name, "Резюме")
If lilpeep Then
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Next sh
[/vba]
[p.s.]Игорь, спасибо

Автор - _Boroda_
Дата добавления - 17.04.2017 в 15:03
Elhust Дата: Понедельник, 17.04.2017, 15:55 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Здорова :) просто думал что InStr не тру значения принимает когда совпадения находит .. там получается если не находит то 0 а если находит то значения ... вот и решил через булеан и гоу ту , а так да помню что If тру значение пропускает автоматом Спасибо за объяснения а то у меня тут рвения в изучении проснулось yes


Каждый сам выбирает правила игры
 
Ответить
Сообщение_Boroda_, Здорова :) просто думал что InStr не тру значения принимает когда совпадения находит .. там получается если не находит то 0 а если находит то значения ... вот и решил через булеан и гоу ту , а так да помню что If тру значение пропускает автоматом Спасибо за объяснения а то у меня тут рвения в изучении проснулось yes

Автор - Elhust
Дата добавления - 17.04.2017 в 15:55
_Boroda_ Дата: Понедельник, 17.04.2017, 15:57 | Сообщение № 13
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
просто думал что InStr не тру значения принимает когда совпадения находит

Совершенно верно думали. Любое число может быть. Но любое число, отличное от нуля - это и есть true


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
просто думал что InStr не тру значения принимает когда совпадения находит

Совершенно верно думали. Любое число может быть. Но любое число, отличное от нуля - это и есть true

Автор - _Boroda_
Дата добавления - 17.04.2017 в 15:57
KuklP Дата: Понедельник, 17.04.2017, 16:02 | Сообщение № 14
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Ребят, привет. Одно замечание - зачем там лишняя переменная, которая все время пересчитывается, но используется всего раз при каждой итерации? Без нее:
[vba]
Код
For Each sh In Worksheets
If InStr(sh.Name, "Резюме") Then
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Next sh
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Понедельник, 17.04.2017, 16:04
 
Ответить
СообщениеРебят, привет. Одно замечание - зачем там лишняя переменная, которая все время пересчитывается, но используется всего раз при каждой итерации? Без нее:
[vba]
Код
For Each sh In Worksheets
If InStr(sh.Name, "Резюме") Then
'-------------------------------------------------------------------------------------------------------
Действие на листе где есть слово Резюме
'-------------------------------------------------------------------------------------------------------
Next sh
[/vba]

Автор - KuklP
Дата добавления - 17.04.2017 в 16:02
Elhust Дата: Вторник, 18.04.2017, 07:22 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
KuklP,Привет, это моя идея я просто новичок ^_^ по этому спасибо )


Каждый сам выбирает правила игры

Сообщение отредактировал Elhust - Вторник, 18.04.2017, 07:23
 
Ответить
СообщениеKuklP,Привет, это моя идея я просто новичок ^_^ по этому спасибо )

Автор - Elhust
Дата добавления - 18.04.2017 в 07:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск определённого слова в название листа книги (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!