Excel vba обратиться к ячейке умной таблицы

Работа с умной таблицей из кода VBA Excel. Обращение к ячейкам, строкам и столбцам умной таблицы. Добавление и удаление строк и столбцов.

Обращение к умной таблице

Все примеры кода в этой статье привязаны к таблице с именем «Таблица1», расположенной на активном листе:

Обращение к умной таблице:

ActiveSheet.ListObjects(«Таблица1»)

Обращение к диапазону умной таблицы на рабочем листе:

ActiveSheet.ListObjects(«Таблица1»).Range

Проверяем:

Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Address  ‘Результат: $B$3:$G$9

Далее все примеры кода VBA Excel, чтобы их не дублировать, будут представлены как аргументы метода Debug.Print.

Обращение к строкам

Работа с умной таблицей — обращение к строке заголовков:

Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Rows(1).Address  ‘Результат: $B$3:$G$3

Таким же образом можно обращаться и к остальным строкам таблицы (Строка1-Строка6), указывая индекс нужной строки от 2 до 7.

К записям таблицы (Строка1-Строка6) обращаются через коллекцию ListRows, указывая индекс записи от 1 до 6:

With ActiveSheet.ListObjects(«Таблица1»)

    Debug.Print .ListRows.Count  ‘Результат: 6

    Debug.Print .ListRows(1).Range.Address  ‘Результат: $B$4:$G$4

    Debug.Print .ListRows(2).Range.Address  ‘Результат: $B$5:$G$5

End With

Обращение к столбцам

Обращение к третьему столбцу умной таблицы из кода VBA Excel:

With ActiveSheet.ListObjects(«Таблица1»)

    ‘Обращение через диапазон умной таблицы

    Debug.Print .Range.Columns(3).Address  ‘Результат: $D$3:$D$9

    Debug.Print .Range.Columns.Count  ‘Результат: 6

    ‘Обращение через коллекцию ListColumns

    Debug.Print .ListColumns(3).Range.Address  ‘Результат: $D$3:$D$9

    Debug.Print .ListColumns.Count  ‘Результат: 6

End With

Обращение к ячейкам

Работа с умной таблицей — обращение к ячейке «E7» с отображением ее значения:

With ActiveSheet.ListObjects(«Таблица1»)

    Debug.Print .Range.Cells(5, 4)  ‘Результат: 91

    Debug.Print .ListColumns(4).Range(5)  ‘Результат: 91

    Debug.Print .ListRows(4).Range(4)  ‘Результат: 91

End With

Вставка и удаление строк

Вставка новой строки в конец умной таблицы:

ActiveSheet.ListObjects(«Таблица1»).ListRows.Add

Удаление последней строки:

With ActiveSheet.ListObjects(«Таблица1»)

    .ListRows(.ListRows.Count).Delete

End With

Вставка новой строки на место пятой записи (Строка5 в таблице) со сдвигом пятой и нижерасположенных записей вниз:

ActiveSheet.ListObjects(«Таблица1»).ListRows.Add 5

Удаление пятой строки:

ActiveSheet.ListObjects(«Таблица1»).ListRows(5).Delete

Вставка и удаление столбцов

Вставка нового столбца в конец умной таблицы из кода VBA Excel:

ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add

Удаление последнего столбца:

With ActiveSheet.ListObjects(«Таблица1»)

    .ListColumns(.ListColumns.Count).Delete

End With

Вставка нового столбца на место четвертой графы таблицы со сдвигом четвертой и последующих граф вправо:

ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add 4

Удаление четвертого столбца таблицы:

ActiveSheet.ListObjects(«Таблица1»).ListColumns(4).Delete


Создание и удаление умной таблицы описано в статье VBA Excel. Создание таблицы (умной, обычной)


 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#1

10.02.2019 16:43:02

Доброго времени суток!
Как обратиться к диапазону Умной таблицы. Написал код — он рабочий. Но на мой взгляд так писать не совсем верно.

Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
Dim rgResult As Range
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
Set rgResult = Range("B7:B14").Find(n, , xlValues)

    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub

Я имею ввиду диапазон Range(«B7:B14»).
Дело в том что  у нас есть объект Умная таблица «Таблица1»  внутри которой именованный диапазон/массив «Наименование», а мы обращаемся к колонке активного листа.
А если в колонке «В» над таблицей будут записи? …
Или колонка «В» не закончится на 14 строке?…. Можно, конечно написать Range(«B7:B»), но опять обращаемся к колонке листа.
А что если взять и переместить таблицу внутри листа со смещением? И такое может быть.

