Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для подсчета нарастающим итогом с разных диапазонов. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос для подсчета нарастающим итогом с разных диапазонов.
light26 Дата: Воскресенье, 08.03.2015, 12:39 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1354
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет.
Мои познания VBA ограничены макрорекордером и, иногда, методом научного тыка. Когда первым способом решить задачу невозможно, а второй не помогает, я обращаюсь за помощью к Вам, уважаемые форумчане.
Итак, есть код[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim a
a = Array("$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26")   
For i = 0 To UBound(a)
If Target.Address Like "*" & a(i) & "" Then
      With Target
              Application.EnableEvents = False
              .Offset(, -2) = .Offset(, -2) + .Value
              .Offset(, -4) = .Offset(, -4) + .Value
              Application.EnableEvents = True
      End With
      Exit For
End If
Next
End Sub
[/vba]он работает для суммирования нарастающим итогом в ячейках столбцов L и N значений, вводимых в ячейки столбца P. До недавнего времени этого было достаточно. Сейчас требования изменились и мне нужно, чтобы суммирование нарастающим итогом выполнялось еще и в ячейках столбцов S и U, но значений, вводимых в ячейки столбца W.
Я пробовал просто продублировать код с изменением диапазона a = Array("$Р$11", "$Р$13", "$Р........ "$Р$26") на a = Array("$W$11", "$W$13", "$W........ "$W$26"), пытался заменить "а" на "b" (Dim b, b = Array, For i = 0 To UBound(b), If Target.Address Like "*" & b(i) & "" Then) и ряд других попыток. Для знающего человека это, возможно, покажется глупым и смешным, но мне казались эти варианты возможным решением задачи. Я ошибся и теперь прошу у Вас помощи
К сообщению приложен файл: -1__.xls (63.5 Kb)


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 08.03.2015, 14:42
 
Ответить
СообщениеВсем привет.
Мои познания VBA ограничены макрорекордером и, иногда, методом научного тыка. Когда первым способом решить задачу невозможно, а второй не помогает, я обращаюсь за помощью к Вам, уважаемые форумчане.
Итак, есть код[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim a
a = Array("$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26")   
For i = 0 To UBound(a)
If Target.Address Like "*" & a(i) & "" Then
      With Target
              Application.EnableEvents = False
              .Offset(, -2) = .Offset(, -2) + .Value
              .Offset(, -4) = .Offset(, -4) + .Value
              Application.EnableEvents = True
      End With
      Exit For
End If
Next
End Sub
[/vba]он работает для суммирования нарастающим итогом в ячейках столбцов L и N значений, вводимых в ячейки столбца P. До недавнего времени этого было достаточно. Сейчас требования изменились и мне нужно, чтобы суммирование нарастающим итогом выполнялось еще и в ячейках столбцов S и U, но значений, вводимых в ячейки столбца W.
Я пробовал просто продублировать код с изменением диапазона a = Array("$Р$11", "$Р$13", "$Р........ "$Р$26") на a = Array("$W$11", "$W$13", "$W........ "$W$26"), пытался заменить "а" на "b" (Dim b, b = Array, For i = 0 To UBound(b), If Target.Address Like "*" & b(i) & "" Then) и ряд других попыток. Для знающего человека это, возможно, покажется глупым и смешным, но мне казались эти варианты возможным решением задачи. Я ошибся и теперь прошу у Вас помощи

Автор - light26
Дата добавления - 08.03.2015 в 12:39
Leanna Дата: Воскресенье, 08.03.2015, 14:51 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Вообще то вы правильно делали добавляя список ячеек..
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim a
If Not Intersect(Target, Columns("P:P")) Is Nothing Or _
Not Intersect(Target, Columns("W:W")) Is Nothing Then
     a = Array("$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26", _
               "$W$11", "$W$13", "$W$15", "$W$17", "$W$19", "$W$21", "$W$23", "$W$25", "$W$26")
     For i = 0 To UBound(a)
     If Target.Address Like "*" & a(i) & "" Then
         With Target
                 Application.EnableEvents = False
                 .Offset(, -2) = .Offset(, -2) + .Value
                 .Offset(, -4) = .Offset(, -4) + .Value
                 Application.EnableEvents = True
         End With
         Exit For
     End If
     Next
End If
End Sub
[/vba]
К сообщению приложен файл: -1_.xls (64.5 Kb)


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеВообще то вы правильно делали добавляя список ячеек..
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim a
If Not Intersect(Target, Columns("P:P")) Is Nothing Or _
Not Intersect(Target, Columns("W:W")) Is Nothing Then
     a = Array("$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26", _
               "$W$11", "$W$13", "$W$15", "$W$17", "$W$19", "$W$21", "$W$23", "$W$25", "$W$26")
     For i = 0 To UBound(a)
     If Target.Address Like "*" & a(i) & "" Then
         With Target
                 Application.EnableEvents = False
                 .Offset(, -2) = .Offset(, -2) + .Value
                 .Offset(, -4) = .Offset(, -4) + .Value
                 Application.EnableEvents = True
         End With
         Exit For
     End If
     Next
End If
End Sub
[/vba]

Автор - Leanna
Дата добавления - 08.03.2015 в 14:51
light26 Дата: Воскресенье, 08.03.2015, 16:08 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1354
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Вообще то вы правильно делали добавляя список ячеек.
Спасибо за решение. Просто, как все гениальное :)
Я не допетрил, что
[vba]
Код
If Target.Address Like "*" & a(i) & "" Then
           With Target
                   Application.EnableEvents = False
                   .Offset(, -2) = .Offset(, -2) + .Value
                   .Offset(, -4) = .Offset(, -4) + .Value
[/vba]будет одинаково работать и для диапазона "$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26" и для диапазона "$W$11", "$W$13", "$W$15", "$W$17", "$W$19", "$W$21", "$W$23", "$W$25", "$W$26. Хотя, как я вижу, этого было бы недостаточно, т.к. в коде появилась строка
[vba]
Код
If Not Intersect(Target, Columns("P:P")) Is Nothing Or _
Not Intersect(Target, Columns("W:W")) Is Nothing Then
[/vba]роль которой я не знаю. Вижу, что цель команды - столбцы P и W, но что конкретно?.. Если попытаться переводить, то получается что-то вроде: "Если не пересекаются (цель - столбец Р) ничего или не пересекается (цель - столбец W) ничего, то..." С чем не пересекаются?


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 08.03.2015, 16:09
 
Ответить
Сообщение
Вообще то вы правильно делали добавляя список ячеек.
Спасибо за решение. Просто, как все гениальное :)
Я не допетрил, что
[vba]
Код
If Target.Address Like "*" & a(i) & "" Then
           With Target
                   Application.EnableEvents = False
                   .Offset(, -2) = .Offset(, -2) + .Value
                   .Offset(, -4) = .Offset(, -4) + .Value
