Доброго времени суток!
Очередной вопрос от нуба.
Есть несколько листов с данными, которые надо обрабатывать подставляя формулы (фактически подстановка критериев для работы формул типа суммеслимн и иже с ней). Количество строк на листах 45 000 строк.
Код работал при количестве строк до 32 000 (переменные шли как Integer). Заменил на Long и ппц(((
Рылся и на форуме и в инете... так и не смог найти объяснение.
Основные части кода (однотипные части не выкладываю, т.к. идет однотипная обработка 6 листов, отличается только количество колонок куда подставляются формулы).
При выполнении выдает ошибку на этой строчке, и других строках, аналогичных этой:
sales.Range(Cells(8, 1), Cells(i, 1)).FormulaR1C1 = "=IFERROR(INDEX(Оплаты!C1,MATCH(Продажи!RC3,Оплаты!C3,0)),"""")"
Буду очень благодарен, если еще подскажете как обойти вот эту ерунду (подстановку результатов вычисления формулы в ячейку):
sales.Range(Cells(8, 1), Cells(i, 1)).Copy
sales.Range(Cells(8, 1), Cells(i, 1)).PasteSpecial xlPasteValues
Насколько я понимаю можно использовать .Value
Но с синтаксисом туплю((( Никак не могу понять как правильно использовать
Заранее спасибо за помощь и внимание!
Очередной вопрос от нуба.
Есть несколько листов с данными, которые надо обрабатывать подставляя формулы (фактически подстановка критериев для работы формул типа суммеслимн и иже с ней). Количество строк на листах 45 000 строк.
Код работал при количестве строк до 32 000 (переменные шли как Integer). Заменил на Long и ппц(((
Рылся и на форуме и в инете... так и не смог найти объяснение.
Основные части кода (однотипные части не выкладываю, т.к. идет однотипная обработка 6 листов, отличается только количество колонок куда подставляются формулы).
Код |
---|
Sub Tchpok() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim wb As Workbook Set wb = ThisWorkbook Dim sales As Worksheet Set sales = wb.Sheets("Продажи") Dim dz As Worksheet Set dz = wb.Sheets("ДЗ") Dim pay As Worksheet Set pay = wb.Sheets("Оплаты") Dim i As Long, n As Long, z As Long i = Application.WorksheetFunction.CountA(sales.Columns(2)) + 5 sales.Range(Cells(8, 1), Cells(i, 1)).FormulaR1C1 = "=IFERROR(INDEX(Оплаты!C1,MATCH(Продажи!RC3,Оплаты!C3,0)),"""")" sales.Range(Cells(8, 1), Cells(i, 1)).Copy sales.Range(Cells(8, 1), Cells(i, 1)).PasteSpecial xlPasteValues sales.Range(Cells(8, 17), Cells(i, 17)).FormulaR1C1 = "=IFERROR(INDEX(Менеджер_для_премии,MATCH(RC[-9],Менеджер_в_отчетах,0)),"""")" sales.Range(Cells(8, 17), Cells(i, 17)).Copy sales.Range(Cells(8, 17), Cells(i, 17)).PasteSpecial xlPasteValues n = Application.WorksheetFunction.CountA(dz.Columns(1)) + 50 dz.Range(Cells(8, 15), Cells(n, 15)).FormulaR1C1 = "=IFERROR(INDEX(Продажи!C17,MATCH(ДЗ!RC1,Продажи!C3,0)),"""")" dz.Range(Cells(8, 15), Cells(n, 15)).Copy dz.Range(Cells(8, 15), Cells(n, 15)).PasteSpecial xlPasteValues dz.Range(Cells(8, 16), Cells(n, 16)).FormulaR1C1 = "=IFERROR(INDEX(Месяц_период,MATCH(RC3,Дата_ДЗ,0)),R[-1]C)" dz.Range(Cells(8, 16), Cells(n, 16)).Copy dz.Range(Cells(8, 16), Cells(n, 16)).PasteSpecial xlPasteValues dz.Range(Cells(8, 17), Cells(n, 17)).FormulaR1C1 = "=IFERROR(INDEX(Продажи!C6,MATCH(ДЗ!RC1,Продажи!C3,0)),"""")" dz.Range(Cells(8, 17), Cells(n, 17)).Copy dz.Range(Cells(8, 17), Cells(n, 17)).PasteSpecial xlPasteValues z = Application.WorksheetFunction.CountA(pay.Columns(2)) + 50 pay.Range(Cells(7, 17), Cells(z, 17)).FormulaR1C1 = "=IFERROR(INDEX(Месяц_период,MATCH(RC[1],Месяц_период,0)),R[-1]C)" pay.Range(Cells(8, 17), Cells(z, 17)).Copy pay.Range(Cells(8, 17), Cells(z, 17)).PasteSpecial xlPasteValues Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub |
sales.Range(Cells(8, 1), Cells(i, 1)).FormulaR1C1 = "=IFERROR(INDEX(Оплаты!C1,MATCH(Продажи!RC3,Оплаты!C3,0)),"""")"
Буду очень благодарен, если еще подскажете как обойти вот эту ерунду (подстановку результатов вычисления формулы в ячейку):
sales.Range(Cells(8, 1), Cells(i, 1)).Copy
sales.Range(Cells(8, 1), Cells(i, 1)).PasteSpecial xlPasteValues
Насколько я понимаю можно использовать .Value
Но с синтаксисом туплю((( Никак не могу понять как правильно использовать
Заранее спасибо за помощь и внимание!