Справка VBA так и предлагает обращаться Range(«Test»)? в моём случае Range(«Наименование»), или Application.Goto «Test» — как бы не так??? Ни чего не выходит.
Объявлял объект, присваивал значения — ни чего и ни как?

Кто знает — подскажите.
Спасибо.

Прикрепленные файлы

  • Лист Microsoft Excel1.xlsm (43.35 КБ)

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#2

10.02.2019 17:31:36

Доброе время суток.

Цитата
KonstantinK написал:
Дело в том что  у нас есть объект Умная таблица «Таблица1»  внутри которой именованный диапазон/массив «Наименование»,

А так не пробовали?

Код
Workbooks("Лист Microsoft Excel1.xlsm").Worksheets("Накладная").ListObjects("Таблица1").ListColumns("Наименование").DataBodyRange.Address
 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#3

10.02.2019 17:48:02

Ругается: «Требуется объект»

Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
'Dim rgResult As Range
Dim rgResult As Object
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
'Set rgResult = Range("B7:B14").Find(n, , xlValues)
Set rgResult = Workbooks("Лист Microsoft Excel1.xlsm").Worksheets("Накладная").ListObjects("Таблица1").ListColumns("Наименование").DataBodyRange.Address
    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub

Изменено: KonstantinK10.02.2019 17:49:54

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#4

10.02.2019 17:55:52

Цитата
KonstantinK написал: Ругается: «Требуется объект»

Это естественно, Address возвращает строку. Не стоит столь слепо копировать пример. Удалите .Address получите объект Range области данных столбца Наименование.

 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#6

10.02.2019 21:15:07

Родил. Кому будет интересно вот код (исключительно с Умной таблицей):

Код
Private Sub ComboBox1_Change()
Dim myTable As ListObject
Dim x As Long
Dim n As String
Dim myArray As Variant
    n = ComboBox1.Text
    Set myTable = ActiveSheet.ListObjects("Таблица2")
    myArray = myTable.DataBodyRange
        For x = LBound(myArray) To UBound(myArray)
            If myArray(x, 2) = n Then
                myTable.DataBodyRange.Rows(x).Select
            End If
        Next x
End Sub

Забыл, есть нюанс:
Данный код будет обрабатывать первую строку — шапку и последнюю — итоги.
Здесь я ни чего не делал, чтобы убрать их, т.к. я их исключил в другом коде см. прикреплённый файл.

Изменено: KonstantinK10.02.2019 21:23:41

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#7

10.02.2019 21:55:03

Цитата
KonstantinK написал:
Данный код будет обрабатывать первую строку — шапку и последнюю — итоги

Не будет. Сходите по ссылке, которую я дал — там на рисунках показано, что такое .Range, .DataBodyRange и другие части таблицы.

Получение данных из умной таблицы

AVI

Дата: Четверг, 29.08.2019, 03:57 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

Добрый день!
Подскажите, пожалуйста, как выбрать данные из умной таблицы в прилагаемом файле.
Желтым выделена ячейка с условием.
Серым выделен требуемый результат.
Сложность для меня в том, как заставить код выбрать не все столбцы из УТ, а только требуемые.

К сообщению приложен файл:

0773249.xlsm
(16.3 Kb)

 

Ответить

Pelena

Дата: Четверг, 29.08.2019, 06:53 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
[vba]

Код

    With ActiveSheet
        .ListObjects(«Продажи»).Range.AutoFilter Field:=3, Criteria1:=.Range(«K1»).Value
        Intersect(.ListObjects(«Продажи»).Range, .Range(«E:E,H:I»)).Copy Range(«O2»)
        .ListObjects(«Продажи»).Range.AutoFilter Field:=3
    End With

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

AVI

Дата: Четверг, 29.08.2019, 07:55 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

Pelena, Спасибо
[vba]

Код

.Range(«E:E,H:I»)).Copy

[/vba] — это столбцы в книге копирует, а
[vba]

Код

.Range(«Продажи[Продавец], Продажи[[Количество]:[Стоимость]]»))

[/vba] не захватывает заголовки

 

