Нужно проверить данные на определенные условия по формулам. Условий много, каждую формулу вставлять в новый столбец не вариант. Можно ли макросом прописать одну формулу, потом на основании полученных значений, если 1 поставить другую формулу и тд. [vba]
Код
Sub Макрос1() ' ' Макрос1 Макрос ' ' Сочетание клавиш: Ctrl+с ' Range("C2").Select ActiveCell.FormulaR1C1 = _ "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=""апсейл ШПД при миграции"",R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=1),""IPTV"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=1, R[-1]C[-2]=""Интернет"",R[-1]C[-1]=""апсейл ШПД при миграции""),""IPTV"",""1"")))" iLastRow = Cells(Rows.Count, 1).End(xlUp).Row Selection.AutoFill Destination:=Range("C2:C" & iLastRow) Rows("1:1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$FT$33508").AutoFilter Field:=3, Criteria1:="=1", _ Operator:=xlOr, Criteria2:="=ЛОЖЬ" Range("C2").Select ActiveCell.FormulaR1C1 = _ "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=1,R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=""апсейл IPTV при миграции""),""ШПД"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=""апсейл IPTV при миграции"", R[-1]C[-2]=""Интернет"",R[-1]C[-1]=1),""ШПД"",""1"")))" iLastRow = Cells(Rows.Count, 1).End(xlUp).Row Selection.AutoFill Destination:=Range("C2:C" & iLastRow) End Sub
[/vba]
на что заменить после второй формулы, чтобы формула прописывалась только там где 1? На данный момент вторая формула, полностью заменяет первую. [vba]
Нужно проверить данные на определенные условия по формулам. Условий много, каждую формулу вставлять в новый столбец не вариант. Можно ли макросом прописать одну формулу, потом на основании полученных значений, если 1 поставить другую формулу и тд. [vba]
Код
Sub Макрос1() ' ' Макрос1 Макрос ' ' Сочетание клавиш: Ctrl+с ' Range("C2").Select ActiveCell.FormulaR1C1 = _ "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=""апсейл ШПД при миграции"",R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=1),""IPTV"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=1, R[-1]C[-2]=""Интернет"",R[-1]C[-1]=""апсейл ШПД при миграции""),""IPTV"",""1"")))" iLastRow = Cells(Rows.Count, 1).End(xlUp).Row Selection.AutoFill Destination:=Range("C2:C" & iLastRow) Rows("1:1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$FT$33508").AutoFilter Field:=3, Criteria1:="=1", _ Operator:=xlOr, Criteria2:="=ЛОЖЬ" Range("C2").Select ActiveCell.FormulaR1C1 = _ "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=1,R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=""апсейл IPTV при миграции""),""ШПД"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=""апсейл IPTV при миграции"", R[-1]C[-2]=""Интернет"",R[-1]C[-1]=1),""ШПД"",""1"")))" iLastRow = Cells(Rows.Count, 1).End(xlUp).Row Selection.AutoFill Destination:=Range("C2:C" & iLastRow) End Sub
[/vba]
на что заменить после второй формулы, чтобы формула прописывалась только там где 1? На данный момент вторая формула, полностью заменяет первую. [vba]
Sub dsds2() Dim i&, n& Dim s1$, s2$ s2 = "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=1,R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=""апсейл IPTV при миграции""),""ШПД"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=""апсейл IPTV при миграции"", R[-1]C[-2]=""Интернет"",R[-1]C[-1]=1),""ШПД"",""1"")))" s1 = "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=""апсейл ШПД при миграции"",R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=1),""IPTV"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=1, R[-1]C[-2]=""Интернет"",R[-1]C[-1]=""апсейл ШПД при миграции""),""IPTV"",""1"")))" n = ActiveSheet.Cells(Rows.count, 2).End(xlUp).Row For i = 2 To n If Cells(i, 2) = 1 Then Cells(i, 3).FormulaR1C1 = s2 Else Cells(i, 3).FormulaR1C1 = s1 End If Next i End Sub
[/vba] Но почему бы не сделать всё формулой?
MARINKA, макрос придётся чуток другой: [vba]
Код
Sub dsds2() Dim i&, n& Dim s1$, s2$ s2 = "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=1,R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=""апсейл IPTV при миграции""),""ШПД"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=""апсейл IPTV при миграции"", R[-1]C[-2]=""Интернет"",R[-1]C[-1]=1),""ШПД"",""1"")))" s1 = "=IF(RC[-2]=""Интернет"",IF(AND(RC[-1]=""апсейл ШПД при миграции"",R[1]C[-2]=""Цифровое телевидение"",R[1]C[-1]=1),""IPTV"",""1""),IF(RC[-2]=""Цифровое телевидение"",IF(AND(RC[-1]=1, R[-1]C[-2]=""Интернет"",R[-1]C[-1]=""апсейл ШПД при миграции""),""IPTV"",""1"")))" n = ActiveSheet.Cells(Rows.count, 2).End(xlUp).Row For i = 2 To n If Cells(i, 2) = 1 Then Cells(i, 3).FormulaR1C1 = s2 Else Cells(i, 3).FormulaR1C1 = s1 End If Next i End Sub
[/vba] Но почему бы не сделать всё формулой?Roman777
Roman777, спасибо, но не то. Я не правильно сформулировала задачу , нужно В столбце С, проставить первую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить вторую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить третью формулу и тд Те нужно прописать применение n-формул в столбцу С, которые постепенно заменят 1 на значения
Roman777, спасибо, но не то. Я не правильно сформулировала задачу , нужно В столбце С, проставить первую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить вторую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить третью формулу и тд Те нужно прописать применение n-формул в столбцу С, которые постепенно заменят 1 на значенияMARINKA
там где в ячейках С:С =1 (те в 3 столбце) проставить вторую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить третью формулу и тд
у Вас тут опечатка, или я всё ещё не понимаю о чём речь в вашей задаче? Получается, что Вам нужны итерации, после постановок формул вновь исследуя результат проставлять следующую формулу? Тогда зачем тут формулы, если можно сразу ВБА кодом? И вообще, какими будут все формулы, последовательно, как Вы планируете их вписать и куда? Лучше, наверное, пояснить, какие исходные данные и чего Вы из них хотите сделать...
там где в ячейках С:С =1 (те в 3 столбце) проставить вторую формулу там где в ячейках С:С =1 (те в 3 столбце) проставить третью формулу и тд
у Вас тут опечатка, или я всё ещё не понимаю о чём речь в вашей задаче? Получается, что Вам нужны итерации, после постановок формул вновь исследуя результат проставлять следующую формулу? Тогда зачем тут формулы, если можно сразу ВБА кодом? И вообще, какими будут все формулы, последовательно, как Вы планируете их вписать и куда? Лучше, наверное, пояснить, какие исходные данные и чего Вы из них хотите сделать...Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Четверг, 29.03.2018, 07:05