Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Макрос выполняющий формулы

Автор baters, 20.05.2011, 23:24:35

« назад - далее »

Дмитрий Щербаков(The_Prist)

Цитата: baters от 07.06.2011, 22:42:08
В примере этого нет
ну не наю....может в макросе, что то не так.
Где логика? Если в выложенном файле формулы без ошибок работают - значит дело не в макросе. Если хоть какие-то данные тянутся - значит неверный результат не из-за макроса, а из-за данных файла. Пробуйте снять объединение, привести данные к одному виду и посмотрите на результат.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

 Дело было именно в макросе:
     Range("E3:AA" & lLastRow).Value = Range("E3:AA" & lLastRow).Value
   Range("A3:Q" & lLastRow).Sort Range("B3"), xlAscending
   ActiveSheet.Range("$A$1:$Q" & lLastRow).AutoFilter Field:=16, Criteria1:="<>0", Operator:=xlAnd
   Application.ScreenUpdating = 1

Я включил логику и макрос капитулировал :) (я просто неимоверно крут 8))

baters

#32
Вопрос снят.

baters

' Ìàêðîñ3 Ìàêðîñ
'

'
    Range("C2").Select
    ActiveCell.FormulaR1C1 = _
         Range("C2:C" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[1])*(R1C=DefectJournal!C[10])*(DefectJournal!C[6]>0))"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = _
          Range("D2:D" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C[-1]=DefectJournal!C[9])*(DefectJournal!C[5]<0))"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = _
          Range("E2:E" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-4]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = _
          Range("F2:F" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-5]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
   
End Sub


Нет...все таки вопрос не снят...
Добрый день, ложу формулы на макрос, жамкаю Ф8 (что бы проверить на ошибки макрос) и он зависает ни чего не делая.
Подскажите в чем может быть проблема.

Юрий М

А я не понимаю зачем макросом вставлять формулы? Считайте всё в коде.

baters

Цитата: Юрий М от 21.06.2011, 22:03:36
А я не понимаю зачем макросом вставлять формулы? Считайте всё в коде.

Я слишком умен для этого....и не исчу легких путей.


Дмитрий Щербаков(The_Prist)

А почему Вы ожидаете чего-то от макроса по нажатии F8?
А от такого макроса тем более:
ActiveCell.FormulaR1C1 = _
          Range("D2:D" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C[-1]=DefectJournal!C[9])*(DefectJournal!C[5]<0))"

Результат будет: Формула в активной ячейке: диапазон Range("D2:D" & lLastRow).FormulaR1C1 равен тексту "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C[-1]=DefectJournal!C[9])*(DefectJournal!C[5]<0))". Т.е. будет ЛОЖЬ. Проверьте, сразу после запуска макроса что-то в этом роде.
Надо избавиться от ActiveCell:
Range("D2:D" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C[-1]=DefectJournal!C[9])*(DefectJournal!C[5]<0))"
А вообще мне кажется у Вас слишком большие диапазоны в формулах, чтобы быстро все рассчиталось(65000 строк) быстро.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

