Прежде всего, я довольно новый и неэффективный пользователь VBA, который вы обязательно заметите.
Я создал макрос с циклами, который работает очень медленно (около 10 минут в зависимости от набора данных,который различается по размеру каждый раз), и я предполагаю, что есть гораздо лучший способ сделать это, чем мой.
По сути, я пытаюсь автоматизировать работу, которая включает в себя множество встроенных функций в Excel.Я получил четыре столбца и X количество строк, которые должны быть заполнены формулами.
Моя идея состояла в том, чтобы вычислить формулу для всех четырех столбцов в строке 1, а затем перейти к строке 2 вплоть до строки X, используя простой цикл «do».Это выглядит примерно так:
Range("j2").Select
rownumber = ActiveCell.Row
Do
'check if the cell on the left is empty to determine whether it´s the last row or not.
Range("J" & rownumber).Select
Range("J" & rownumber).Offset(0, -1).Select
If IsEmpty(ActiveCell) = True Then
Exit Do
Else
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _ "=INDEX(Sheet1!C[-4],MATCH(Sheet2!R[0]C[-6],Sheet1!C[-9],0))"
'next column
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _ "=INDEX(sheet1!C[-6],MATCH(sheet2!RC[-7],sheet1!C[-10],0))"
'next column
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _ "=INDEX(sheet3!C[-10],MATCH(sheet2!RC[-2],sheet1!C[-11],0))*sheet2!RC[-1]*sheet2!RC[-10]"
'next column
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _ "=IF(sheet2!RC[-12]=""BUY"",SUMIFS(sheet4!C[-7],sheet4!C[-12],sheet2!RC[-6],sheet4!C[-11],sheet2!RC[-9])+sheet2!RC[-11],SUMIFS(sheet4!C[-7],sheet4!C[-12],sheet2!RC[-6],sheet4!C[-11],sheet2!RC[-9])-sheet2!RC[-11])"
ActiveCell.Offset(0, 1).Select
rownumber = rownumber + 1
End If
Loop
Все это работает, но должно быть лучшее решение, которое работает более плавно.Я понимаю, что Excel нужно выполнять много вычислений с вложенными операторами if, но, вероятно, мне потребуется менее 10 минут, чтобы сделать это вручную, поэтому я предполагаю, что мой код замедляет работу.