Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 53
1

Макрос для удаления строк с нулевыми значениями,сортировкой по нужным листам

14.01.2019, 12:42. Показов 4736. Ответов 6

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Решил сделать макросец для облегчения работы,но что-то идёт определенно не так,встал в тупик
В общем задумка такова:для листов "пример N" (в примере их три,на деле штук 9) надо заменить формулы значениями (так как потом листы выдергиваются для различных операций), удаление строк где в 2017 и 2018 стоят нули, и сортировка от максимума к минимуму. Пытался писать пару кодиков,вот первый пример:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Sub PRIMER()
'
Application.ScreenUpdating = False 'отключение обновления экрана
Dim lRow As Long 'переменные
Dim iCntr As Long
Dim sh As Object
lRow = 12
  For Each sh In ThisWorkbook.Sheets 'попытка сделать цикл для листов
If sh.Name <> "Ñâîä" Then
    For iCntr = lRow To 1 Step -1 'удаление строк с нулевыми значениями
        If Cells(iCntr, 2).Value = "0" And Cells(iCntr, 3).Value = "0" Then
            Rows(iCntr).Delete
        End If
    Next
    Range("B2:C12").Select 'замена формул значениями
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("A2:D12").Select 'сортировка
    Range("D2").Activate
    ActiveWorkbook.ActiveWorksheets.Sort.SortFields.Clear
    ActiveWorkbook.ActiveWorksheets.Sort.SortFields.Add Key:=Range( _
        "D2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.ActiveWorksheets.Sort
        .SetRange Range("A2:D12")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select
    End If
    Next
Application.ScreenUpdating = True
End Sub
Так как вышенаписанный код не соизволил работать,пытался убить excel ложкой (написать для каждого листа отдельную операцию и вызывать через суммирующий макрос с помощью call или Application.Run), но почему-то он не понимает какие макросы я вызываю (хранятся в личной книге макросов,при обращении скажем Application.Run "PERSONAL.XLSB!Пример1" выдает ошибку что такого макроса не существует,хотя название модуля и макроса совпадают
Прошу собсна указать на недочёты А также вопрос - если есть несколько листов (штук 5-6) которые не надо задействовать и штук 9 листов для которых пишется цикл,как указать чтобы выбирал только из предложенного ряда?или как-то добавить в список исключений листы которые трогать не надо?
Вложения
Тип файла: xlsx Пример.xlsx (13.6 Кб, 19 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2019, 12:42
Ответы с готовыми решениями:

Скрытие строк с нулевыми значениями в столбцах
Здравствуйте! подскажите, имеется таблица первый столбик подразделение остальные три столбца с...

Макрос удаления строк
Помогите написать макрос. Нужно удалить строку в таблице, которая например, выделена цветом...

Макрос для удаления строк с уникальными значениями столбца
Друзья, помогите с маккросом, в приложении файлик, в нем таблица exel из 3-х столбцов, в 3-ем...

Макрос для удаления строк
как удалить макросом из word строки типа: 0 : 1 4 : 5 6

6
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 53
14.01.2019, 12:52  [ТС] 2
В 9 строке кода заместо иероглифов стоит "Свод"
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
14.01.2019, 16:52 3
Andrey_konoval,

как пример...
Кликните здесь для просмотра всего текста

Sub PRIMER()
'
Application.ScreenUpdating = False
Dim lRow As Long
Dim iCntr As Long
Dim sh As Object
lRow = 12
Dim ST()
ST = Array("B", "C") ' Массив с именами листов, в которых удаляем строки
For Each sh In ThisWorkbook.Sheets
For k = LBound(ST) To UBound(ST)
If sh.Name = ST(k) Then
With sh
For iCntr = lRow To 1 Step -1
If .Cells(iCntr, 2).Value = 0 And .Cells(iCntr, 3).Value = 0 Then
.Rows(iCntr).Delete Shift:=xlUp
Else
.Range(.Cells(iCntr, 2), .Cells(iCntr, 4)).Value = .Range(.Cells(iCntr, 2), .Cells(iCntr, 4)).Value
End If

Next
End With
End If
Next
Next
End Sub




Попробуйте сортировку сами...
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.01.2019, 18:05 4
Andrey_konoval, Если уверены, что все листы, с перечисленными именами, наличествуют в активной книге, то можно и так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Test()
    Dim a, ws As Worksheet, r As Range, rw&
    a = Array("Пример1", "Пример2", "Пример3")
    
    For Each ws In ActiveWorkbook.Worksheets(a)
        Set r = ws.Range("B2:C12")
        r = r.Value
        For rw = r.Rows.Count To 1 Step -1
            If Application.CountIf(r.Rows(rw), 0) = 2 Then r(rw).EntireRow.Delete
        Next
        ws.Range("A2:D12").Sort ws.Range("D2"), xlDescending, Header:=xlGuess
    Next
End Sub
0
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 53
15.01.2019, 05:43  [ТС] 5
Почему-то код работает неккоректно,первый лист обрабатывает как надо,а остальные два листа удаляет почти все строки

Добавлено через 9 минут
Заменил в массиве на имена своих листов,код не работает
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
15.01.2019, 12:15 6
Лучший ответ Сообщение было отмечено Andrey_konoval как решение

Решение

Andrey_konoval, Вам предлагалось два варианта, от каком из них идёт речь ? Если о моём, то я не поленился и проверил на выложенном файле, всё нормально, никаких лишних удалений.

Добавлено через 1 час 50 минут
Походу я тестировал первый вариант в общем, вместо r(rw) просто напишите r(rw, 1)
1
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 53
16.01.2019, 04:13  [ТС] 7
Да,проверил,в таком виде код работает корректно,спасибо
0
16.01.2019, 04:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2019, 04:13
Помогаю со студенческими работами здесь

Скрытие строк в таблице с нулевыми значениями
Информации о срытии строк много, но нужной мне, к сожалению, не нашла, помогите пожалуйста со...

Удаление Строк С нулевыми значениями во всех листах
Здравствуйте. Я не давно начал познавать мир VBA, поэтому испытываю некоторые трудности. Имеется...

Создать внешний скрипт (макрос) для удаления строк с объеденными ячейками в нескольких файлах Excel в одной папке
Например есть в папке несколько файлов Excel, нужно чтобы при запуске скрипта в этих файлах...

Макрос удаления строк и столбцов
Уважаемые коллеги, здравствуйте! Подскажите пожалуйста по данной теме. Вопрос следующий: Создана...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru