#excel #vba
#excel #vba
Вопрос:
У меня есть несколько таблиц на одном листе, как собрать из них интересующие меня данные. например, мне просто нужны данные столбца 3 table1 и столбца 2 table2. размер для обеих таблиц может варьироваться. Мне нужно собрать данные в массив для следующей обработки.
Спасибо.
Комментарии:
1. PS: переменные элементы для двух таблиц: 1.Размер; 2. Начальная ячейка
Ответ №1:
Вам нужно найти способ ограничить таблицы в VBA, т. е. знать, с какой строки они начинаются и из скольких строк они состоят. Поскольку таблицы могут отображаться в любом месте листа с различными размерами, простого способа извлечения их данных не существует.
Что я бы предложил, так это выполнить цикл от начала до последней строки листа и в каждой строке проверять, началась ли таблица, а затем во внутреннем цикле выполнять итерацию по строкам таблицы, пока таблица не закончится (т. Е. не встретится пустая строка).
Код может выглядеть примерно так (не тестировался):
Dim LastRow as Long, i as Long, k as Long
Dim sht as Worksheet
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 'Assuming the tables start in column A
For i=1 to LastRow
If (sht.Range("A" amp; i) <> "" Then 'table is encountered
k = i
Do While sht.Range("A" amp; k) <> ""
... 'Get data from specific column
k = k 1
Loop
End if
i = k
Next i
Ответ №2:
Попробуйте это (необходимые комментарии в коде):
Option Explicit
Sub CollectData()
Dim table1Address As String, table2Address As String
' here you specify cells that are at the start of a column
table1Address = "B2"
table2Address = "C7"
Dim firstCell As Range, lastCell As Range
Dim table1Data, table2Data As Variant
' determine last cell in column and read whole column at once to an array variable
Set firstCell = Range(table1Address)
Set lastCell = Range(table1Address).End(xlDown)
table1Data = Range(firstCell, lastCell).Value2
Set firstCell = Range(table2Address)
Set lastCell = Range(table2Address).End(xlDown)
table2Data = Range(firstCell, lastCell).Value2
End Sub