Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 18:38   #1
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
Радость поиск через VBA

Всем привет!
Нужно в xls документе найти все значения геймс и добавить ниже них по пустой строчке.

Вот попробовал такой код, который выдает макросрекордер

Код:
Cells.Find(What:="games", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Select

Application.SendKeys ("{DOWN}+ ^{+}")
Но, он мне несовсем подходит. Мне нужно что бы действие производилось несколько раз, пока строки не будут добавлены ко всем полям, где присутствует слово геймс.

Да и если кто-то подскажет как можно нормально добавлять строки, не через сендкис. И как можно узнать текущее положение ячейки, то буду очень благодарен
Tirendus вне форума Ответить с цитированием
Старый 30.07.2009, 19:29   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Попробуйте так:
Код:
Public Sub games()
With ThisWorkbook.ActiveSheet
For i = 1 To .UsedRange.Rows.Count + 1
If Cells(i, 1).Value = "games" Then Range(Cells(i + 1, 1), _
Cells(i + 1, 1)).Select: Selection.EntireRow.Insert
Next i
End With
End Sub
pivas вне форума Ответить с цитированием
Старый 30.07.2009, 21:35   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

pivas,
Ваш код не будет находить
a) Ячейки, содержащие "games" как часть текста
b) Ячейки с "games" не в первой колонке
Кроме того если "games" будет найдено в последней строке листа, код так же даст ошибку
Tirendus, попробуйте следующее:
cм. пост http://www.programmersforum.ru/showp...46&postcount=6

Последний раз редактировалось Aent; 31.07.2009 в 02:43. Причина: Убран ошибочный код. См. ccылку
Aent вне форума Ответить с цитированием
Старый 30.07.2009, 22:10   #4
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Согласен по всем пунктам. Но я и не претендовал на самое элегантное решение. Ваше решение безусловно интереснее, но попробуйте заполнить словом games первую колонку, хотя бы до 10 строки и запустите макрос. Затем заполните первую строку колонок на 10 и повторите. Код хороший, поэтому есть смысл подправить.
pivas вне форума Ответить с цитированием
Старый 31.07.2009, 00:02   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Спасибо, завтра на работе испробую код... есть один вопрос, он будет искать в рваных массивах? тут вроде бы usedrange врядли поможет. У меня слово games находиться в разных кусках документа, не соединенных. Завтра выложу документ. Большое спасибо
Tirendus вне форума Ответить с цитированием
Старый 31.07.2009, 01:42   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

pivas, Большое спасибо за справедливое замечание. Поторопился.
Исправленный код:
Код:
Option Explicit
Sub InsertRowAfterGames()
    Dim c As Range, h As Long
    Dim r As Range
    Set r = ActiveSheet.UsedRange
    
    On Error Resume Next

    Application.ScreenUpdating = False

    Do
        With r
            Set c = .Find("games", after:=.Cells(.Cells.Count), LookAt:=xlPart)
            If c Is Nothing Then
                Exit Sub
            End If
            If c.Row = .Row + .Rows.Count - 1 Then
                Exit Sub
            End If
            c.Offset(1, 0).EntireRow.Insert
            If Err.Number <> 0 Then
                MsgBox "Вставка строк невозможна"
                Exit Sub
            End If
            h = c.Row - .Row + 2
            Set r = .Offset(h, 0).Resize(.Rows.Count - h, .Columns.Count)
        End With
    Loop

    Application.ScreenUpdating = True
End Sub
Некоторые пояснения:
1) Метод .find , применённый к рангу r найдёт значение в первой ячейке этого ранга только если начинать поиск с ячейки следующей за последней. Так как сканирование ранга осуществляется циклически и поиск начинается с ячейки следующей за указанной в параметре after.
2) Если мы нашли строку в последней строке нашего ранга, то вставлять чистую строку не надо по определению.
3) Если присутствует значение в последней строке листа, то Excel не разрешит вставку строк и макрос выдаст сообщение о невозможности вставки строки.

Последний раз редактировалось Aent; 31.07.2009 в 02:41.
Aent вне форума Ответить с цитированием
Старый 31.07.2009, 04:26   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,168
По умолчанию

Aent +1
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 31.07.2009 в 04:38.
SAS888 вне форума Ответить с цитированием
Старый 31.07.2009, 10:10   #8
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

чёрт возьми, код просто идеальный огромное спасибо
Tirendus вне форума Ответить с цитированием
Старый 31.07.2009, 12:49   #9
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Поскольку вопрос непосредственно касается темы поиска, думаю, создавать новую тему не рационально.

В процессе работы с этим поиском я понял, что его нужно применять еще в одном месте, без всяких проверок. Я бы поменял что нужно, но не совсем понимаю такой код, дальше примитивных циклов пока не зашел =\. В общем, по тому столбцу (все games расположены именно в этом столбце), где найдено поле "games", нужно выделить и копировать всё содержимое начиная от ячейки снизу от games до слов "Total Dounlowds" да, Downloads пишеться через "w" и с буквой "a", но тут какие-то иностранцы, потому копировать нужно всё до "Total Downloads" or "Total Dowulowds".

З.Ы. что-то многовато у меня вопросов сегодня
Tirendus вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных в нужные ячейки через VBA Detockin Microsoft Office Excel 0 12.03.2009 12:04
Печать листа через VBA Волк Microsoft Office Excel 1 27.02.2009 11:37
Ячейка как список (через VBA) maxic Microsoft Office Excel 5 23.01.2009 00:10
[vba]поиск по сторокам в excel CJartem Microsoft Office Excel 9 19.05.2008 10:31

Реклама для незарегистрированных, регистрация на форуме