2015-11-24 5 views
0

У меня есть большая таблица данных, и я пишу макрос в VBA для заполнения другой вкладки, которая дублирует лист со ссылками на ячейки, а не значениями (я понимаю, что это странно, но это то, что Меня попросили сделать). Код, который я здесь, работает, но он принимает FOREVER. Я предполагаю, что должен быть более быстрый способ, поскольку делать это вручную с помощью хорошего ctrl cv занимает меньше секунды.Быстрый способ заполнить множество формул с помощью ссылок на ячейки

Public Sub PopulateSheet() 
Dim inputSheet As Worksheet 
Dim outputSheet As Worksheet 
Dim rowCounter As Long 
Dim columnCounter As Long 
Dim maxRow As Long 

Set inputSheet = Sheets("inputSheet") 
Set outputSheet = Sheets("outputSheet") 

maxRow = inputSheet.Cells(1048576, 1).End(xlUp).Row 

With outputSheet 
    For columnCounter = 1 To 6 
     For rowCounter = 1 To maxRow 
      .Cells(rowCounter, columnCounter).Formula = "=" & "'inputSheet'!" & Cells(rowCounter, columnCounter).Address 
     Next rowCounter 
    Next columnCounter 
End With 

Редактировать: Я уже выключил проверку экрана и установил расчет вручную.

+0

Набор 'ScreenUpdating' Ложь и' Application.Calculation' для руководства перед входом в цикл. Не забудьте сбросить расчет, когда закончите - эта настройка является постоянной. –

+0

Я уже применил эти идеи. Я обновлю OP, чтобы это отразить. – learningAsIGo

ответ

1

Вы можете попробовать это:

Public Sub PopulateSheet() 
Dim inputSheet As Worksheet 
Dim outputSheet As Worksheet 
Dim rowCounter As Long 
Dim columnCounter As Long 
Dim maxRow As Long 

Set inputSheet = Sheets("inputSheet") 
Set outputSheet = Sheets("outputSheet") 

maxRow = inputSheet.Cells(1048576, 1).End(xlUp).Row 

With outputSheet 
    For columnCounter = 1 To 6 

     .Cells(1, columnCounter).Formula = "=" & "'inputSheet'!" & Cells(1, columnCounter).Address(False,False) 

     .Range(.Cells(1, columnCounter), .Cells(maxRow, columnCounter)).FillDown 

    Next columnCounter 
End With 
1
Set inputSheet = Sheets("inputSheet") 
Set outputSheet = Sheets("outputSheet") 

maxRow = inputSheet.Cells(1048576, 1).End(xlUp).Row 

inputsheet.Range("A1").resize(maxRow, 6).copy 

With outputSheet 
    .activate 
    .range("A1").select 
    .paste Link:=true 
End With 
+0

Это работает! Гораздо быстрее, чем моя реализация. – learningAsIGo

Смежные вопросы