powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject
25 сообщений из 27, страница 1 из 2
Объект ListObject
    #39335474
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Имеется объект таблица на листе.
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1)


Колонки "Город", "ТТ" и "Отгрузки". Нужно скопировать эту таблицу, но с условием Город = "Город1", и вставить в другую книгу.

У объекта ListObject есть возможность копировать определенные строки (не фильтр), заданные по условию, и вставлять эти строки?

Или для решения данной задачи надо использовать какой то другой объект?
...
Рейтинг: 0 / 0
Объект ListObject
    #39335663
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikkопределенные строки (не фильтр), заданные по условиюА в чем разница между строками, заданными по описанному условию, и фильтром?
У каждого объекта ListObject есть свой автофильтр, независимый от автофильтра всего листа, его используйте.
...
Рейтинг: 0 / 0
Объект ListObject
    #39335791
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанскийferzmikkопределенные строки (не фильтр), заданные по условиюА в чем разница между строками, заданными по описанному условию, и фильтром?
У каждого объекта ListObject есть свой автофильтр, независимый от автофильтра всего листа, его используйте.
По сути нужно взять таблицу и вставить в другой файл, но без строк города "Город2". При фильтре отбираем Город1, а Город2 скрыт, но присутствует в таблице. Надо чтобы вообще не было строк Город2.
...
Рейтинг: 0 / 0
Объект ListObject
    #39335798
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk, копирование строк, отобранных фильтром
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1).databodyrange.specialcells(xlcelltypevisible).copy dest

dest - куда копировать, например otherSheet.ListObjects(1).databodyrange.cells(1)
...
Рейтинг: 0 / 0
Объект ListObject
    #39335871
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанскийferzmikk, копирование строк, отобранных фильтром
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1).databodyrange.specialcells(xlcelltypevisible).copy dest

dest - куда копировать, например otherSheet.ListObjects(1).databodyrange.cells(1)
Прежде чем копировать на другой лист, надо на другом листе создать пустой ListObject?
...
Рейтинг: 0 / 0
Объект ListObject
    #39336028
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а то отображает ошибку
...
Рейтинг: 0 / 0
Объект ListObject
    #39336558
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikkПрежде чем копировать на другой лист, надо на другом листе создать пустой ListObject?Необязательно, это было как пример. Можно просто в диапазон
Код: vbnet
1.
2.
3.
'Копируем отобранные строки
ThisWorkbook.Sheets("Лист1").ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
    Destination:=obook.Sheets(1).Cells(1)
...
Рейтинг: 0 / 0
Объект ListObject
    #39336660
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийМожно просто в диапазон
Код: vbnet
1.
2.
3.
'Копируем отобранные строки
ThisWorkbook.Sheets("Лист1").ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
    Destination:=obook.Sheets(1).Cells(1)


Теперь копирует нужные строки, только заголовки не копирует. Вместе с заголовками возможно?
...
Рейтинг: 0 / 0
Объект ListObject
    #39336668
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk, DataBodyRange замените на Range .
Здесь описано, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
...
Рейтинг: 0 / 0
Объект ListObject
    #39336840
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанскийferzmikk, DataBodyRange замените на Range .
Получилось, еще добавил преобразовать в ListObject, получился такой исходный код. Не слишком сложно написал?
...
Рейтинг: 0 / 0
Объект ListObject
    #39336841
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанскийferzmikk, Здесь описано, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
Спасибо за ссылку!
...
Рейтинг: 0 / 0
Объект ListObject
    #39340103
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос неправильно определяет количество видимых строк в автофильтре.

Почему так?
...
Рейтинг: 0 / 0
Объект ListObject
    #39340105
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объект ListObject
    #39340130
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
F1 - Range.Rows PropertyWhen applied to a Range object that’s a multiple selection, this property returns rows from only the first area of the range.Т.е. в несвязном диапазоне .Rows относится только к первой области. Пичалька :)
Значит надо делать цикл по областям (.Areas) и суммировать их .Rows.Count, или скопировать-вставить все куда-то, получить непрерывный диапазон и брать его число строк.
...
Рейтинг: 0 / 0
Объект ListObject
    #39340136
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А лучше использовать функцию листа ПРОМЕЖУТОЧНЫЕ.ИТОГИ
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = [SUBTOTAL(3,Таблица[Город])]
End Sub
...
Рейтинг: 0 / 0
Объект ListObject
    #39340297
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот .Cells в несвязном диапазоне - это все ячейки, а не только первой области!
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = ThisWorkbook.Sheets("ИД7").ListObjects(1).Range.SpecialCells(xlCellTypeVisible).Cells.Count
End Sub
...
Рейтинг: 0 / 0
Объект ListObject
    #39340352
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийА лучше использовать функцию листа ПРОМЕЖУТОЧНЫЕ.ИТОГИ
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = [SUBTOTAL(3,Таблица[Город])]
End Sub

