Чередование формул на нечетных / четных строках - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь написать одну формулу для четных строк и другую формулу для нечетных строк в одном столбце. При поиске на этом сайте я нашел следующий код:

Sub OddRowAlert()
With Range("B16:B100")
    .Formula = "=IF((MOD(ROW(B16),2)),""Odd"",""Even"")"
    .Formula = .Value
End With
End Sub  

Это работает с текстом или простыми формулами. Однако, когда я заменяю «Нечетный» или «Четный» своей формулой, я получаю

ошибка времени выполнения «1004»: ошибка приложения или объекта.

Вот код, который я пытаюсь:

Sub Daily_Analysis()
'
' Daily_Analysis Macro
'
Lastrow = Range("B" & Rows.Count).End(xlUp).Row

Range("L7:L" & Lastrow).Formula = "=Text(A7,""dddd"")"

With Range("M7:M" & Lastrow)
    .Formula = "=IF((MOD(ROW(M7),2)),""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""Number of times over 75%"",L7=L6,"""")"",""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L6<>L5,COUNTIFS(D7:D103,"">75%"",K7:K103,""Working"")+COUNTIFS(G7:G103,"">75%"",K7:K103,""Working""),L6=L5,"""")"")"
    .Formula = .Value
End With

With Range("N7:N" & Lastrow)
     .Formula = "=IF((MOD(ROW(N7),2)),""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""Percentage of the day"",L7=L6,"""")"",""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,M8/COUNTIFS(K7:K102,""working"",L7:L102,L7),L7=L6,"""")"")"
     .Formula = .Value
End With

With Range("O7:O" & Lastrow)
     .Formula = "=IF((MOD(ROW(O7),2)),""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""hours of poor performance"",L7=L6,"""")"",""=IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,(15*M8)/60,L7=L6,"""")"")"
     .Formula = .Value
End With

'
End Sub

1 Ответ

1 голос
/ 18 октября 2019

Как указано в комментариях, вложенная формула не получает "", окружающих их, а не =, просто вкладывает их:

Sub Daily_Analysis()
'
' Daily_Analysis Macro
'
Lastrow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row

ActiveSheet.Range("L7:L" & Lastrow).Formula = "=Text(A7,""dddd"")"

With ActiveSheet.Range("M7:M" & Lastrow)
    .Formula = "=IF((MOD(ROW(M7),2)),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""Number of times over 75%"",L7=L6,""""),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L6<>L5,COUNTIFS(D7:D103,"">75%"",K7:K103,""Working"")+COUNTIFS(G7:G103,"">75%"",K7:K103,""Working""),L6=L5,""""))"
    .Value = .Value
End With

With ActiveSheet.Range("N7:N" & Lastrow)
     .Formula = "=IF((MOD(ROW(N7),2)),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""Percentage of the day"",L7=L6,""""),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,M8/COUNTIFS(K7:K102,""working"",L7:L102,L7),L7=L6,""""))"
     .Value = .Value
End With

With ActiveSheet.Range("O7:O" & Lastrow)
     .Formula = "=IF((MOD(ROW(O7),2)),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,""hours of poor performance"",L7=L6,""""),IFS(L7=""Saturday"","""",L7=""Sunday"","""",L7<>L6,(15*M8)/60,L7=L6,""""))"
     .Value = .Value
End With

'
End Sub

Кстати, вытаскивая подобные элементы и переставляяМожно сократить формулы:

Sub Daily_Analysis()
'
' Daily_Analysis Macro
'
Lastrow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row

ActiveSheet.Range("L7:L" & Lastrow).Formula = "=Text(A7,""dddd"")"

With ActiveSheet.Range("M7:M" & Lastrow)
    .Formula = "=IF(OR(WEEKDAY(A7,2)>5,l7=l6),"""",IF(Mod(row(),2),""Number of times over 75%"",COUNTIFS(D7:D103,"">75%"",K7:K103,""Working"")+COUNTIFS(G7:G103,"">75%"",K7:K103,""Working"")))"
    .Value = .Value
End With

With ActiveSheet.Range("N7:N" & Lastrow)
     .Formula = "=IF(OR(WEEKDAY(A7,2)>5,l7=l6),"""",IF(Mod(row(),2),""Percentage of the day"",M8/COUNTIFS(K7:K102,""working"",L7:L102,L7)))"
     .Value = .Value
End With

With ActiveSheet.Range("O7:O" & Lastrow)
     .Formula = "=IF(OR(WEEKDAY(A7,2)>5,l7=l6),"""",IF(Mod(row(),2),""hours of poor performance"",L7<>L6,(15*M8)/60))"
     .Value = .Value
End With

'
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...