Новости:

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

Главное меню

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

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

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

Юрий М

Только сейчас заметил (было за пределами окна:
...*(MsgBox [kolvo].Address" - MsgBox тут зачем?

baters

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

Ласт роу равно по сути этому  lLastRow = Cells(Rows.Count, 1).End(xlUp).Row (но это из другова макроса)
А втом макросе над которым карплю сейчас, оно (ласт роу) ни равно ни чему.....так как понимание, что это последняя срока пришло сегодня в 10.44.21...



baters

Цитата: Юрий М от 23.06.2011, 10:46:55
Только сейчас заметил (было за пределами окна:
...*(MsgBox [kolvo].Address" - MsgBox тут зачем?

Скопировал из темы что умеет ЕКСЕЛЬ - Именованные диапазоны

Юрий М

Цитата: baters от 23.06.2011, 10:53:44
Цитата: Юрий М от 23.06.2011, 10:46:55
Только сейчас заметил (было за пределами окна:
...*(MsgBox [kolvo].Address" - MsgBox тут зачем?

Скопировал из темы что умеет ЕКСЕЛЬ - Именованные диапазоны
Вы вот про это (из статьи) говорите?
MsgBox Range("Диапазон1").Address

baters

Да именно про это, я попробовал оба варианта.

Юрий М

Цитата: baters от 23.06.2011, 10:52:51
Цитата: Юрий М от 23.06.2011, 10:44:21
Ласт роу равно по сути этому  lLastRow = Cells(Rows.Count, 1).End(xlUp).Row (но это из другова макроса)
А втом макросе над которым карплю сейчас, оно (ласт роу) ни равно ни чему.....так как понимание, что это последняя срока пришло сегодня в 10.44.21...
Трудно Вас понять... - что значит "пришло сегодня"?
И почему iLastRow "ни равно ни чему"? Вы его вычисляете или нет?

Юрий М

Да Вы поймите - MsgBox только выводит информацию. Нельзя его так использовать.

baters

Цитата: Юрий М от 23.06.2011, 11:02:43
Цитата: baters от 23.06.2011, 10:52:51
Цитата: Юрий М от 23.06.2011, 10:44:21
Ласт роу равно по сути этому  lLastRow = Cells(Rows.Count, 1).End(xlUp).Row (но это из другова макроса)
А втом макросе над которым карплю сейчас, оно (ласт роу) ни равно ни чему.....так как понимание, что это последняя срока пришло сегодня в 10.44.21...
Трудно Вас понять... - что значит "пришло сегодня"?
И почему iLastRow "ни равно ни чему"? Вы его вычисляете или нет?

Вы сегодня написали что ласт роу это номер последней строки, я это прочитал и пришло оно (понимание).
Оно (ласт роу) не равно ни чему потому, что скопировано с другова макроса.....где оно было чему то равно (сейчас разбираюсь чему).
Скорее всего сейчас вычислять я его не буду, ибо еще не разобрался как.

baters

Цитата: Юрий М от 23.06.2011, 11:04:26
Да Вы поймите - MsgBox только выводит информацию. Нельзя его так использовать.

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

Юрий М

Цитата: baters от 23.06.2011, 11:16:28
Цитата: Юрий М от 23.06.2011, 11:04:26
Понял, ну подскажите плиз как мне его использовать что бы макрос мой диапазон kolvo увидел.
Кого - "его"? MsgBox? Его вообще не нужно в формуле использовать. Для чего создают именованный диапазон? - чтобы там, где раньше писали, например, A1:D1000 - можно было написать просто - МойДиапазон.

baters

из примерно такого  =СУММПРОИЗВ((RC[-10]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!R2C9:R65000C9)   я сделал вот такое
=СУММПРОИЗВ((RC[-10]=DefectJournal!R2C4:R65000C4)*(DefectJournal!R2C13:R65000C13=R1C[-2])*DefectJournal!kolvo)
в результате получил #Н/Д, чую где то близко разгадка .... подскажите, что у мну не так?

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

Цитата: baters от 23.06.2011, 11:36:51чую где то близко разгадка .... подскажите, что у мну не так?
Необходимо для каждого диапазона создать именованный(они будут равны по кол-ву строк). Все диапазоны в СУММПРОИЗВ должны быть одного размера.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

Кажись доходит.... мой диапазон "kolvo" меньше остальных диапазонов в 2 раза...спасибо за подсказку.

baters

Sub ÎÒÐ()


    Application.Calculate
        lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
      Range("D3:D" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C)*(R1C=DefectJournal!C[9])*(DefectJournal!C[5]>0))"
      Range("E3:E" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-1])*(R1C[-1]=DefectJournal!C[8])*(DefectJournal!C[4]<0))"
      Range("F3:F" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-5]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("G3:G" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-6]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("I3:I" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-5])*(R1C=DefectJournal!C[4])*(DefectJournal!C>0))"
      Range("J3:J" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-6])*(R1C[-1]=DefectJournal!C[3])*(DefectJournal!C[-1]<0))"
      Range("K3:K" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-10]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("L3:L" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-11]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("N3:N" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-10])*(R1C=DefectJournal!C[-1])*(DefectJournal!C[-5]>0))"
      Range("O3:O" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-11])*(R1C[-1]=DefectJournal!C[-2])*(DefectJournal!C[-6]<0))"
      Range("P3:P" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-15]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("Q3:Q" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-16]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("S3:S" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-15])*(R1C=DefectJournal!C[-6])*(DefectJournal!C[-10]>0))"
      Range("T3:T" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-16])*(R1C[-1]=DefectJournal!C[-7])*(DefectJournal!C[-11]<0))"
      Range("U3:U" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-20]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("V3:V" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-21]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("X3:X" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-20])*(R1C=DefectJournal!C[-11])*(DefectJournal!C[-15]>0))"
      Range("Y3:Y" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-21])*(R1C[-1]=DefectJournal!C[-12])*(DefectJournal!C[-16]<0))"
      Range("Z3:Z" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-25]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("AA3:AA" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-26]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("AC3:AC" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-25])*(R1C=DefectJournal!C[-16])*(DefectJournal!C[-20]>0))"
      Range("AD3:AD" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-26])*(R1C[-1]=DefectJournal!C[-17])*(DefectJournal!C[-21]<0))"
      Range("AE3:AE" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-30]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("AF3:AF" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-31]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("AH3:AH" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-30])*(R1C=DefectJournal!C[-21])*(DefectJournal!C[-25]>0))"
      Range("AI3:AI" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-31])*(R1C[-1]=DefectJournal!C[-22])*(DefectJournal!C[-26]<0))"
      Range("AJ3:AJ" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-35]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("AK3:AK" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-36]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("AM3:AM" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-35])*(R1C=DefectJournal!C[-26])*(DefectJournal!C[-30]>0))"
      Range("AN3:AN" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-36])*(R1C[-1]=DefectJournal!C[-27])*(DefectJournal!C[-31]<0))"
      Range("AO3:AO" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-40]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("AP3:AP" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-41]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("AR3:AR" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-40])*(R1C=DefectJournal!C[-31])*(DefectJournal!C[-35]>0))"
      Range("AS3:AS" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-41])*(R1C[-1]=DefectJournal!C[-32])*(DefectJournal!C[-36]<0))"
      Range("AT3:AT" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-45]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("AU3:AU" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-46]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("AW3:AW" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-45])*(R1C=DefectJournal!C[-36])*(DefectJournal!C[-40]>0))"
       Range("AX3:AX" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-46])*(R1C[-1]=DefectJournal!C[-37])*(DefectJournal!C[-41]<0))"
       Range("AY3:AY" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-50]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
       Range("AZ3:AZ" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-51]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
      Range("BB3:BB" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-50])*(R1C=DefectJournal!C[-41])*(DefectJournal!C[-45]>0))"
     Range("BC3:BC" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC1=DefectJournal!C[-51])*(R1C[-1]=DefectJournal!C[-42])*(DefectJournal!C[-46]<0))"
       Range("BD3:BD" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-55]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-2])*DefectJournal!kolvo)"
      Range("BE3:BE" & lLastRow).FormulaR1C1 = "=SUMPRODUCT((RC[-56]=DefectJournal!nomer)*(DefectJournal!mag=R1C[-3])*DefectJournal!cena)"
       Range("A3:BE" & lLastRow).Value = Range("A3:BE" & lLastRow).Value
       lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
     

End Sub


Макрос доделал, и получился он таким (благодаря подсказкам и чтению "что умеет ексель" узнал и про последние строки в макросе...и про диапазоны).
Макрос работает долго (как строительство коммунизма), и странно (как отечественный автомобиль).
Странности 2:
При запуске (в правом нижнем углу) начинают идти проценты обработки, эти проценты от 1 до 100 идут по каждому столбцу (в макросе таких столбцов 44), и перед отработкой каждого следующего столбца, он (макрос) сначала проставляет в нем "0" а потом уже пересчитывает.

Уважаемые форумчане подскажите, что у мну опять не так.

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

Убрать Application.Calculate.
Вместо него подставить: Application.Calculation = xlManual
Вместо последней lLastRow = Cells(Rows.Count, 1).End(xlUp).Row вставить такую строку:
Application.Calculation = xlAutomatic
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

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