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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2012, 16:46   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Макрос переноса данных при пересечении временных диапазонов

Добрый день, уважаемые форумчане!
Есть потребность переносить данные с накопительного листа (Лист1) при условии, если, диапазон дат, выбираемый Пользователем на листе Статистика в ячейках С2 и Е2, пересекается с диапазоном дат в столбцах Е и F на Листе1. Вот я тут накидал код, но он выводит только первого найденного:

Код:
Sub Данные()
Application.ScreenUpdating = False
Dim iLastRow1 As Long
Dim sh1 As Worksheet, sh2 As Worksheet


    Set sh1 = Sheets("Лист1")
    Set sh2 = Sheets("Статистика")
    iLastRow1 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
    For k = 2 To 2000
    If sh2.Range("C2").Value >= sh1.Cells(k, 5).Value And sh2.Range("C2").Value < sh1.Cells(k, 6).Value Then
    sh2.Cells(iLastRow1 + 1, 1) = sh1.Cells(k, 3)
    Exit For
    End If
    Next
    
Application.ScreenUpdating = True
End Sub
Это первое. Второе, условие

Код:
If sh2.Range("C2").Value >= sh1.Cells(k, 5).Value And sh2.Range("C2").Value < sh1.Cells(k, 6).Value Then
не совсем корректное. Думается надо так:

Код:
If sh2.Range("C2").Value >= sh1.Cells(k, 5).Value Or sh2.Range("E2").Value <= sh1.Cells(k, 6).Value Is Nothing Then
Подскажите, как будет правильней и точнее? Файл во вложении.
Пытался формулами вытащить, но при повторении Плательщика находило только первого в списке и подтягивало только его данные.
Заранее спасибо!
Вложения
Тип файла: rar пример.rar (20.0 Кб, 11 просмотров)
strannick вне форума Ответить с цитированием
Старый 22.09.2012, 18:28   #2
88ra
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 24
По умолчанию

Код:
    For k = 2 To 2000
        If sh2.Range("C2").Value >= sh1.Cells(k, 5).Value And sh2.Range("E2").Value <= sh1.Cells(k, 6).Value Then
            iLastRow1 = iLastRow1 + 1
            sh2.Cells(iLastRow1, 1) = sh1.Cells(k, 3)
        
        End If
    Next
88ra вне форума Ответить с цитированием
Старый 23.09.2012, 12:08   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос переноса данных TbIL Microsoft Office Excel 3 15.02.2012 21:34
Макрос переноса данных. madex Microsoft Office Excel 13 18.12.2011 16:44
макрос для переноса введенных данных vostok Microsoft Office Excel 2 27.11.2010 11:16
Макрос для переноса данных в виде таблицы из Excel в Word Jevgeni85 Microsoft Office Excel 2 25.08.2010 16:52
Как написать макрос для копирования диапазонов данных с приращением Yevgen_pro Microsoft Office Excel 0 09.09.2009 16:12