Другим решением было бы создать расширенный фильтр для Chm123456, а затем скопировать их в другой диапазон. Если вы получаете их в строковом массиве, вы можете использовать встроенную функцию Excel Join (saString, ",") (работает только со строковыми массивами).
Не актуальный код для вас, но он указывает вам возможное направление, которое может быть полезным.
ОК, это может быть довольно быстро для тонны данных. Сбор данных для каждой ячейки занимает уйму времени, лучше собрать все сразу. Уникальный для вставки, а затем получить данные, используя
vData=rUnique
где vData - это вариант, а rUnique - это скопированные ячейки. Это на самом деле может быть быстрее, чем захват каждой точки данных точка за точкой (внутреннее приложение Excel может копировать и вставлять очень быстро). Другой вариант - захватить уникальные данные, не имея копии и прошедших событий, вот как:
dim i as long
dim runique as range, reach as range
dim sData as string
dim vdata as variant
set runique=advancedfilter(...) 'Filter in place
set runique=runique.specialcells(xlCellTypeVisible)
for each reach in runique.areas
vdata=reach
for i=lbound(vdata) to ubound(vdata)
sdata=sdata & vdata(i,1)
next l
next reach
Лично я предпочел бы вставить внутреннюю копию, чтобы вы могли просмотреть каждый лист и затем получить данные в самом конце (это было бы довольно быстро, быстрее, чем циклически проходить по каждой ячейке). Итак, просматривая каждый лист.
dim wks as worksheet
for each wks in Activeworkbook.Worksheets
if wks.name <> "CopiedToWorksheet" then
advancedfilter(...) 'Copy to bottom of list, so you'll need code for that
end if
next wks
vdata=activeworkbook.sheets("CopiedToWorksheet").usedrange
sData=vdata(1,1)
for i=lbound(vdata) + 1 to ubound(vdata)
sData=sData & ","
next i
Приведенный выше код должен быть быстрым. Я не думаю, что вы можете использовать Join для какого-либо варианта, но вы всегда можете попробовать его, это сделает его еще быстрее. Вы также можете попробовать application.worksheetfunctions.contat (или что-то еще, что называется функцией контактирования), чтобы объединить результаты, а затем просто получить окончательный результат.
On Error Resume Next
wks.ShowAllData
On Error GoTo 0
wks.UsedRange.Rows.Hidden = False
wks.UsedRange.Columns.Hidden = False
rFilterLocation.ClearContents