Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удалить строки в умной таблице, при условии совпадения значе - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Удалить строки в умной таблице, при условии совпадения значе
AndreiSMT Дата: Среда, 30.07.2025, 15:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

2019
Ребят, помогите пожалуйста с макросом.
Нужно сравнить в умной таблице tblData1C графу Код с такой же графой таблицы tblDel, и все строки, в которых совпадают значения, нужно удалить в таблице tblData1C.
Важно чтобы в макросе были прописаны пути именно к самим таблицам примерно так: Sheets("1С").ListObjects("tblData1C").ListColumns("Код").
И так же важно применить удаление не просто строк, а именно удаление строк таблицы.
К сообщению приложен файл: zbook3.xlsm (25.8 Kb)
 
Ответить
СообщениеРебят, помогите пожалуйста с макросом.
Нужно сравнить в умной таблице tblData1C графу Код с такой же графой таблицы tblDel, и все строки, в которых совпадают значения, нужно удалить в таблице tblData1C.
Важно чтобы в макросе были прописаны пути именно к самим таблицам примерно так: Sheets("1С").ListObjects("tblData1C").ListColumns("Код").
И так же важно применить удаление не просто строк, а именно удаление строк таблицы.

Автор - AndreiSMT
Дата добавления - 30.07.2025 в 15:07
msi2102 Дата: Среда, 30.07.2025, 18:06 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 439
Репутация: 132 ±
Замечаний: 0% ±

Excel 2019
Можно без макроса, просто фильтром.
Данные --> Сортировка и фильтр --> Дополнительно --> Скопировать результат в другое место --> Искомый диапазон: выделяйте всю таблицу вместе с шапкой --> Диапазон условий: выделяйте диапазон на листе del тоже вместе с шапкой (ВАЖНО имя столбца шапки должно совпадать с именем столбца в основной таблице по которому должны фильтровать) --> Поместить результат в другое место: выделяйте ячейку ниже основной таблицы --> OK
К сообщению приложен файл: 8669598.xlsm (26.2 Kb)
 
Ответить
СообщениеМожно без макроса, просто фильтром.
Данные --> Сортировка и фильтр --> Дополнительно --> Скопировать результат в другое место --> Искомый диапазон: выделяйте всю таблицу вместе с шапкой --> Диапазон условий: выделяйте диапазон на листе del тоже вместе с шапкой (ВАЖНО имя столбца шапки должно совпадать с именем столбца в основной таблице по которому должны фильтровать) --> Поместить результат в другое место: выделяйте ячейку ниже основной таблицы --> OK

Автор - msi2102
Дата добавления - 30.07.2025 в 18:06
AndreiSMT Дата: Четверг, 31.07.2025, 06:30 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

2019
msi2102, спасибо большое что просветили темноту. Я не знал о таких возможностях.
Но к моему сожалению такой вариант не подходит. Нужен именно макрос.
Вот тут господин Казанский предложил замечательный макрос удаления пустых строк в умной таблице:
[vba]
Код
Sub Макрос4()
    With ActiveSheet.ListObjects(1)
      .Range.AutoFilter
      .Range.AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
      Application.DisplayAlerts = False
      On Error Resume Next
      .DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
      Application.DisplayAlerts = True
      .Range.AutoFilter
    End With
End Sub
[/vba]
Но как этому макросу объяснить что нужно удалять строки с совпадающим кодом для меня это очень сложно, увы. Люди добрые помогите пожалуйста.


Сообщение отредактировал AndreiSMT - Четверг, 31.07.2025, 07:25
 
Ответить
Сообщениеmsi2102, спасибо большое что просветили темноту. Я не знал о таких возможностях.
Но к моему сожалению такой вариант не подходит. Нужен именно макрос.
Вот тут господин Казанский предложил замечательный макрос удаления пустых строк в умной таблице:
[vba]
Код
Sub Макрос4()
    With ActiveSheet.ListObjects(1)
      .Range.AutoFilter
      .Range.AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
      Application.DisplayAlerts = False
      On Error Resume Next
      .DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
      Application.DisplayAlerts = True
      .Range.AutoFilter
    End With
End Sub
[/vba]
Но как этому макросу объяснить что нужно удалять строки с совпадающим кодом для меня это очень сложно, увы. Люди добрые помогите пожалуйста.