Ответить

Pelena

Дата: Четверг, 29.08.2019, 08:23 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel


Вы вырвали из контекста
Функция Intersect означает пересечение таблицы «Продажи» и столбцов «E:E,H:I»


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

AVI

Дата: Четверг, 29.08.2019, 09:47 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 523


Репутация:

17

±

Замечаний:
0% ±


Excel 2016

Pelena, Не силен в функция, но получается, что если я добавлю столбец в УТ то и на выходе код захватит не те столбцы, поэтому я и завязываю все на названии столбцов в УТ. Но я вроде решил)

Но тут вопрос еще по той же таблице
[vba]

Код

.Range(«Продажи[Продавец], Продажи[[Количество]:[Стоимость]]»))

[/vba]
Вот ссылаемся на столбцы, но у меня каждый месяц будут разные таблицы, например: Продажи_август_2019, Продажи_сентябрь_2019.
Название таблицы у меня загнано в переменную
[vba]

Код

Diap = Worksheets(«Протокол»).Range(«E1»)

[/vba]
Можно сделать так, что в ссылках на столбцы у меня в названии УТ отражалась эта переменная?

 

Ответить

Содержание

  1. VBA Excel. Создание таблицы (умной, обычной)
  2. Создание и удаление умной таблицы
  3. Создание умной таблицы
  4. Стиль умной таблицы
  5. VBA Excel. Ячейки (обращение, запись, чтение, очистка)
  6. Обращение к ячейке по адресу
  7. Обращение к ячейке по индексу
  8. Обращение к ячейке по имени
  9. Запись информации в ячейку
  10. Vba excel умная таблица обращение к ячейке

VBA Excel. Создание таблицы (умной, обычной)

Создание таблицы с помощью кода VBA Excel. Создание умной и обычной пользовательской таблицы. Указание стиля умной таблицы, добавление строки итогов. Примеры.

Создание и удаление умной таблицы

Создание умной таблицы

Создается умная таблица Excel с помощью следующего кода:

В данном примере:

ActiveSheet — лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(«$A$1:$L$15») — диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo — указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 — имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Стиль умной таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

Источник

VBA Excel. Ячейки (обращение, запись, чтение, очистка)

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Обращение к ячейке Range(«A1:C3»).Cells(5) соответствует выражению Range(«B2») .

Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range(«Итого») .

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Источник

Vba excel умная таблица обращение к ячейке

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отбор и перенос данных в умных таблицах (Макросы/Sub)

Отбор и перенос данных в умных таблицах

AVI Дата: Пятница, 24.08.2018, 13:57 | Сообщение № 1

Очередной затык.
Кодне выдает ошибок — это уже хорошо, но не работает.

Очередной затык.
Кодне выдает ошибок — это уже хорошо, но не работает.

Сообщение Очередной затык.
Кодне выдает ошибок — это уже хорошо, но не работает.

_Boroda_ Дата: Пятница, 24.08.2018, 14:06 | Сообщение № 2

Вам нужно заполнить вторую таблицу датами из первой?
Тогда

Но только такие вещи пробежкой массива по массиву не делаются — на более-менее больших диапазонах Excel сдохнет.
Вот примерно Ваш случай http://www.excelworld.ru/forum/10-38778-258819-16-1534706511

Вам нужно заполнить вторую таблицу датами из первой?
Тогда

Но только такие вещи пробежкой массива по массиву не делаются — на более-менее больших диапазонах Excel сдохнет.
Вот примерно Ваш случай http://www.excelworld.ru/forum/10-38778-258819-16-1534706511 _Boroda_

Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

Сообщение Вам нужно заполнить вторую таблицу датами из первой?
Тогда

Но только такие вещи пробежкой массива по массиву не делаются — на более-менее больших диапазонах Excel сдохнет.
Вот примерно Ваш случай http://www.excelworld.ru/forum/10-38778-258819-16-1534706511 Автор — _Boroda_
Дата добавления — 24.08.2018 в 14:06

AVI Дата: Суббота, 25.08.2018, 05:24 | Сообщение № 3

Просто с массивами мне хотя бы понятно как это работает более-менее, а по ссылке — дремучий лес.

У меня будут не такие большие объемы в ближайший год, в течение года, может быть и разберусь, когда с функционалом закончу и дойдут руки до оптимизации работы.