Sub ÎÒÐ()


    Application.Calculate
     
      Range("D3:D65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C=DefectJournal!C[9])*(DefectJournal!C[5]>0))"
      Range("E3:E65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-1])*(R1C[-1]=DefectJournal!C[8])*(DefectJournal!C[4]<0))"
      Range("F3:F65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-5]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("G3:G65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-6]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("I3:I65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-5])*(R1C=DefectJournal!C[4])*(DefectJournal!C>0))"
      Range("J3:J65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-6])*(R1C[-1]=DefectJournal!C[3])*(DefectJournal!C[-1]<0))"
      Range("K3:K65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-10]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("L3:L65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-11]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("N3:N65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-10])*(R1C=DefectJournal!C[-1])*(DefectJournal!C[-5]>0))"
      Range("O3:O65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-11])*(R1C[-1]=DefectJournal!C[-2])*(DefectJournal!C[-6]<0))"
      Range("P3:P65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-15]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("Q3:Q65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-16]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("S3:S65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-15])*(R1C=DefectJournal!C[-6])*(DefectJournal!C[-10]>0))"
      Range("T3:T65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-16])*(R1C[-1]=DefectJournal!C[-7])*(DefectJournal!C[-11]<0))"
      Range("U3:U65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-20]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("V3:V65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-21]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("X3:X65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-20])*(R1C=DefectJournal!C[-11])*(DefectJournal!C[-15]>0))"
      Range("Y3:Y65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-21])*(R1C[-1]=DefectJournal!C[-12])*(DefectJournal!C[-16]<0))"
      Range("Z3:Z65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-25]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("AA3:AA65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-26]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("AC3:AC65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-25])*(R1C=DefectJournal!C[-16])*(DefectJournal!C[-20]>0))"
      Range("AD3:AD65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-26])*(R1C[-1]=DefectJournal!C[-17])*(DefectJournal!C[-21]<0))"
      Range("AE3:AE65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-30]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("AF3:AF65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-31]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("AH3:AH65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-30])*(R1C=DefectJournal!C[-21])*(DefectJournal!C[-25]>0))"
      Range("AI3:AI65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-31])*(R1C[-1]=DefectJournal!C[-22])*(DefectJournal!C[-26]<0))"
      Range("AJ3:AJ65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-35]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("AK3:AK65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-36]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("AM3:AM65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-35])*(R1C=DefectJournal!C[-26])*(DefectJournal!C[-30]>0))"
      Range("AN3:AN65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-36])*(R1C[-1]=DefectJournal!C[-27])*(DefectJournal!C[-31]<0))"
      Range("AO3:AO65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-40]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("AP3:AP65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-41]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("AR3:AR65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-40])*(R1C=DefectJournal!C[-31])*(DefectJournal!C[-35]>0))"
      Range("AS3:AS65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-41])*(R1C[-1]=DefectJournal!C[-32])*(DefectJournal!C[-36]<0))"
      Range("AT3:AT65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-45]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("AU3:AU65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-46]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("AW3:AW65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-45])*(R1C=DefectJournal!C[-36])*(DefectJournal!C[-40]>0))"
       Range("AX3:AX65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-46])*(R1C[-1]=DefectJournal!C[-37])*(DefectJournal!C[-41]<0))"
       Range("AY3:AY65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-50]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
       Range("AZ3:AZ65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-51]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
      Range("BB3:BB65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-50])*(R1C=DefectJournal!C[-41])*(DefectJournal!C[-45]>0))"
     Range("BC3:BC65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-51])*(R1C[-1]=DefectJournal!C[-42])*(DefectJournal!C[-46]<0))"
       Range("BD3:BD65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-55]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)"
      Range("BE3:BE65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-56]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-3])*DefectJournal!R2C10:R65000C10)"
       
           
     

End Sub



Еще раз добрый день.

Воюю вот с этим макросом (перенес формулы с помощью Ф2 и ентера) в итоге он считает и ни чего не насчитывает, везде показывает "0".
Помогите понять что делает вот эта строка (что с чем сравнивает и что считает)...я кажись запутался.
  Range("D3:D65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C=DefectJournal!C[9])*(DefectJournal!C[5]>0))"





baters

все, разобрался, считается все правильно..просто макрос тяжелый...очень тяжелый.

Дмитрий Щербаков(The_Prist)

#39
Замените вот эти строки: R2C10:R65000C10 именованными динамическими диапазонами. Думаю не надо пояснять где искать статьи по их созданию :)
Если не знаете как использовать - в статье про простые Именованные диапазоны есть пример использования в формулах.

Решил все же приложить ссылки на статьи(для тех, кто не знает где искать):
Именованные диапазоны
Динамические именованные диапазоны
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

Сапасибо, буду побеждать.

baters

Range("F3:F65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-5]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*(MsgBox Range("kolvo").Address
     
      Range("F3:F65000" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-5]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*(MsgBox [kolvo].Address"



Доброе утро.

Сделал я диапазон, в простых формулах работает как часики, согласно примерам попробовал вставить его (диапазон в макрос) ни чего не вышло, жамкаю Ф8 строка желтеет и усе. Перепробовал кучу вариантов (скопки, запятые, ковычки и т.д) ни чего не помогает. Подскажите, что не так?

Юрий М

Странно вы записываете границы диапазона: посмотрите - Дмитрий Вам подсказывал - Range("D2:D" & lLastRow), а Вы пишете - Range("F3:F65000" & lLastRow)
Разницу видите?

baters

Я воспользовался вот этим советом Дмитрия
"А вообще мне кажется у Вас слишком большие диапазоны в формулах, чтобы быстро все рассчиталось(65000 строк) быстро."

Тут то проблем нет, проблема в том, что макрос не хочет понимать мой диапазон "kolvo"

Юрий М

Смотрите:
Range("D2:D" & lLastRow) - диапазон D2:D и номер последней строки (iLastRow)
У Вас:
Range("F3:F65000" & lLastRow) - диапазон F3:F65000 и номер последней строки.
Кстати, iLastRow чему у Вас равно?

Яндекс.Метрика Рейтинг@Mail.ru