powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / удаление строк в большом Ексель файле
10 сообщений из 35, страница 2 из 2
удаление строк в большом Ексель файле
    #37775194
leha013-01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо огромное!! все отлично работает ))
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #37971868
Sallador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZVIПроцедура очистки(удаления) строк в столбце ColNum со значениями DelValue:

Код: vbnet
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
'===================================================================================
' Sub         : DelRows(TableHeader,ColNum,DelValue)
' TableHeader : Range; table header range
' ColNum      : Long; column number with DelValue
' DelValue    : Variant; value of rows to be deleted
'-------------+---------------------------------------------------------------------
' VBA call    : DelRows ActiveSheet.Range("A1:H1"), 5, 0
'-------------+---------------------------------------------------------------------
' Created     : ZVI:2009:12:26 http://www.sql.ru/forum/actualthread.aspx?tid=722758
'-----------------------------------------------------------------------------------
Sub DelRows(TableHeader As Range, ColNum As Long, DelValue)
  Dim Arr(), r&, rs&, cs&, i&, v, ac
  With TableHeader.CurrentRegion
    rs = .Rows.Count - TableHeader.Row + .Row
    cs = .Columns.Count - TableHeader.Column + .Column
  End With
  With TableHeader.Resize(rs, 1)
    Arr() = .Offset(, cs).Value
    ' Check DelValue
    For Each v In .Offset(, ColNum - 1).Value
      r = r + 1
      If v <> DelValue Then
        i = i + 1
        Arr(r, 1) = 1
      End If
    Next
    If i < rs Then
      ' Freeze on
      With Application
        .ScreenUpdating = False
        .EnableEvents = False
        ac = .Calculation: .Calculation = xlCalculationManual
      End With
      ' Delete rows with DelValue in ColNum
      .Offset(, cs) = Arr
      .Resize(, cs + 1).Sort .Cells(1).Offset(, cs), 1, Header:=xlNo
      .Resize(, 1).Offset(, cs).ClearContents
      .Resize(rs - i, cs).Offset(i).Clear   ' или .Resize(rs - i).Offset(i).EntireRow.Delete
      ' Freeze off
      With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = ac
      End With
    End If
  End With
End Sub



Тестирование:
Код: vbnet
1.
2.
3.
Sub Test()
  DelRows ActiveSheet.Range("A1:H1"), 5, 0
End Sub




Помогите подредактировать скрипт удаления, мне нужно удалить все строки с инициалами и все строки где отчество заканчивается на "ИЧ" т.е. мужчин. Каким я не въехал где здесь определяется критерий удаления.
Формат записей:
900939 КНЯЗЕВА АННА ЯКОВЛЕВНА
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #37972003
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно не корректировать макрос... Можно даже использовать его самую первую версию.

Надо просто делать так: сначала в каком-нибудь одном столбце сформируйте с помощью формул некоторые значения, а затем уже примените DelRows к этому столбцу, указав значение, по которому нужно удалять...

Что же касается конкретной формулы для анализа ваших данных... Скажите, приведенный вами "пример формата" - это четыре столбца (поля) или два, или один? "Инициалы" - это что (одна буква, одна буква с точкой, как прописаны инициалы для неоднословных имён и отчеств)? Почему вы считаете, что только "ИЧ" в отчестве определяет мужчин (нет, конечно, "ич"=>муж, но муж<=>"ич", например, имя-отчество "Ариф Гора-Оглы")?
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #37973172
Sallador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Формат такой:


928596 | ШАЙКУЛОВА | АКТОТЫ | АЛИЕВНА | УЛ.ТЛЕНДИЕВА НУРГИСЫ | Д.40 | КВ.1 |

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

Если бы вы могли уточнить процедуру применения этого макроса
"сформируйте с помощью формул некоторые значения, а затем уже примените DelRows к этому столбцу, указав значение, по которому нужно удалять"
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #37973697
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так вам и надо тогда не "удалять мужчин" а "отобрать женщин"
Отчества у женщин заканчиваются на "НА". Остаются, правда, варианты - скажем "Мярьям Невретдин-кызы". Впрочем, тоже решаемые. Запишите формулу, например, в [J1]:
Код: vbnet
1.
=ЕСЛИ(ЕОШ(ПОИСК(ПРАВСИМВ(СЖПРОБЕЛЫ(D1);2);"НА ЗЫ"));0;1)

