Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 13:54   #1
Zigizman
 
Регистрация: 19.12.2010
Сообщений: 4
Печаль Вопрос по использованию циклов и индексации листов и ячеек.

Добрый день.

Я только начинаю изучать Exel и сейчас столкнулся со следующим вопросом. Есть книга с двумя листами. На одном листе идут массивы данных, перед каждым массивом в столбце A записан его уникальный идентификатор. На втором список идентификаторов. Мне нужно, что бы на второй лист из каждого массива копировалось последнее значение в столбце K и заносилось на второй лист, в соответствии с идентификатором. Значения предпоследней ячейки для всех массивов одинаковы.
Как можно это реализовать в VBA?
Заранее спасибо за помощь.
Zigizman вне форума Ответить с цитированием
Старый 19.12.2010, 14:17   #2
Zigizman
 
Регистрация: 19.12.2010
Сообщений: 4
По умолчанию

Если на псевдо коде то должно быть примерно так берем значение из столбца A1 лист 2 ищем его в столбце А листа 1 заоминаем номер строки в переменную i далее идем по столбцу K от позиции i пока не найдем ключевое слово одинаковое для всех ячеек идущих перед нужными копируем текущее значение i+1 и копируем столбец k позиция i+1 на лист2 напротиф идентификатора через столбец от него. Берем следующий и так пока не встретим пустую ячейку на листе 2 столбец A но как это сделать в VBA и какими циклами я не очень понимаю.
Zigizman вне форума Ответить с цитированием
Старый 19.12.2010, 14:56   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вы пример в файле приложите - тогда можно написать конкретный код.
Имхо, тут возможно можно использовать CurrentRegion, но надо видеть файл.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.12.2010, 15:14   #4
Zigizman
 
Регистрация: 19.12.2010
Сообщений: 4
По умолчанию

Пример таблицы, реально там порядка 10000 строк
Вложения
Тип файла: rar отч.rar (6.6 Кб, 13 просмотров)
Zigizman вне форума Ответить с цитированием
Старый 19.12.2010, 17:11   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я как-то всё больше на массивах...

Код:
Sub tt()
    Dim a(), ra As Range, cc As Range, i As Long, x As Long, iFind As Boolean
    
    'диапазон критериев
    Set ra = Sheets(2).Range("A1", Sheets(2).Range("A" & Rows.Count).End(IIf(Len(Sheets(2).Range("A" & Rows.Count)), xlDown, xlUp)))
    x = 1
    'диапазон поиска - в массив
    a = Sheets(1).Range("A1", Sheets(1).Range("K" & Rows.Count).End(IIf(Len(Sheets(1).Range("K" & Rows.Count)), xlDown, xlUp))).Value

'перебор критериев
    For Each cc In ra
    'цикл по массиву, для экономии продолжаем с места предыдущего результата
        For i = x To UBound(a)
        'если нашли критерий, разрешаем искать число
            If InStr(a(i, 1), "Текст: " & cc.Value) > 0 Then iFind = True
            'если таможня дала добро, то
            If iFind Then
                If a(i, 11) = "Всегда  одинаково" Then cc.Offset(, 2) = a(i + 1, 11): iFind = False: x = i: Exit For
            End If
        Next
    Next

End Sub
Вложения
Тип файла: rar отч.rar (13.6 Кб, 10 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 19.12.2010 в 17:21.
Hugo121 вне форума Ответить с цитированием
Старый 19.12.2010, 17:46   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Похоже Find не работает с объединенными ячейками (это действительно так?). Если можно отказаться от объединенных, то вот вариант (не массивы):
Код:
Sub ert()
Dim poz As Range, rng As Range, fr As Range
Application.ScreenUpdating = False
With Sheets("Лист1")
    Set rng = Range(.[a1], .Cells(Rows.Count, 1).End(xlUp))
End With 'активный лист Лист2
For Each poz In Range([a1], Cells(Rows.Count, 1).End(xlUp))
    Set fr = rng.Find(poz)
    If Not fr Is Nothing Then poz(, 3).Value = fr(12, 11).Value
Next
End Sub
nilem вне форума Ответить с цитированием
Старый 19.12.2010, 19:17   #7
Zigizman
 
Регистрация: 19.12.2010
Сообщений: 4
По умолчанию

Всем огромное спасибо за помощь. Завтра протестирую обезательно отпишусь.
Zigizman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по классам делфи и их использованию. Solrainer7 Общие вопросы Delphi 6 12.07.2010 19:16
Вопрос по использованию Worksheet? Vadim_abs Microsoft Office Excel 8 11.11.2009 11:54
Вопрос по использованию SQLite в delphi ROFF Помощь студентам 1 06.05.2009 09:26
Вопрос по использованию OLE yngwie Общие вопросы C/C++ 0 19.03.2009 00:56
вопрос по использованию конструкции if zetrix Microsoft Office Excel 0 31.10.2006 07:52