Помогите выполнить в общем то простую задачу. Иногда в моей большой сетке, происходит сбой в таких формулах как Сумм() срзнач() и т.д. И я решил написать макрос который бы пробегался по данным строкам с этими формулами и суммировал их.
1. это я сделал. Мы берем значение в ячейки где стоит формула сумм(), для того что бы прибавить его к другой формуле, где так же прописана формула Сумм(). Но не берем те ячейки, которые пустые: [vba]
Код
If MP.Cells(NumRow, iCol).Value <> "" Then TotalRow2 = MP.Cells(irow, iCol).Value + TotalRow2 MP.Cells(NumRow, iCol).Value = TotalRow2 End If
[/vba]
2. Но бывает так, что макрос мне выдает ошибку. В случаи если произошло стирание формулы =СУММ(#ССЫЛКА!). И в этом случаи срабатывал бы Error. Тут можно наверное два варианта рассмотреть.
Вариант А - просто переходим через select на ячейку с ошибкой и правим ручками. (хотя бы так) Вариант Б - Макрос сам понимает в чем дело и рисует формулу заново.
Спасибо! [moder]Приложите файл с примером.[/moder]
Помогите выполнить в общем то простую задачу. Иногда в моей большой сетке, происходит сбой в таких формулах как Сумм() срзнач() и т.д. И я решил написать макрос который бы пробегался по данным строкам с этими формулами и суммировал их.
1. это я сделал. Мы берем значение в ячейки где стоит формула сумм(), для того что бы прибавить его к другой формуле, где так же прописана формула Сумм(). Но не берем те ячейки, которые пустые: [vba]
Код
If MP.Cells(NumRow, iCol).Value <> "" Then TotalRow2 = MP.Cells(irow, iCol).Value + TotalRow2 MP.Cells(NumRow, iCol).Value = TotalRow2 End If
[/vba]
2. Но бывает так, что макрос мне выдает ошибку. В случаи если произошло стирание формулы =СУММ(#ССЫЛКА!). И в этом случаи срабатывал бы Error. Тут можно наверное два варианта рассмотреть.
Вариант А - просто переходим через select на ячейку с ошибкой и правим ручками. (хотя бы так) Вариант Б - Макрос сам понимает в чем дело и рисует формулу заново.
Спасибо! [moder]Приложите файл с примером.[/moder]lopuxi
Можно использовать проверку значения, если ошибка - скопировать формулу слева от нее : [vba]
Код
Private Sub CommandButton1_Click() ' Подведение итогов среди итогов по всем городам, в самой нижней части МП NumRow = 26
TotalRow2 = 0 For iCol = 10 To 26 For irow = 17 To NumRow If Cells(irow, 2).Interior.ColorIndex = 46 Then If Cells(NumRow, iCol).Value <> "" Then Cells(irow, iCol).Select If IsError(Cells(irow, iCol).Value) Then Cells(irow, iCol).FormulaR1C1 = Cells(irow, iCol - 1).FormulaR1C1 MsgBox Cells(irow, iCol).Value TotalRow2 = Cells(irow, iCol).Value + TotalRow2 Cells(NumRow, iCol).Value = TotalRow2 End If End If Next TotalRow2 = 0 Next End Sub
[/vba]
Одного не пойму - зачем Вы столько msgBox ов выводите?
Можно использовать проверку значения, если ошибка - скопировать формулу слева от нее : [vba]
Код
Private Sub CommandButton1_Click() ' Подведение итогов среди итогов по всем городам, в самой нижней части МП NumRow = 26
TotalRow2 = 0 For iCol = 10 To 26 For irow = 17 To NumRow If Cells(irow, 2).Interior.ColorIndex = 46 Then If Cells(NumRow, iCol).Value <> "" Then Cells(irow, iCol).Select If IsError(Cells(irow, iCol).Value) Then Cells(irow, iCol).FormulaR1C1 = Cells(irow, iCol - 1).FormulaR1C1 MsgBox Cells(irow, iCol).Value TotalRow2 = Cells(irow, iCol).Value + TotalRow2 Cells(NumRow, iCol).Value = TotalRow2 End If End If Next TotalRow2 = 0 Next End Sub
[/vba]
Одного не пойму - зачем Вы столько msgBox ов выводите?SLAVICK
Private Sub CommandButton1_Click() ' Подведение итогов среди итогов по всем городам, в самой нижней части МП NumRow = 26 Dim k& Dim formStr$, funcName
For iCol = 10 To 26 TotalRow2 = 0: k = 0 For irow = 17 To NumRow If Cells(irow, 2).Interior.ColorIndex = 46 Then funcName = Split(Cells(irow, iCol).FormulaR1C1, "(") If UBound(funcName) > 0 Then formStr = funcName(0) & "(R[-" & k & "]C:R[-1]C" & ")": Cells(irow, iCol).FormulaR1C1 = formStr TotalRow2 = Cells(irow, iCol).Value + TotalRow2: k = 0 Else k = k + 1 End If
Next irow If (Cells(NumRow, iCol).Value) <> "" Then Cells(NumRow, iCol).Value = TotalRow2 Next iCol End Sub
[/vba] Работает, если в формулах указан диапазон через ":" (типа Сумм(А1:А3), Срзнач(А1:А3))
lopuxi, еще один вариант: [vba]
Код
Private Sub CommandButton1_Click() ' Подведение итогов среди итогов по всем городам, в самой нижней части МП NumRow = 26 Dim k& Dim formStr$, funcName
For iCol = 10 To 26 TotalRow2 = 0: k = 0 For irow = 17 To NumRow If Cells(irow, 2).Interior.ColorIndex = 46 Then funcName = Split(Cells(irow, iCol).FormulaR1C1, "(") If UBound(funcName) > 0 Then formStr = funcName(0) & "(R[-" & k & "]C:R[-1]C" & ")": Cells(irow, iCol).FormulaR1C1 = formStr TotalRow2 = Cells(irow, iCol).Value + TotalRow2: k = 0 Else k = k + 1 End If
Next irow If (Cells(NumRow, iCol).Value) <> "" Then Cells(NumRow, iCol).Value = TotalRow2 Next iCol End Sub
[/vba] Работает, если в формулах указан диапазон через ":" (типа Сумм(А1:А3), Срзнач(А1:А3))Manyasha