Я работаю в объекте таблицы, и мне нужно значение -измерять или удалять строки данных на основе уникального ссылочного столбца. Проблема состоит в том, что эти данные разбиваются на не-непрерывные столбцы. Я, вероятно, следует показать именно то, что я пытаюсь сделать:VBA Excel - Непрерывные ячейки в той же строке, по строкам
For Each i In Range("Table1[#Headers]")
If i = "REF" Then
For Each j In Range("Table1[" & i & "]")
If j <> j.Offset(-1, 0) Then
Range("Table1[[#All],[COL01]]").Cells(j.Row, 1) = val(Range("Table1[[#All],[COL01]]").Cells(j.Row, 1))
Range("Table1[[#All],[COL05]]").Cells(j.Row, 1) = val(Range("Table1[[#All],[COL05]]").Cells(j.Row, 1))
'etc....
Else:
Range("Table1[[#All],[COL01]]").Cells(j.Row, 1).ClearContents
Range("Table1[[#All],[COL05]]").Cells(j.Row, 1).ClearContents
'etc....
End If
Next j
Exit For
End If
Next i
Это находит столбец «REF», который сортируется и имеет кратные одного и того же значения, определяет начало каждого набора одинаковых значений {j <> j.Offset(-1, 0)
} , и если j
действительно является началом набора, он смотрит на другой столбец в той же строке и делает на нем val()
, эффективно превращая пробелы в нули. В противном случае он очистит содержимое этой ячейки ...
Проблема. У меня есть много столбцов типа «COL», с которыми вы работаете, и они не всегда непрерывны, а строки в этих данных таблица составляет 10 000+; весь процесс берет навсегда. Есть ли способ сделать диапазон Union()
, который не является кошмаром для записи? Может быть, используя массивы/словарь/что-то? Любая помощь могла бы быть полезна.
В общем, будет намного (на порядок) прочитать всю таблицу в массив VBA, запустить ваш алгоритм на массиве, а затем записать массив обратно на рабочий лист. Однако, поскольку этот метод не будет обрабатывать формулы, только значения, вам, возможно, придется воспроизвести формулы, когда вы закончите; или написать только измененные столбцы. –
Не могли бы вы привести пример того, что вы имеете в виду? Массивы для меня новы ... –
Вы можете начать с обсуждения Chip Pearson [VBA Arrays and Worksheet Ranges] (http://www.cpearson.com/Excel/ArraysAndRanges.aspx) –