VBA: получить значение ячейки из каждой строки в Range.Area

Основная цель: Получить определенные значения ячеек из каждой строки в отфильтрованной таблице, используя имя ссылки на столбец.

До сих пор у меня есть следующий код

Dim table As listObject Dim columns As ListColumns Dim row As ListRow Dim rnData As range Dim rngArea As range Set table = Sheets(sheetName).ListObjects(TableName) Set columns = table.ListColumns Set rnData = ThisWorkbook.Worksheets(sheetName).ListObjects(TableName).range 'Notice that sheetName and TableName are function arguments. No need to pay attention. Consider any string values. 'Filter my table table.range.AutoFilter Field:=7, Criteria1:=Array("filtervalue1", "filtervalue2"), Operator:=xlFilterValues 'Set the filtered table in a new Range object Set rnData = ThisWorkbook.Worksheets(sheetName).ListObjects(TableName).range 'Count all rows of my filtered table With rnData For Each rngArea In .SpecialCells(xlCellTypeVisible).Areas lCount = lCount + rngArea.Rows.Count Next End with 

Теперь я хочу закодировать мою фильтрованную таблицу (мой диапазон «rnData»), и я хочу получить значение ячейки для каждой строки в этом Range.Areas.

Я думал о чем-то подобном, но у меня возникают трудности с VBA:

 For iRowNo = 2 To (lCount - 1) 'Start at 2 because 1 is the table header 'This does not work once it gets another row from the entire table. Not the filtered one. Help here! Set row = table.ListRows(iRowNo) 'Something close to this - Help Here! Set row = rnData.SpecialCells(xlCellTypeVisible).Areas ''Would like to have the code like this to get the values cell1Value= row.range(1, columns("My Column Header 1").Index).value cell2Value= row.range(1, columns("My Column Header 2").Index).Value Next iRowNo 

Дайте мне знать, если есть разные решения, чем это.

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

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

Самое главное, я думаю, вы ищете метод для создания массива. Надеюсь, это поможет.

 Sub testCoutinho() Dim Rcell As Range Dim rnData As Range 'you'll have to set this up... Dim YesLetsDoAnArray As Boolean: YesLetsDoAnArray = False 'or change to false to just make a new sheet with values If YesLetsDoAnArray Then ReDim This_is_your_Array(0) As Variant 'Create Array Dim x As Integer Else 'putting values on a new worksheet in file Dim CleanWS As Worksheet: Set CleanWS = ThisWorkbook.Sheets.Add End If For Each Rcell In rnData.Cells If Rcell.EntireRow.Hidden = False Then If YesLetsDoAnArray Then ReDim Preserve This_is_your_Array(x) This_is_your_Array(x) = Rcell.Value x = x + 1 Else CleanWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Rcell.Value End If End If Next Rcell 'If you used an array, you'll know have variable(s) that contain all your data. 'your first one is This This_Is_Your_Array(0), followed by This_Is_Your_Array(1)... etc. 'you can play around. this will print them all. If YesLetsDoAnArray Then Dim i As Integer For i = 0 To x - 1 Debug.Print This_is_your_Array(i) Next i End If End Sub 

После ответа @DirkReichel

Вот код, который работал для меня:

 Dim table As listObject Dim columns As ListColumns Dim row As ListRow Dim rnData As range Dim rngArea As range Set table = Sheets(sheetName).ListObjects(TableName) Set columns = table.ListColumns Set rnData = ThisWorkbook.Worksheets(sheetName).ListObjects(TableName).range 'Notice that sheetName and TableName are function arguments. No need to pay attention. Consider any string values. 'Filter my table table.range.AutoFilter Field:=7, Criteria1:=Array("filtervalue1", "filtervalue2"), Operator:=xlFilterValues 'Set the filtered table in a new Range object Set rnData = ThisWorkbook.Worksheets(sheetName).ListObjects(TableName).range 'Get values for each row With rnData For Each rngArea In .SpecialCells(xlCellTypeVisible).Areas For Each row In rngArea.Rows cell1Value= row.range(1, columns("My Column Header 1").Index).value cell2Value= row.range(1, columns("My Column Header 2").Index).Value Next 'lCount = lCount + rngArea.Rows.Count 'Removed this. Next End with 'Also no need the second part of code with the For..Next loop. 
Давайте будем гением компьютера.