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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос суммирования... - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос суммирования... (Макросы/Sub)
Макрос суммирования...
Парк Дата: Воскресенье, 01.01.2017, 21:28 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем привет, нужна помощь.

Помогите с макросом...

Вкратце: для заказа 1 просуммировано поле Занаряжено (для всех позиций данного заказа) и вычтена сумма по полю Отгружено (для всех позиций данного заказа) .Ответ 412 занесен только в одну ячейку (позицию) для данного заказа, в остальные 0) и т.д. для других заказов. Заказ может иметь начальной любую позицию, (т.е. 10,20,30 ... не обязательно начинаться с 10.)

Образец с формулой массива во вложении. Помогите, пжл с макросом. Данных очень много, массивы будут тормозить.... Спасибо.
К сообщению приложен файл: 9496489.xlsx (9.6 Kb)


Сообщение отредактировал Парк - Воскресенье, 01.01.2017, 21:37
 
Ответить
СообщениеВсем привет, нужна помощь.

Помогите с макросом...

Вкратце: для заказа 1 просуммировано поле Занаряжено (для всех позиций данного заказа) и вычтена сумма по полю Отгружено (для всех позиций данного заказа) .Ответ 412 занесен только в одну ячейку (позицию) для данного заказа, в остальные 0) и т.д. для других заказов. Заказ может иметь начальной любую позицию, (т.е. 10,20,30 ... не обязательно начинаться с 10.)

Образец с формулой массива во вложении. Помогите, пжл с макросом. Данных очень много, массивы будут тормозить.... Спасибо.

Автор - Парк
Дата добавления - 01.01.2017 в 21:28
krosav4ig Дата: Понедельник, 02.01.2017, 04:09 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
как-то так можно
[vba]
Код
Option Base 1
Sub Сумма()
    Dim arr As Variant, i&, s$, d&
    With [B5].CurrentRegion
        With Intersect(.Offset(1), .Cells)
            arr = .Value
            With CreateObject("Scripting.Dictionary")
                For i = 1 To UBound(arr)
                    s = CStr(arr(i, 1))
                    d = arr(i, 3) - arr(i, 4)
                    arr(i, 5) = 0
                    If .Exists(s) Then
                        arr(.Item(s), 5) = arr(.Item(s), 5) + d
                        arr(i, 5) = 0
                    Else
                        arr(i, 5) = d
                        .Item(s) = i
                    End If
                Next i
            End With
            .Value = arr
        End With
    End With
End Sub
[/vba]
а еще можно немассивную формулу написать
для F6 формула
Код
=ЕСЛИ(СЧЁТЕСЛИ($B$5:B5;B6);"";СУММЕСЛИ($B$6:$B$14;B6;$D$6:$D$14)-СУММЕСЛИ($B$6:$B$14;B6;$E$6:$E$14))


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениекак-то так можно
[vba]
Код
Option Base 1
Sub Сумма()
    Dim arr As Variant, i&, s$, d&
    With [B5].CurrentRegion
        With Intersect(.Offset(1), .Cells)
            arr = .Value
            With CreateObject("Scripting.Dictionary")
                For i = 1 To UBound(arr)
                    s = CStr(arr(i, 1))
                    d = arr(i, 3) - arr(i, 4)
                    arr(i, 5) = 0
                    If .Exists(s) Then
                        arr(.Item(s), 5) = arr(.Item(s), 5) + d
                        arr(i, 5) = 0
                    Else
                        arr(i, 5) = d
                        .Item(s) = i
                    End If
                Next i
            End With
            .Value = arr
        End With
    End With
End Sub
[/vba]
а еще можно немассивную формулу написать
для F6 формула
Код
=ЕСЛИ(СЧЁТЕСЛИ($B$5:B5;B6);"";СУММЕСЛИ($B$6:$B$14;B6;$D$6:$D$14)-СУММЕСЛИ($B$6:$B$14;B6;$E$6:$E$14))

Автор - krosav4ig
Дата добавления - 02.01.2017 в 04:09
Парк Дата: Пятница, 06.01.2017, 18:01 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
krosav4ig, Спасибо большое.
 
Ответить
Сообщениеkrosav4ig, Спасибо большое.

Автор - Парк
Дата добавления - 06.01.2017 в 18:01
Парк Дата: Пятница, 06.01.2017, 22:26 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
krosav4ig, а можно ли данный макрос запускать автоматически при изменении(дополнении новой строки, изменении старой, вставке копированием и т.д.) любой ячейки из столбца, например, Е, данного листа ?
 
Ответить
Сообщениеkrosav4ig, а можно ли данный макрос запускать автоматически при изменении(дополнении новой строки, изменении старой, вставке копированием и т.д.) любой ячейки из столбца, например, Е, данного листа ?

Автор - Парк
Дата добавления - 06.01.2017 в 22:26
Wasilich Дата: Суббота, 07.01.2017, 09:25 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
запускать автоматически ... из столбца, например, Е, данного листа
Если уже установлен код Сумма(), от krosav4ig, то этот код в модуль листа.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count > 1 Then Exit Sub
   PS = Columns("B:E").Find("*", [E1], SearchDirection:=xlPrevious).Row + 1
   If Not Application.Intersect(Range("E6:E" & PS), Target) Is Nothing Then
   Сумма
   End If
End Sub
[/vba]
А еще, прошу проверить мой код на большом к-ве данных, На сколько он медленнее кода от krosav4igа. Но до установки предыдущего Private Sub Worksheet_Change, ибо он затормозит оба, и мой и от krosav4igа.
[vba]
Код
Sub Сум()
  Dim i&, sm&, ns&
  sm = 0: ns = 6
  For i = 6 To Columns("B:E").Find("*", [E1], SearchDirection:=xlPrevious).Row
      If Cells(i, "B") = Cells(i + 1, "B") Then
         sm = sm + Cells(i, "D") - Cells(i, "E")
      Else
         sm = sm + Cells(i, "D") - Cells(i, "E")
         Cells(ns, "F") = sm
         ns = i + 1: sm = 0
      End If
  Next
End Sub
[/vba]
К сообщению приложен файл: 5853767.xls (39.0 Kb)


Сообщение отредактировал Wasilich - Суббота, 07.01.2017, 09:43
 
Ответить
Сообщение
запускать автоматически ... из столбца, например, Е, данного листа
Если уже установлен код Сумма(), от krosav4ig, то этот код в модуль листа.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count > 1 Then Exit Sub
   PS = Columns("B:E").Find("*", [E1], SearchDirection:=xlPrevious).Row + 1
   If Not Application.Intersect(Range("E6:E" & PS), Target) Is Nothing Then
   Сумма
   End If
End Sub
[/vba]
А еще, прошу проверить мой код на большом к-ве данных, На сколько он медленнее кода от krosav4igа. Но до установки предыдущего Private Sub Worksheet_Change, ибо он затормозит оба, и мой и от krosav4igа.
[vba]
Код
Sub Сум()
  Dim i&, sm&, ns&
  sm = 0: ns = 6
  For i = 6 To Columns("B:E").Find("*", [E1], SearchDirection:=xlPrevious).Row
      If Cells(i, "B") = Cells(i + 1, "B") Then
         sm = sm + Cells(i, "D") - Cells(i, "E")
      Else
         sm = sm + Cells(i, "D") - Cells(i, "E")
         Cells(ns, "F") = sm
         ns = i + 1: sm = 0
      End If
  Next
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 07.01.2017 в 09:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос суммирования... (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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