Просто с массивами мне хотя бы понятно как это работает более-менее, а по ссылке — дремучий лес.

У меня будут не такие большие объемы в ближайший год, в течение года, может быть и разберусь, когда с функционалом закончу и дойдут руки до оптимизации работы. AVI

Сообщение _Boroda_, Спасибо!

Просто с массивами мне хотя бы понятно как это работает более-менее, а по ссылке — дремучий лес.

У меня будут не такие большие объемы в ближайший год, в течение года, может быть и разберусь, когда с функционалом закончу и дойдут руки до оптимизации работы. Автор — AVI
Дата добавления — 25.08.2018 в 05:24

AVI Дата: Вторник, 28.08.2018, 05:39 | Сообщение № 4
_Boroda_ Дата: Вторник, 28.08.2018, 09:12 | Сообщение № 5

Ответить

AVI Дата: Вторник, 28.08.2018, 09:56 | Сообщение № 6
boa Дата: Вторник, 28.08.2018, 10:51 | Сообщение № 7
_Boroda_ Дата: Вторник, 28.08.2018, 11:24 | Сообщение № 8

Ответить

AVI Дата: Четверг, 30.08.2018, 16:50 | Сообщение № 9
_Boroda_ Дата: Четверг, 30.08.2018, 18:27 | Сообщение № 10

думал, Вам интересно будет посмотреть. Извините, погорячился, был неправ

думал, Вам интересно будет посмотреть. Извините, погорячился, был неправ

Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

думал, Вам интересно будет посмотреть. Извините, погорячился, был неправ

RAN Дата: Четверг, 30.08.2018, 20:36 | Сообщение № 11
Быть или не быть, вот в чем загвоздка!

Ответить

AVI Дата: Пятница, 31.08.2018, 05:31 | Сообщение № 12
_Boroda_ Дата: Пятница, 31.08.2018, 09:20 | Сообщение № 13

Да ладно, Алексей, это я больше в шутку.

Вы молодец, что справку мучаете, но там не всегда нормально и понятно написано, поэтому не стесняйтесь здесь спрашивать. Тех, кто сам что-то пытается делать, здесь уважают и всегда помочь стараются.

И, кстати, задачи принципиально разные. В первой мы сравниваем значения из двух массивов (цикл в цикле или в словаре), а во второй проверка условия в одном массиве и вывод данных в другой. Поэтому конечно

Да ладно, Алексей, это я больше в шутку.

Вы молодец, что справку мучаете, но там не всегда нормально и понятно написано, поэтому не стесняйтесь здесь спрашивать. Тех, кто сам что-то пытается делать, здесь уважают и всегда помочь стараются.

И, кстати, задачи принципиально разные. В первой мы сравниваем значения из двух массивов (цикл в цикле или в словаре), а во второй проверка условия в одном массиве и вывод данных в другой. Поэтому конечно

Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

Сообщение Да ладно, Алексей, это я больше в шутку.

Вы молодец, что справку мучаете, но там не всегда нормально и понятно написано, поэтому не стесняйтесь здесь спрашивать. Тех, кто сам что-то пытается делать, здесь уважают и всегда помочь стараются.

И, кстати, задачи принципиально разные. В первой мы сравниваем значения из двух массивов (цикл в цикле или в словаре), а во второй проверка условия в одном массиве и вывод данных в другой. Поэтому конечно

AVI Дата: Суббота, 01.09.2018, 10:18 | Сообщение № 14

_Boroda_,
А как заставить его переносить данные на нужный лист, а то он работает только на открытом листе.

И еще у меня Option Explicit о чем я ранее не сообщил.

Dim ar0, n0_, r0_, r1_, ar1, i, n1, n1_ As Long

ar0 = Range(«РасшГруппНакл_tb») ‘массив первой таблицы
n0_ = UBound(ar0) ‘кол-во строк в нем
r0_ = 13 ‘первая строка во второй таблице (без шапки)
r1_ = Cells(Rows.Count, 11).End(3).Row ‘ последняя строка второй табл
If r1_ >= r0_ Then ‘если табл 2 чем-то заполнена
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(r1_ — r0_ + 1, 1).Clear ‘очищаем
End If
ar1 = Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n0_, 2) ‘пустой массив с кол-вом строк, как в первой таблице
For i = 1 To n0_ ‘цикл по строкам первой табл
If ar0(i, 1) = «ДС» Then ‘если условие выполнено, то
n1_ = n1_ + 1 ‘счётчик увеличиваем на 1
ar1(n1_, 1) = ar0(i, 3) ‘заполняем ФИО второго массива
End If
Next i
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n1_, 2) = ar1 ‘ выводим во вторую таблицу столько строк массива аr1, сколько нашли в цикле проверки

