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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2013, 16:33   #1
Extril
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 33
По умолчанию Выборка по дате

Добрый день , уважаемые форумчане. У меня вопрос, возможно ли переделать макрос, который в открытой книге просматривает лист2 и лист3, по столбцу F (столбец содержит даты). Когда дата оказывается в диапазоне (сегодня+7 дней), найденные строки копируются в лист 1.
Попробовал макрос следующего содержания

Код:
Private Sub VIBOR()
Dim M()
Dim ST
Dim R As Integer
Dim C As Integer
Dim S As Integer
Dim N As Date
Dim K As Date
Dim D As Date
Dim Z As Integer

Лист1.Select
N = Лист1.Range("C1").Value
K = Лист1.Range("E1").Value
Z = 10

ST = Лист1.Columns(1).Rows(65536).End(xlUp).Row
M = Лист1.Range(Cells(7, 1), Cells(ST, 11)).Value

Лист2.Select
  Лист2.Rows("10:1000").ClearContents   '
For R = 1 To ST - 6
    For C = 5 To 10
        D = M(R, C)
            If D >= N And D <= K Then
                For S = 1 To 10
                Лист2.Cells(Z, S) = M(R, S)
                Next S
                Z = Z + 1
            End If
    Next C
Next R
End Sub
Но мне не хватает знаний адаптировать его под свои условия, подскажите пожалуйста, что в нем можно изменить пытливому неучу ))))))



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 09.12.2013 в 23:18.
Extril вне форума Ответить с цитированием
Старый 09.12.2013, 17:45   #2
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

можно как-то так:
Код:
Option Explicit

Sub copy_date()
Dim i&, sh As Worksheet, iCell As Range, iDate As Date, lsRow&

    Set sh = ThisWorkbook.Sheets("Лист1")
    
    iDate = Date+7
    For i = 1 To ThisWorkbook.Sheets.Count
        If Sheets(i).Name = "Лист2" Or Sheets(i).Name = "Лист3" Then
            With Sheets(i)
                For Each iCell In .Range("F2:F" & .Cells(Rows.Count, "F").End(xlUp).Row)
                    If iCell = iDate Then lsRow = sh.Cells(Rows.Count, "A").End(xlUp).Row + 1: _
                    .Range("A" & iCell.Row & ":F" & iCell.Row).Copy Destination:=sh.Range("A" & lsRow)
                Next iCell
            End With
        End If
    Next i
End Sub
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 09.12.2013 в 17:59.
staniiislav вне форума Ответить с цитированием
Старый 10.12.2013, 05:53   #3
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
в диапазоне (сегодня+7 дней)
это точно не
Код:
 If iCell = iDate
тогда уж вот так
Код:
Option Explicit

Sub copy_date()
Dim i&, sh As Worksheet, iCell As Range, iDate As Date, lsRow&

    Set sh = ThisWorkbook.Sheets("Лист1")
    
    iDate = Date + 7
    For i = 1 To ThisWorkbook.Sheets.Count
        If Sheets(i).Name = "Лист2" Or Sheets(i).Name = "Лист3" Then
            With Sheets(i)
                For Each iCell In .Range("F1:F" & .Cells(Rows.Count, "F").End(xlUp).Row)
                    If ((iCell <= iDate) And (iCell >= Date)) Then lsRow = sh.Cells(Rows.Count, "F").End(xlUp).Row + 1: _
                   .Range("A" & iCell.Row & ":F" & iCell.Row).Copy Destination:=sh.Range("A" & lsRow)
                Next iCell
            End With
        End If
    Next i
End Sub
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 10.12.2013 в 05:55.
SaLoKiN вне форума Ответить с цитированием
Старый 10.12.2013, 10:12   #4
Extril
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 33
По умолчанию

Спасибо. работает. А можно уточняющий вопрос, как сделать, что бы при каждом запуске макроса, старые данные очищались. Поиск шел также по второму условию, если в столбце A данные сеть, а в F пусто, то такая строка также копируется
Extril вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выборка по дате Anariem SQL, базы данных 1 31.07.2013 08:17
выборка данных по дате Graf_Vishin Microsoft Office Excel 2 20.12.2012 14:34
Выборка по последней дате Ceme4kin Microsoft Office Access 2 12.11.2010 19:51
выборка по дате vaga Microsoft Office Access 10 11.10.2009 04:21