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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 11:48   #1
MASRUB
 
Регистрация: 24.12.2010
Сообщений: 8
По умолчанию Если выполняется 2 условия произвести копирование ячеек

Хотелось бы вот что: Если в столбце N встречается пустая ячейка, и рядом с ней в ячейке M не пусто,(пример таких ячеек выделил желтым) производить копирование на отдельный лист, что бы отразить данные в виде таблицы (которая приведена ниже в документе). Вообще в идеале я хочу сделать, чтобы из одного фала брались данные удовлетворяющие условиям (как желтая выделенная ячейка) в файле может быть около 20 листов, и все эти данные собирались в одну таблицу отдельного файла. В принципе, что касается проверки на пустые непустые ячейки я более менее разобрался, а вот что касается копирования, никак не могу понять как это реализуется в виде формулы. Похоже что никак, нужно писать макрос. Подскажите пожалуйста как реализовать проверку на два вышеописанных условия, и копирование ячеек в виде макроса
Вложения
Тип файла: rar post_187637.rar (5.4 Кб, 30 просмотров)

Последний раз редактировалось MASRUB; 29.12.2010 в 22:25.
MASRUB вне форума Ответить с цитированием
Старый 31.12.2010, 17:29   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Макрос Start
Вложения
Тип файла: rar Macro.rar (15.5 Кб, 133 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.01.2011, 10:36   #3
MASRUB
 
Регистрация: 24.12.2010
Сообщений: 8
По умолчанию

Большое спасибо!!!
MASRUB вне форума Ответить с цитированием
Старый 12.10.2011, 19:59   #4
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

Всем привет. Помогите, пожалуйста.
Проблема такая же как и в теме.
Я проверяю отчеты накладывая формулы в столбцах с СС по СМ (которые сделала сама, конечно возможно далеко до идеала но главное что работают), каждый столбец соответствует определенному типу ошибок если формулы отображают результат. После чего я с помощью фильтра копирую в ручную все данные строки по каждому из столбцов по очереди на отдельный лист «ОШИБКИ» и вставляю строку с тексом ошибки. Мне бы очень, очень хотелось бы автоматизировать свою работу.

На форуме нашла много тем, но на мой взгляд для меня более менее подходит вариант из темы http://programmersforum.ru/showthrea...E2%E0%ED%E8%E5 предложенный VictorM (25.11.2010, 19:25) или вариант который предложил doober в данной теме. Попыталась, данные макросы переделать под себя, но у меня не получается .

Помогите, пожалуйста. Мне нужно примерно так: 1. лист должен создаваться не в новой книге, а в этой же. 2. Копировать всю строку с графы А по графу AL, если ячейка (соответственно этой строки) не пустая в графе СС, потом повторить поиск также с графами CD, CF, CG, CH, CI, CJ, CM. 3. Чтоб при нахождении данного условия, например в графе СС, копировались не только строки, но и текст ошибки. Текс ошибки находится в ячейках «1» соответственно графам, т.е. для графы СС в ячейки СС1 и т.д.

Сам отчет и результат, что должно получиться приложила в примере.
ЗЫ. у нас эксель 2007, но отчеты присылают в 2003.
Вложения
Тип файла: rar А.rar (172.7 Кб, 26 просмотров)
АННА-ЕАО вне форума Ответить с цитированием
Старый 12.10.2011, 22:18   #5
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Как-то так, наверное:
Код:
Sub ertert()
Dim ErrList(), i&, j&, rng As Range: Application.ScreenUpdating = False
ErrList = Array(81, 82, 84, 85, 86, 87, 88, 91)    'СС, потом повторить поиск также с графами CD, CF, CG, CH, CI, CJ, CM)

Set rng = Range("A8:CM" & Cells(Rows.Count, 1).End(xlUp).Row)
rng.AutoFilter: j = 1

With Sheets("ОШИБКИ")
    .UsedRange.Clear
    For i = 0 To UBound(ErrList)
        rng.AutoFilter Field:=ErrList(i), Criteria1:="<>"
        .Cells(j, 1).Value = Cells(1, ErrList(i)).Value
        ActiveSheet.AutoFilter.Range.Resize(, 38).SpecialCells(xlVisible).Copy .Cells(j + 1, 1)
        rng.AutoFilter Field:=ErrList(i)
        j = .Cells(Rows.Count, 2).End(xlUp).Row + 2
    Next i
    .Activate
End With

rng.AutoFilter: Application.ScreenUpdating = True
End Sub
Запускаем с активного листа "170".
nilem вне форума Ответить с цитированием
Старый 13.10.2011, 08:26   #6
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

nilem СПАСИБО ОГРОМНОЕ. Это то, что нужно.
Попробовала на других отчетах – работает.

Только при отсутствии условий почему то все равно выводит текст ошибки и «шапку» (строка A4:AL4). Желательно что бы если совпадений не найдено по конкретной графе то и выводить совсем ни чего не надо по данной графе. Как это исправить?

И ещё, подскажите , что нужно изменить в Вашем макросе, чтобы:
1. Если условие выполняется то копировалась всегда шапка отчета с А4:А8 по AL4:AL8.
2. Что бы лист «ОШИБКИ» создавался сам автоматически, потом в него вносились данные.
3. Чтобы текст с ошибками (содержащейся в 1 ячейках столбцов) выводился всегда в определенном формате и строка заливалась цветом (например: желтым, шрифт черный, жирный, курсив, размер 12).
т.е. в итоге максимально приблизить итог к моему прикрепленному примеру в листе "ошибки".
АННА-ЕАО вне форума Ответить с цитированием
Старый 13.10.2011, 10:30   #7
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

nilem При выполнении макроса почему то слетают (удаляются) фильтры на основном листе, это как то можно поправить?
АННА-ЕАО вне форума Ответить с цитированием
Старый 13.10.2011, 11:20   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Ну вот, пробуйте так:
Код:
Sub ertert()
Dim ErrList(), i&, j&, rng As Range, shapka As Range, rf As Range, wsh As Worksheet

With Application: .ScreenUpdating = 0: .DisplayAlerts = 0: End With
ErrList = Array(81, 82, 84, 85, 86, 87, 88, 91)    'СС, потом повторить поиск также с графами CD, CF, CG, CH, CI, CJ, CM)

Set wsh = ActiveSheet: Set shapka = Range("A4:AL7")
Set rng = Range("A8:CM" & Cells(Rows.Count, 1).End(xlUp).Row)
rng.AutoFilter: j = 1

On Error Resume Next
Sheets("ОШИБКИ").Delete
On Error GoTo 0

With Sheets.Add
    For i = 1 To shapka.Columns.Count
        Columns(i).ColumnWidth = wsh.Columns(i).ColumnWidth
    Next

    For i = 0 To UBound(ErrList)
        rng.AutoFilter Field:=ErrList(i), Criteria1:="<>"
        Set rf = wsh.AutoFilter.Range.Resize(, 38).SpecialCells(xlVisible)
        If rf.Cells.Count > 38 Then
            With Cells(j, 1)
                .Value = wsh.Cells(1, ErrList(i)).Value
                With .Font: .Bold = True: .Italic = True: .Size = 12: End With
                .Resize(, 26).Interior.Color = vbYellow
                shapka.Copy .Offset(1)
            End With
            rf.Copy .Cells(j + 5, 1)
        End If
        rng.AutoFilter Field:=ErrList(i)
        j = .Cells(Rows.Count, 2).End(xlUp).Row + 2
    Next i
    .Name = "ОШИБКИ"
End With

'rng.AutoFilter
With Application: .ScreenUpdating = 1: .DisplayAlerts = 1: End With
End Sub
Кошмар какой-то
nilem вне форума Ответить с цитированием
Старый 13.10.2011, 11:39   #9
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

Уважаемый nilem !!! ОГРОМНОЕ СПАСИБО! Дай Бог Вам здоровья! Какое счастье все работает!!!

А почему "Кашмар какой то"?
АННА-ЕАО вне форума Ответить с цитированием
Старый 13.10.2011, 12:16   #10
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от АННА-ЕАО Посмотреть сообщение
...А почему "Кашмар какой то"?
Слишком длинный код, мне такие не нравятся.
Ну, главное, чтобы работал как нужно
nilem вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет суммы ячеек с разных страниц при выполнении условия sttafi Microsoft Office Excel 27 07.12.2012 17:50
Динамически изменяемый диапазон ячеек от условия Tidus Microsoft Office Excel 4 06.06.2010 10:32
Копирование ячеек.. Алексей11111 Microsoft Office Excel 1 20.02.2010 14:03
Как произвести простые вычисления ячеек в VB segail Microsoft Office Excel 18 13.12.2009 21:42
Написать программу в результате выполнения которой булевская переменная t получает true если выполняется Корделия Общие вопросы C/C++ 1 28.04.2009 13:53