Автор - AndreiSMT
Дата добавления - 31.07.2025 в 06:30
msi2102 Дата: Четверг, 31.07.2025, 09:29 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 439
Репутация: 132 ±
Замечаний: 0% ±

Excel 2019
Вот макрос, если есть Код в таблице tblDel то удаляет строки с таким же кодом из строки из таблицы "tblData1C"
[vba]
Код
Sub Макрос1()
    Dim arr_del, arr_data, s, n As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Set sd = CreateObject("Scripting.Dictionary")
    arr_del = Worksheets("del").ListObjects("tblDel").ListColumns("Код").DataBodyRange
    arr_data = Worksheets("1C").ListObjects("tblData1C").ListColumns("Код").DataBodyRange
    For Each s In arr_del
        If Not sd.Exists(s) Then sd.Add s, s
    Next
    For n = UBound(arr_data) To 1 Step -1
        If sd.Exists(arr_data(n, 1)) Then Worksheets("1C").ListObjects("tblData1C").ListRows(n).Delete
    Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
[/vba]
К сообщению приложен файл: zbook4.xlsm (27.9 Kb)
 
Ответить
СообщениеВот макрос, если есть Код в таблице tblDel то удаляет строки с таким же кодом из строки из таблицы "tblData1C"
[vba]
Код
Sub Макрос1()
    Dim arr_del, arr_data, s, n As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Set sd = CreateObject("Scripting.Dictionary")
    arr_del = Worksheets("del").ListObjects("tblDel").ListColumns("Код").DataBodyRange
    arr_data = Worksheets("1C").ListObjects("tblData1C").ListColumns("Код").DataBodyRange
    For Each s In arr_del
        If Not sd.Exists(s) Then sd.Add s, s
    Next
    For n = UBound(arr_data) To 1 Step -1
        If sd.Exists(arr_data(n, 1)) Then Worksheets("1C").ListObjects("tblData1C").ListRows(n).Delete
    Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
[/vba]

Автор - msi2102
Дата добавления - 31.07.2025 в 09:29
AndreiSMT Дата: Четверг, 31.07.2025, 09:47 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

2019
msi2102, огромное вам спасибо!
 
Ответить
Сообщениеmsi2102, огромное вам спасибо!

Автор - AndreiSMT
Дата добавления - 31.07.2025 в 09:47
AndreiSMT Дата: Четверг, 31.07.2025, 10:04 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

2019
msi2102, не получается разместить этот макрос в модуле который содержит строку Option Explicit. Пришлось создать отдельный модуль.
Скришот ошибки:


Сообщение отредактировал AndreiSMT - Четверг, 31.07.2025, 10:45
 
Ответить
Сообщениеmsi2102, не получается разместить этот макрос в модуле который содержит строку Option Explicit. Пришлось создать отдельный модуль.
Скришот ошибки:

Автор - AndreiSMT
Дата добавления - 31.07.2025 в 10:04
i691198 Дата: Четверг, 31.07.2025, 11:25 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 426
Репутация: 132 ±
Замечаний: 0% ±

2016
AndreiSMT, это не ошибка, VBA вам указывает, что переменная sd не объявлена. Нужно в строке Dim через запятую дописать sd as object.
 
Ответить
СообщениеAndreiSMT, это не ошибка, VBA вам указывает, что переменная sd не объявлена. Нужно в строке Dim через запятую дописать sd as object.

Автор - i691198
Дата добавления - 31.07.2025 в 11:25
AndreiSMT Дата: Четверг, 31.07.2025, 11:51 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

2019
i691198, спасибо!
 
Ответить
Сообщениеi691198, спасибо!

Автор - AndreiSMT
Дата добавления - 31.07.2025 в 11:51
msi2102 Дата: Четверг, 31.07.2025, 13:26 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 439
Репутация: 132 ±
Замечаний: 0% ±

Excel 2019
Нужно в строке Dim через запятую дописать sd as object.
или закомментируйте (или удалите) Option Explicit


Сообщение отредактировал msi2102 - Четверг, 31.07.2025, 14:05
 
Ответить
Сообщение
Нужно в строке Dim через запятую дописать sd as object.
или закомментируйте (или удалите) Option Explicit

Автор - msi2102
Дата добавления - 31.07.2025 в 13:26
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!