Сейчас я делаю проект с очень большими данными (700 000 строк * 27 столбцов). Проблема, с которой я сталкиваюсь сейчас:
Пример данных:
Date Category1 P&L ........ (other columns)
20180901 XXCV 123,542
20180901 ASB 4523,542
20180901 XXCV 12243,544
20180901 XXCV 12334,542
20180901 DEE 14623,5441
.
.
.
Теперь у меня есть список имен новых категорий, и я должен заменить старое имя новым именем. Список выглядит так:
Old_name New_Name
XXCV XASS
ASB CSS
.
.
.
Способ, которым я решил эту проблему, состоит в том, что я перебираю все старое Имя в списке, а затем фильтрую каждое из исходных данных и, наконец, меняю старое Имя на новое Имя.
Например:
Первый цикл XXCV. Макрос перейти к исходному паспорту и отфильтровать столбец "Catagory1" по XXCV Затем поменяйте все XXCV на XASS.
Макрос Продолжайте делать это до тех пор, пока не закроете все старое Имя.
Проблема в том, что данных слишком много! Процесс фильтрации очень медленный.
Более того, у меня есть 2000 старых имен, которые нужно поменять на новые. Другими словами, я должен зацикливаться 2000 раз!
Мне потребовалось так много времени, чтобы закончить весь процесс.
Я знаю, что выполнение этой задачи в Access могло бы быть лучше. Однако можно ли ускорить этот процесс и завершить его за 5-10 минут?
Заранее спасибо!
Edit:
Коды следующие:
Sub Mapping_Table()
Dim row_ori_book As Long
Dim row_fin_book As Long
Dim original_book As Variant
Dim sheets_name As Variant
Dim n_sheetName As Variant
Dim row_end As Long
Dim col_end As Long
Dim row_loop As Long
Dim n_ori_book As Variant
' Modify book name in sheet CoC_Exp_NExp & sheet CoC UU
Sheets("Mapping_Table").Activate
row_ori_book = Cells(Rows.Count, "A").End(xlUp).Row
'row_fin_book = Cells(Rows.Count, "B").End(xlUp).Row
original_book = Range(Cells(2, "A"), Cells(row_ori_book, "A")).Value
sheets_name = Array("CoC_Exp_NExp", "CoC_UU")
For Each n_sheetName In sheets_name
Sheets(n_sheetName).Activate
row_end = Cells(Rows.Count, "A").End(xlUp).Row
col_end = Cells(1, Columns.Count).End(xlToLeft).Column
row_loop = 2
For Each n_ori_book In original_book
ActiveSheet.AutoFilterMode = False
Range(Cells(1, 1), Cells(row_end, col_end)).AutoFilter Field:=12, Criteria1:=n_ori_book, Operator:=xlFilterValues
On Error Resume Next
Range(Cells(2, "L"), Cells(row_end, "L")).SpecialCells(xlCellTypeVisible).Value = Sheets("Mapping_Table").Cells(row_loop, "B").Value
On Error GoTo 0
row_loop = row_loop + 1
ActiveSheet.AutoFilterMode = False
Next n_ori_book
Next
End Sub