растяните на весь список - и удаляйте всех с нулём в столбце [J]
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #38021852
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если процедура разовая, то в Excel можно строки отфильтровать по условию, что значение оканчивается "ич" и удалить такие сроки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
удаление строк в большом Ексель файле
    #39000037
vad-anatolij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Где я должен прописать DelRows в Екселе, что бы он видел эту функцию?
Через "Разработчик" зашел в "Просмотр кода" и воткнул код, изменив на

Public Function DelRows
...
End Function

Засунул в макрос DelRows и запустил, получил "саб или функция не определены" , выделено именно DelRows.
Ткните пожалуйста в ошибку.
Спасибо.
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #39000049
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vad-anatolijТкните пожалуйста в ошибкуЧтобы "ткнуть", надо видеть весь проект. А то непонятно, что и куда Вы "воткнули", "засунули".
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #39000058
vad-anatolij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,
код не менял ,поэтому предположил, что у меня обычная ошибка новичка (совсем не работаю в Ексель в VBA), где то не там прописал паблик функцию и Ексель просто ее не видит. Подробно:
В раздел "General" прописал
Код: vbnet
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
'===================================================================================
' Sub         : DelRows(TableHeader,ColNum,DelValue)
' TableHeader : Range; table header range
' ColNum      : Long; column number with DelValue
' DelValue    : Variant; value of rows to be deleted
'-------------+---------------------------------------------------------------------
' VBA call    : DelRows ActiveSheet.Range("A1:H1"), 5, 0
'-------------+---------------------------------------------------------------------
' Created     : ZVI:2009:12:26 http://www.sql.ru/forum/actualthread.aspx?tid=722758
'-----------------------------------------------------------------------------------
Public Function DelRows(TableHeader As Range, ColNum As Long, DelValue)
  Dim Arr(), r&, rs&, cs&, i&, v, ac
  With TableHeader.CurrentRegion
    rs = .Rows.Count - TableHeader.Row + .Row
    cs = .Columns.Count - TableHeader.Column + .Column
  End With
  With TableHeader.Resize(rs, 1)
    Arr() = .Offset(, cs).Value
    ' Check DelValue
    For Each v In .Offset(, ColNum - 1).Value
      r = r + 1
      If v <> DelValue Then
        i = i + 1
        Arr(r, 1) = 1
      End If
    Next
    If i < rs Then
      ' Freeze on
      With Application
        .ScreenUpdating = False
        .EnableEvents = False
        ac = .Calculation: .Calculation = xlCalculationManual
      End With
      ' Delete rows with DelValue in ColNum
      .Offset(, cs) = Arr
      .Resize(, cs + 1).Sort .Cells(1).Offset(, cs), 1, Header:=xlNo
      .Resize(, 1).Offset(, cs).ClearContents
      .Resize(rs - i, cs).Offset(i).Clear   ' или .Resize(rs - i).Offset(i).EntireRow.Delete
      ' Freeze off
      With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = ac
      End With
    End If
  End With
End Function



В Макрос, который находится в нужном файле Ексель вставил
Код: vbnet
1.
2.
3.
4.
Sub Макрос2()
'
DelRows ActiveSheet.Range("P:P"), 5, 0
End Sub



При запуске Макроса 2 выдает сообщение
Microsoft Visual Basic
---------------------------
Compile error:

Sub or Function not defined
---------------------------
ОК Справка
---------------------------

Спасибо.
...
Рейтинг: 0 / 0
удаление строк в большом Ексель файле
    #39000270
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vad-anatolijВ раздел "General" прописалВ раздел "General" какого модуля? Это должен быть обычный модуль (Insert - Module) в той же книге, не ЭтаКнига, не Лист1. Проще всего поместить процедуру рядом с Sub Test()
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / удаление строк в большом Ексель файле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]