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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2010, 09:34   #1
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию Проверка условия. Поправить макрос

Открываем оба файла.
В файле "kassa_2004.xls" жмем кнопку ДЕБЕТ
Заполняется ненужная строка 657
Если еще раз нажать заполняется строка 658

Как в макросе задать условие, что если в столбе G, не заполнена дата, тогда игнорировать строку
Вложения
Тип файла: rar 2004.rar (49.6 Кб, 16 просмотров)
kzld вне форума Ответить с цитированием
Старый 21.05.2010, 10:05   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Надеюсь, Вы сами писали программу, поэтому привожу прмер кода. Я бы сделал примерно так:
Код:
Public Sub kassadebet01()
    Range("B8:C655").ClearContents 'Очищаем диапазон
    With Workbooks("allwork-2004-00-year.xls").Sheets("01")
        For i = 3 To 500         'Цикл по строкам источника'
            'Если Кредит = 441 и ячейка даты не пустая'
            If .Cells(i, 5).Value = 441 And .Cells(i, 7).Value <> "" Then
                For k = 8 To 655     'Цикл по строкам приёмника'
                    'Если ячейка-приёмник пустая и даты совпадают'
                    If Cells(k, 2).Value = 0 And Cells(k, 1).Value = .Cells(i, 7).Value Then
                        Cells(k, 2).Value = .Cells(i, 9).Value
                        Cells(k, 3).Value = .Cells(i, 8).Value
                        Exit For
                    End If
                Next k
            End If
        Next i
    End With
End Sub
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 10:52   #3
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
Надеюсь, Вы сами писали программу, поэтому привожу пример кода.
Нет, не сам. Помогали знатоки с этого форума

Макрос работает. Спасибо.
Попытался переделать макрос под правую сторону таблицы и запутался.
VBA только изучаю.
Буду признателен, если Вы поможете модифицировать макрос для правой половины таблицы kassa_2004.xls
kzld вне форума Ответить с цитированием
Старый 21.05.2010, 11:03   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Код:
Public Sub kassakredit01()
    Range("J8:J655").ClearContents   'Очищаем диапазон'
    With Workbooks("allwork-2004-00-year.xls").Sheets("01")
        For i = 3 To 500  'Цикл по строкам источника'
            'Если Кредит = 441 и ячейка даты не пустая'
            If .Cells(i, 6).Value = 441 And .Cells(i, 7).Value <> "" Then
                For k = 8 To 655  'Цикл по строкам приёмника'
                    'Если ячейка-приёмник пустая и даты совпадают'
                    If Cells(k, 10).Value = 0 And Cells(k, 1).Value = .Cells(i, 7).Value Then
                        Cells(k, 10).Value = .Cells(i, 12).Value
                        Cells(k, 11).Value = .Cells(i, 8).Value
                        Exit For
                    End If
                Next k
            End If
        Next i
    End With
End Sub
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 11:13   #5
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Работает, большое спасибо.
Как модифицировать макрос, если листов в обоих книгах будет по 12 штук, по количеству месяцев. Т.е. жмём кнопочку и макрос одним махом заполняет целый год
kzld вне форума Ответить с цитированием
Старый 21.05.2010, 11:32   #6
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Например, так:
Код:
Public Sub kassadebet01()
    For j = 1 To Worksheets.Count
        Worksheets(j).Activate
        Range("B8:C655").ClearContents
        With Workbooks("allwork-2004-00-year.xls").Sheets(j)
            For i = 3 To 500
                If .Cells(i, 5).Value = 441 And .Cells(i, 7).Value <> "" Then
                    For k = 8 To 655
                        If Cells(k, 2).Value = 0 And Cells(k, 1).Value = .Cells(i, 7).Value Then
                            Cells(k, 2).Value = .Cells(i, 9).Value
                            Cells(k, 3).Value = .Cells(i, 8).Value
                            Exit For
                        End If
                    Next k
                End If
            Next i
        End With
    Next j
End Sub

Public Sub kassakredit01()
    For j = 1 To Worksheets.Count
        Worksheets(j).Activate
        Range("J8:J655").ClearContents
        With Workbooks("allwork-2004-00-year.xls").Sheets(j)
            For i = 3 To 500
                If .Cells(i, 6).Value = 441 And .Cells(i, 7).Value <> "" Then
                    For k = 8 To 655
                        If Cells(k, 10).Value = 0 And Cells(k, 1).Value = .Cells(i, 7).Value Then
                            Cells(k, 10).Value = .Cells(i, 12).Value
                            Cells(k, 11).Value = .Cells(i, 8).Value
                            Exit For
                        End If
                    Next k
                End If
            Next i
        End With
    Next j
End Sub
Только следи, чтобы листы шли последовательно
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 11:41   #7
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
Только следи, чтобы листы шли последовательно
В этом то и задача.
В файле источнике имеются лишние листы, на которых суммируются данные по кварталам года, по итогам за весь год, лист с шаблонами.
Как уговорить макрос просматривать только определённые листы файла источника ? Файл источник и файл приёмник имеют одинаковые наименования листов
kzld вне форума Ответить с цитированием
Старый 21.05.2010, 11:54   #8
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

а по какому принципу изменяются имена листов? Если имеется чёткая закономерность, то можно сделать
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 12:07   #9
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
а по какому принципу изменяются имена листов? Если имеется чёткая закономерность, то можно сделать
Наименования листов не изменяются. Среди всех листов книги имеются для данной задачи не нужные. С них брать данные не надо. Имена листов к книге
01,02,03,1_kv,04,05,06,2_kv,07,08,0 9,3_kv,10,11,12,year
kzld вне форума Ответить с цитированием
Старый 21.05.2010, 12:16   #10
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Имена листов в книгах соответствуют? Если нет, то укажите таблицу соответствия
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка условия в ячейках provodnikam Microsoft Office Excel 4 26.11.2009 11:12
сумма исходя из условия - макрос broadcast Microsoft Office Excel 4 16.11.2009 08:12
помогите поправить макрос tem1112 Microsoft Office Excel 7 06.11.2009 21:25
Проверка условия artemavd БД в Delphi 21 07.05.2009 18:20
Проверка условия Luciferium БД в Delphi 1 05.06.2007 16:23