Да, работает!

Во втором аргументе функции SUBTOTAL нужно вставить переменную. Написал, но не правильно
Код: vbnet
1.
КоличествоСтрок = [SUBTOTAL(3,ThisWorkbook.Sheets("ИД7").ListObjects(1).Name [Город])]


Как правильно написать?
...
Рейтинг: 0 / 0
Объект ListObject
    #39348830
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще.

Нужно скопировать таблицу на другой лист, где
- копироваться могут либо все строки, либо не все (фильтр строк по условию)
- копируются не все колонки
- копируется другая последовательность колонок ("Город", "Мера1", "Мера5", "Мера2" и "Мера4")

Как это делается?

Еще такой нюанс. Если на вкладке "Исходные данные" в таблице включен автофильтр, но не отобраны строки, то копируется таблица с автофильтром. Если отобраны строки - то копируестя без автофильтра. Почему?

И в тот момент, после того как скопировали с отбором строк ЛистОбработанныйИсходник.ListObjects.Count равно нулю. Почему ноль, если на вкладке "Обработанные данные" есть сама таблица?
...
Рейтинг: 0 / 0
Объект ListObject
    #39348831
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объект ListObject
    #39349647
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikkЕсли на вкладке "Исходные данные" в таблице включен автофильтр, но не отобраны строки, то копируется таблица с автофильтром. Если отобраны строки - то копируестя без автофильтра. Почему?

И в тот момент, после того как скопировали с отбором строк ЛистОбработанныйИсходник.ListObjects.Count равно нулю. Почему ноль, если на вкладке "Обработанные данные" есть сама таблица?Видимо, логика такая - если копируется весь диапазон ListObject, на листе назначения создается ListObject. Если же копируется набор строк, то ListObject не создается, ListObjects.Count=0.
Скопировать данные в другой последовательности столбцов и одновременно отфильтровать можно расширенным фильтром. Хорошая статья тут: http://www.planetaexcel.ru/techniques/2/197/
...
Рейтинг: 0 / 0
Объект ListObject
    #39349785
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийСкопировать данные в другой последовательности столбцов и одновременно отфильтровать можно расширенным фильтром. Хорошая статья тут: http://www.planetaexcel.ru/techniques/2/197/
Не нашел про другую последовательность и отсечение столбцов.
...
Рейтинг: 0 / 0
Объект ListObject
    #39350437
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть надо скопировать таблицу в виртуальную память, там удалить не нужные колонки и там же поменять порядок колонок, потом вставить на лист? Или копировать по одной колонке в нужной последовательности?
...
Рейтинг: 0 / 0
Объект ListObject
    #39350705
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk, да как угодно можно. А Расширенный фильтр Вы освойте, для начала из меню - это полезная штука. Про отбор столбцов:
F1 - Отбор строк с помощью расширенного фильтраПри копировании отобранных строк в другое место можно указать столбцы, включаемые в копию. Перед отбором скопируйте заголовки нужных столбцов в первую строку области вставки результатов. Выполняя фильтрацию, введите ссылку на скопированные заголовки столбцов в поле Поместить результат в диапазон. Скопированные строки будут включать только те столбцы, заголовки которых были скопированы.
То есть на другом листе в ряд ячеек вводите "Город", "Мера1", "Мера5", "Мера2" и "Мера4" и указываете этот диапазон в поле Поместить результат в диапазон. Расширенный фильтр кстати сам почистит столбцы ниже этих заголовков перед вставкой отфильтрованных данных.
Посмотрите например
http://www.cyberforum.ru/vba/thread1672727.html перестановка столбцов
http://www.cyberforum.ru/vba/thread1592028.html несколько критериев для одного поля
http://www.cyberforum.ru/vba/thread1526195.html про критерий-формулу
http://www.cyberforum.ru/vba/thread1438381.html про размещение критерия фильтра на другом листе или книге
...
Рейтинг: 0 / 0
Объект ListObject
    #39351234
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю попроще. Копирую таблицу на другой лист. Потом перестановка, и далее удаление ненужных колонок. Пока без фильтра. На одной строке не работает. Как надо написать правильно?
...
Рейтинг: 0 / 0
Объект ListObject
    #39351274
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я пас, надоела эта тема
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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