[/vba]будет одинаково работать и для диапазона "$P$11", "$P$13", "$P$15", "$P$17", "$P$19", "$P$21", "$P$23", "$P$25", "$P$26" и для диапазона "$W$11", "$W$13", "$W$15", "$W$17", "$W$19", "$W$21", "$W$23", "$W$25", "$W$26. Хотя, как я вижу, этого было бы недостаточно, т.к. в коде появилась строка
[vba]
Код
If Not Intersect(Target, Columns("P:P")) Is Nothing Or _
Not Intersect(Target, Columns("W:W")) Is Nothing Then
[/vba]роль которой я не знаю. Вижу, что цель команды - столбцы P и W, но что конкретно?.. Если попытаться переводить, то получается что-то вроде: "Если не пересекаются (цель - столбец Р) ничего или не пересекается (цель - столбец W) ничего, то..." С чем не пересекаются?

Автор - light26
Дата добавления - 08.03.2015 в 16:08
Leanna Дата: Воскресенье, 08.03.2015, 16:21 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Эта строчка не обязательна. Но не будет лишней. Было что при каждом изменении в любой ячейке проходит цикл на проверку а не является ли нужная ячейка ячейкой из списка. Просто если столбцы не P или W (столбцы изменяемой ячейки) то не обязательно по этому списку проходиться. Соответственно если изменяемая ячейка пересекается со столбцом p или w то продолжаем обработку, если нет, то пропускаем.

С чем не пересекаются? - не пересекается с изменяемой ячейкой (это Target)

Ещё мне кажется что Like "*" & a(i) & "" здесь лишнее. достаточно просто Like a(i) или = a(i)


Лучше день потерять, потом за пять минут долететь!

Сообщение отредактировал Leanna - Воскресенье, 08.03.2015, 16:24
 
Ответить
СообщениеЭта строчка не обязательна. Но не будет лишней. Было что при каждом изменении в любой ячейке проходит цикл на проверку а не является ли нужная ячейка ячейкой из списка. Просто если столбцы не P или W (столбцы изменяемой ячейки) то не обязательно по этому списку проходиться. Соответственно если изменяемая ячейка пересекается со столбцом p или w то продолжаем обработку, если нет, то пропускаем.

С чем не пересекаются? - не пересекается с изменяемой ячейкой (это Target)

Ещё мне кажется что Like "*" & a(i) & "" здесь лишнее. достаточно просто Like a(i) или = a(i)

Автор - Leanna
Дата добавления - 08.03.2015 в 16:21
light26 Дата: Воскресенье, 08.03.2015, 19:53 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1354
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Leanna, спасибо за разъяснения.
Что касается Like "*" & a(i) & "", возможно, Вы правы. Как я писал ранее, мои познания VBA - это макрорекордер и метод "научного тыка" :)


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 08.03.2015, 19:56
 
Ответить
СообщениеLeanna, спасибо за разъяснения.
Что касается Like "*" & a(i) & "", возможно, Вы правы. Как я писал ранее, мои познания VBA - это макрорекордер и метод "научного тыка" :)

Автор - light26
Дата добавления - 08.03.2015 в 19:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!