powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject
27 сообщений из 27, показаны все 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
Объект ListObject
    #39351546
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikkДелаю попроще. Копирую таблицу на другой лист. Потом перестановка, и далее удаление ненужных колонок. Пока без фильтра. На одной строке не работает. Как надо написать правильно?
Ну если так, то можно сначала набрать данные, затем создать таблицу
Код: 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.
Public Sub TST_ChangeColN()
Dim vT As Variant
ReDim vT(5)
vT(1) = "Ãîðîä": vT(2) = "Ìåðà3": vT(3) = "Ìåðà1": vT(4) = "Ìåðà2": vT(5) = "Ìåðà4"
Call changeColN(vT)
End Sub

Public Function changeColN(vC As Variant)
Dim wsS As Worksheet, wsT As Worksheet 'ëèñò èñòî÷íèê
Dim rS As Range, rT As Range
Dim iC1 As Integer, iC2 As Integer
Dim ii As Integer, iC As Integer
Dim vCol As Variant
Set wsS = ThisWorkbook.Worksheets("Ëèñò1")
Set wsT = ThisWorkbook.Worksheets.Add
If wsS.ListObjects.Count <= 0 Then Exit Function
Set rS = wsS.ListObjects(1).Range
Set rT = wsT.Range(Cells(1, 1).Address & ":" & Cells(rS.Rows.Count, rS.Columns.Count).Address)
iC1 = 0: iC2 = 0
For ii = 1 To UBound(vC, 1)
    iC1 = Application.WorksheetFunction.Match(vC(ii), rS.Rows(1), 0)
    If iC1 <= 0 Then GoTo NextVC:
    iC2 = iC2 + 1
    vCol = rS.Columns(iC1)
    rT.Columns(iC2) = vCol
NextVC: Next ii

Set rT = wsT.UsedRange
wsT.ListObjects.Add xlSrcRange, rT, , xlGuess

Application.EnableEvents = False
'wsS.Delete
Application.EnableEvents = True
End Function

...
Рейтинг: 0 / 0
Объект ListObject
    #39351547
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и iC2 та лишнее, а может и не только .. :-)
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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