Функция Union в VBA

Я пытаюсь отфильтровать свои данные и добавлять нужные данные в диапазон. Я установил нужный диапазон нулевых значений и инициировал поиск в определенном столбце для определенного ключевого слова, которое, если найдено, добавляет всю строку в моем диапазоне. Столбец «E» искал значение «Желаемое значение», если найдено, что вся строка добавлена ​​в PTRange, изначально установленного в Nothing (is Empty).

Dim rng As Range Dim PTRange As Range Dim count As Long count = 1 Set PTRange = Nothing Set rng = Range("E2:E20") For Each cell In rng If cell.Value = ("Desired Value") Then PTRange = Application.Union(Range(PTRange), Range(Rows(count))) End If count = count + 1 Next cell 

Но компилятор показывает, что что-то не так в коде, где используется метод Union.

UPDATE: Инициализация PTRange и следующее изменение

 PTRange=Union(PTRange,Rows(count)) 

работал на меня. благодаря

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

Во-первых, я бы порекомендовал, чтобы вы всегда Option Explicit особенно если вы звоните в Stack Overflow для получения помощи.

Option Explicit вынуждает вас объявлять все переменные, в этом случае она будет полезной, поскольку вы являетесь cell как переменной, которая может выглядеть неоднозначно. Когда он не объявлен, он начинает свою жизнь как вариант и определяется для определенного формата при первом использовании, в этом случае компилятор объявляет cell как Range .

Это также помогает поощрять лучшее кодирование и больше понимать, что происходит в коде. Чтобы включить его, введите Option Explicit в самой верхней части панели кода (перед любыми процедурами или объявлениями переменных), а также в VBE (Редактор Visual Basic) нажмите «Инструменты»> «Параметры» и убедитесь, что «Требовать объявление переменных», отмечен галочкой.

Ниже приведены некоторые комментарии в коде, который у вас есть, это поможет вам понять, с какими проблемами вы столкнулись.

 Dim rng As Range Dim PTRange As Range Dim count As Long count = 1 'If the range is nothing then it can not be used, it must be started as 'something Set PTRange = Nothing Set rng = Range("E2:E20") 'This is where declaring 'cell' would help understanding, it will become a 'Range at the VBE discretion\decision based on what you are trying to do 'with it. Even when looking at a single cell, you do so through a Range, 'it is a reference to one or more cells in a worksheet For Each cell In rng ' If cell.Value = ("Desired Value") Then 'This will not work for a number of reasons 'O- As BrakNicku stated, there needs to be 'Set' at the front 'O- This is not remembering the values into the 'PTRange' but ' adding a reference to where those values are. Ie You are ' not taking note of everybody in the house, but just remembering ' their house address 'O- You do not need to put 'Range()' around 'PTRange' as it is ' already a range 'O- 'Rows(count)' is not valid syntax and does not pass a range into ' the union 'O- 'Union' will put together 2 or more references to ranges, it ' will not put their values in any specific place on a worksheet PTRange = Application.Union(Range(PTRange), Range(Rows(count))) End If count = count + 1 Next cell 

Я надеюсь, что вышеизложенное было информативным, и ниже приведен пример потенциального решения: – Вариант Явный

 Public Sub Sample() Dim LngRow As Long Dim Rng As Excel.Range Dim Rng_Cl As Excel.Range Dim Rng_PT As Excel.Range LngRow = 21 'Initialise my Range Set Rng_PT = Range("E21") '" & LngRow) 'Get the search range Set Rng = Range("E2:E20") 'Loop through all the cells For Each Rng_Cl In Rng If Rng_Cl.Value = ("Duck") Then 'Adds just 5 column and not the whole row Range(Rng_Cl.Address, ActiveSheet.Cells(Rng_Cl.Row, Rng_Cl.Column + 5).Address).Copy Range("E" & LngRow) LngRow = LngRow + 1 End If Next 'It is good practice to remove references once you are done with them 'This can help with memory consumption/speed and also more serious 'memory leaks (and actual stack overflows!) on larger macros Set Rng = Nothing Set Rng_PT = Nothing End Sub 
Interesting Posts

Получение данных из закрытой книги с использованием ADODB-соединения. Некоторые данные пропущены?

как решить Не удается создать экземпляр типа Workbook в java?

Скопируйте строки из нескольких листов Excel на сводную страницу на основе нескольких критериев

Открыть папку с VBA

Несовпадение типа результата функции VBA

Копирование столбцов через рабочие листы в определенную начальную точку строки

Макрос в Excel для форматирования полей данных на нескольких листах

Превосходная формула процесса в VBA без вставки в excel

Как извлечь данные из ячейки и упорядочить ячейки по алфавиту?

Обновление значения ячейки из-за изменения в другой ячейке вручную только один раз

чтение данных excel с помощью python после ввода входа на python

Как установить типы столбцов Excel и форматирование?

Вставка ввода пользователя на основе текущего региона

Могу ли я создавать переменные динамически на основе других переменных?

Создавать и устанавливать стили в ячейках Excel с помощью C #?

Давайте будем гением компьютера.