Сам разобрался — вроде работает

_Boroda_,
А как заставить его переносить данные на нужный лист, а то он работает только на открытом листе.

И еще у меня Option Explicit о чем я ранее не сообщил.

Dim ar0, n0_, r0_, r1_, ar1, i, n1, n1_ As Long

ar0 = Range(«РасшГруппНакл_tb») ‘массив первой таблицы
n0_ = UBound(ar0) ‘кол-во строк в нем
r0_ = 13 ‘первая строка во второй таблице (без шапки)
r1_ = Cells(Rows.Count, 11).End(3).Row ‘ последняя строка второй табл
If r1_ >= r0_ Then ‘если табл 2 чем-то заполнена
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(r1_ — r0_ + 1, 1).Clear ‘очищаем
End If
ar1 = Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n0_, 2) ‘пустой массив с кол-вом строк, как в первой таблице
For i = 1 To n0_ ‘цикл по строкам первой табл
If ar0(i, 1) = «ДС» Then ‘если условие выполнено, то
n1_ = n1_ + 1 ‘счётчик увеличиваем на 1
ar1(n1_, 1) = ar0(i, 3) ‘заполняем ФИО второго массива
End If
Next i
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n1_, 2) = ar1 ‘ выводим во вторую таблицу столько строк массива аr1, сколько нашли в цикле проверки

Сам разобрался — вроде работает AVI

Сообщение _Boroda_,
А как заставить его переносить данные на нужный лист, а то он работает только на открытом листе.

И еще у меня Option Explicit о чем я ранее не сообщил.

Dim ar0, n0_, r0_, r1_, ar1, i, n1, n1_ As Long

ar0 = Range(«РасшГруппНакл_tb») ‘массив первой таблицы
n0_ = UBound(ar0) ‘кол-во строк в нем
r0_ = 13 ‘первая строка во второй таблице (без шапки)
r1_ = Cells(Rows.Count, 11).End(3).Row ‘ последняя строка второй табл
If r1_ >= r0_ Then ‘если табл 2 чем-то заполнена
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(r1_ — r0_ + 1, 1).Clear ‘очищаем
End If
ar1 = Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n0_, 2) ‘пустой массив с кол-вом строк, как в первой таблице
For i = 1 To n0_ ‘цикл по строкам первой табл
If ar0(i, 1) = «ДС» Then ‘если условие выполнено, то
n1_ = n1_ + 1 ‘счётчик увеличиваем на 1
ar1(n1_, 1) = ar0(i, 3) ‘заполняем ФИО второго массива
End If
Next i
Worksheets(«Отчет дневной стационар»).Cells(r0_, 11).Resize(n1_, 2) = ar1 ‘ выводим во вторую таблицу столько строк массива аr1, сколько нашли в цикле проверки

Сам разобрался — вроде работает Автор — AVI
Дата добавления — 01.09.2018 в 10:18

Источник

Adblock
detector

Формулировка задачи:

Добрый день.
На листе имеется умная таблица с заголовками.
При работе с ней макросами, я обращаюсь к ней так:

Последняя строка, мне не нравится, т.к. при добавлении столбца в начало таблицы. Формула «поедет». Т.к. нужно будет брать уже 4ый столбец и т.д.
Можно ли строку задавать переменной, а столбец задавать так как он назван в самой таблице? Чтобы не быть привязанным к порядку столбцов в таблице.
Что-то вроде:

Код к задаче: «Свойство .Range для умной таблицы. Обращение по названию столбца»

textual

WT.Range(WTName & "[Столбец3]").Rows.Item(i1).Select

Полезно ли:

14   голосов , оценка 4.143 из 5

Понравилась статья? Поделить с друзьями:
  • Excel vba обратиться к книге по имени
  • Excel vba меню на форме
  • Excel vba обратиться к именованному диапазону
  • Excel vba межстрочный интервал
  • Excel vba масштаб листа