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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 14:20   #21
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
надо перед макросом удалить те строки, у которых в колонках минус (колонка "V" или ''W")
Так надо было сразу сказать...
Если нужно, можно изменить макрос, чтобы он не обрабатывал строки с отрицательными значениями.
EducatedFool вне форума
Старый 04.02.2009, 14:43   #22
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

А можно отдельно макрос ,который бы удалял всю строку ,если в V или W стоит минус?
Рома
Romuald вне форума
Старый 04.02.2009, 15:02   #23
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
А можно отдельно макрос
Можно:
Код:
Sub УдалитьСтрокиСОтрицательнымиЗначениями()
    Dim pi As New ProgressIndicator
    pi.Show "Формирование отчётов": pi.ShowPercents = True

    Dim coll As New Collection, ADDRcoll As New Collection
    Dim ra As Range: Set ra = ActiveSheet.UsedRange.Offset(1)

    Const A$ = "$", b$ = ",", c$ = ":": n = 0
    Dim ro As Range, cv As String
    pi.StartNewAction 0, 50, , "Обработка строк ...": st = 20
    pi.CurActionCount = ra.Rows.Count / st
    On Error Resume Next

    With ra.Parent
        addr = ""
        For Each ro In ra.EntireRow
            rn = ro.Row: If rn Mod st = 2 Then pi.CurAction 0, 0, , , "Обрабатывается строка  " & rn
            DoEvents
            If ro.Cells(22) < 0 Or ro.Cells(23) < 0 Then
                n = n + 1
                r = A$ & CStr(rn): addr = addr & b$ & r & c$ & r:
                If Len(addr) > 200 Then addr = Mid$(addr, 2): ADDRcoll.Add addr: addr = ""
            End If
        Next
        If Len(addr) > 1 Then addr = Mid$(addr, 2): ADDRcoll.Add addr: addr = ""

        pi.StartNewAction 50, 100, , "Удаление строк с отрицательными значениями...": st = 4

        addrc = ADDRcoll.Count: pi.CurActionCount = addrc / st
        For i = addrc To 1 Step -1
            DoEvents
            .Range(ADDRcoll(i)).Delete    ' удаляем ненужные строки блоками по нескольку штук сразу (так быстрее всего)
            If i Mod st = 1 Then pi.CurAction 0, 0, , , "Удаляется блок ненужных строк  " & addrc - i & " из " & addrc
        Next
    End With
    pi.Hide
    MsgBox IIf(n > 0, "Удалено  " & n & "  строк", "Строки для удаления не найдены"), vbInformation, "Готово"
End Sub
В коде, конечно, много лишнего, но он работает.
EducatedFool вне форума
Старый 05.02.2009, 11:51   #24
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

Все работает, спасибо!!
Romuald вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с макросом twolfy Microsoft Office Excel 5 06.10.2008 10:44
хелп с макросом Aivar Microsoft Office Word 8 28.09.2008 02:10
Помогите с макросом SoFuWa Microsoft Office Excel 7 15.08.2008 15:26
макросом дополнить название Romuald Microsoft Office Excel 2 22.05.2008 17:31