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

Вход

Регистрация

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

 

= Мир MS Excel/Промежуточные итоги в таблице - Мир MS Excel

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

Здравствуйте уважаемые форумчане. Помогите пожалуйста написать макрос, подводящий промежуточные итоги в таблице.
Есть заполненная таблица (файл прилагается). В ней уже подведены итоги по группам. Необходимо подсчитать промежуточный итог по позициям, в которых заполнено поле признак и в которых данное поле не заполнено. В прилагаемом файле на листе 1 имеющаяся таблица, на листе 2 - как должно быть.
К сообщению приложен файл: 8358190.xls (26.5 Kb)
 
Ответить
СообщениеЗдравствуйте уважаемые форумчане. Помогите пожалуйста написать макрос, подводящий промежуточные итоги в таблице.
Есть заполненная таблица (файл прилагается). В ней уже подведены итоги по группам. Необходимо подсчитать промежуточный итог по позициям, в которых заполнено поле признак и в которых данное поле не заполнено. В прилагаемом файле на листе 1 имеющаяся таблица, на листе 2 - как должно быть.

Автор - Альбина
Дата добавления - 18.11.2013 в 10:01
ABC Дата: Понедельник, 18.11.2013, 11:42 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, через сводную не пробовали?
К сообщению приложен файл: 7320715.xls (31.0 Kb)


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет
 
Ответить
СообщениеЗдравствуйте, через сводную не пробовали?

Автор - ABC
Дата добавления - 18.11.2013 в 11:42
nilem Дата: Понедельник, 18.11.2013, 11:56 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
или, например, "Данные" - "Пром. итог". Не подходит?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеили, например, "Данные" - "Пром. итог". Не подходит?

Автор - nilem
Дата добавления - 18.11.2013 в 11:56
Альбина Дата: Понедельник, 18.11.2013, 12:16 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 7 ±
Замечаний: 0% ±

Нужен макрос, данные в таблицу загружаются программно, большой объем данных, хотелось бы, чтобы в момент выгрузки сработал VBA и бухгалтер видел промежуточный итог, не производя дополнительных действий.
Понимаю, что возможно включить запись макроса и сделать операцию, подсказанную выше "Данные" - "Пром. итог". Тогда подскажите, какие столбцы нужно при этом выделить, потому что у меня подсчитывается итог по группе а не по признаку.
 
Ответить
СообщениеНужен макрос, данные в таблицу загружаются программно, большой объем данных, хотелось бы, чтобы в момент выгрузки сработал VBA и бухгалтер видел промежуточный итог, не производя дополнительных действий.
Понимаю, что возможно включить запись макроса и сделать операцию, подсказанную выше "Данные" - "Пром. итог". Тогда подскажите, какие столбцы нужно при этом выделить, потому что у меня подсчитывается итог по группе а не по признаку.

Автор - Альбина
Дата добавления - 18.11.2013 в 12:16
AndreTM Дата: Понедельник, 18.11.2013, 12:25 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Можно сделать что-то типа такого:
[vba]
Код
Sub test()

     i = 2
     cPriz = "~"
      
     Do
         If Cells(i, 1) & Cells(i, 2) <> cPriz And cPriz <> "~" Then
             Rows(i).Insert
             Cells(i, 1) = "Итого с признаком '" & Cells(i - 1, 2) & "':"
             Cells(i, 1).Resize(, 3).Interior.ColorIndex = 40
             Cells(i, 3) = nSum
             Cells(i, 1).Resize(, 2).Merge
             cPriz = "~"
         Else
             If cPriz = "~" Then
                 nSum = 0
                 If Left(Cells(i, 1), 5) <> "Итого" Then
                     cPriz = Cells(i, 1) & Cells(i, 2)
                 End If
             End If
             If Cells(i, 1) & Cells(i, 2) = cPriz Then
                 nSum = nSum + Cells(i, 3)
             End If
         End If
         i = i + 1
     Loop Until Cells(i, 1) = ""
      
End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеМожно сделать что-то типа такого:
[vba]
Код
Sub test()

     i = 2
     cPriz = "~"
      
     Do
         If Cells(i, 1) & Cells(i, 2) <> cPriz And cPriz <> "~" Then
             Rows(i).Insert
             Cells(i, 1) = "Итого с признаком '" & Cells(i - 1, 2) & "':"
             Cells(i, 1).Resize(, 3).Interior.ColorIndex = 40
             Cells(i, 3) = nSum
             Cells(i, 1).Resize(, 2).Merge
             cPriz = "~"
         Else
             If cPriz = "~" Then
                 nSum = 0
                 If Left(Cells(i, 1), 5) <> "Итого" Then
                     cPriz = Cells(i, 1) & Cells(i, 2)
                 End If
             End If
             If Cells(i, 1) & Cells(i, 2) = cPriz Then
                 nSum = nSum + Cells(i, 3)
             End If
         End If
         i = i + 1
     Loop Until Cells(i, 1) = ""
      
End Sub
[/vba]

Автор - AndreTM
Дата добавления - 18.11.2013 в 12:25
ABC Дата: Понедельник, 18.11.2013, 12:26 | Сообщение № 6
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
так подойдет?
[vba]
Код
Sub Test()
     Dim arr(), arr2(), i&, y&, it, arr1
     Application.ScreenUpdating = False
     With Sheets(1)
         arr = .Range("A2:C" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
     End With
     With CreateObject("Scripting.Dictionary")
         For i = LBound(arr, 1) To UBound(arr, 1)
             If arr(i, 1) <> "Итого по группе 1:" Then
                 it = arr(i, 1) & "@@" & arr(i, 2)
                 .Item(it) = .Item(it) + arr(i, 3)
             End If
         Next i
          
         ReDim arr2(1 To .Count, 1 To 3)
         y = 1
         For Each it In .Keys
             arr1 = Split(it, "@@")
             arr2(y, 1) = arr1(0)
             arr2(y, 2) = arr1(1)
             arr2(y, 3) = .Item(it)
             y = y + 1
         Next it
     End With
     With Sheets(3)
         .Cells.Clear
         .[a1].Resize(y - 1, 3).Value = arr2
         .Activate
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет
 
Ответить
Сообщениетак подойдет?
[vba]
Код
Sub Test()
     Dim arr(), arr2(), i&, y&, it, arr1
     Application.ScreenUpdating = False
     With Sheets(1)
         arr = .Range("A2:C" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
     End With
     With CreateObject("Scripting.Dictionary")
         For i = LBound(arr, 1) To UBound(arr, 1)
             If arr(i, 1) <> "Итого по группе 1:" Then
                 it = arr(i, 1) & "@@" & arr(i, 2)
                 .Item(it) = .Item(it) + arr(i, 3)
             End If
         Next i
          
         ReDim arr2(1 To .Count, 1 To 3)
         y = 1
         For Each it In .Keys
             arr1 = Split(it, "@@")
             arr2(y, 1) = arr1(0)
             arr2(y, 2) = arr1(1)
             arr2(y, 3) = .Item(it)
             y = y + 1
         Next it
     End With
     With Sheets(3)
         .Cells.Clear
         .[a1].Resize(y - 1, 3).Value = arr2
         .Activate
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - ABC
Дата добавления - 18.11.2013 в 12:26
Альбина Дата: Понедельник, 18.11.2013, 13:07 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 7 ±
Замечаний: 0% ±

Большое спасибо за ответы!
AndreTM. Ваш макрос это именно то, что нужно! Только немного некорректно во второй группе прошел поиск признака 'X'. Сразу после первой позиции группы 2 с признаком 'X' подвелся итог.
В прикрепленном файле результат выполнения макроса.
К сообщению приложен файл: 9327071.xls (43.0 Kb)
 
Ответить
СообщениеБольшое спасибо за ответы!
AndreTM. Ваш макрос это именно то, что нужно! Только немного некорректно во второй группе прошел поиск признака 'X'. Сразу после первой позиции группы 2 с признаком 'X' подвелся итог.
В прикрепленном файле результат выполнения макроса.

Автор - Альбина
Дата добавления - 18.11.2013 в 13:07
Pelena Дата: Понедельник, 18.11.2013, 13:09 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
немного некорректно во второй группе прошел поиск признака 'X'

У Вас данные некорректны: буква Х то русская, то латинская


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
немного некорректно во второй группе прошел поиск признака 'X'

У Вас данные некорректны: буква Х то русская, то латинская

Автор - Pelena
Дата добавления - 18.11.2013 в 13:09
Альбина Дата: Понедельник, 18.11.2013, 13:17 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 7 ±
Замечаний: 0% ±

Да, вы правы, буквы у меня оказались разные. Все работает так, как мне было нужно!
Огромное всем спасибо за помощь!
 
Ответить
СообщениеДа, вы правы, буквы у меня оказались разные. Все работает так, как мне было нужно!
Огромное всем спасибо за помощь!

Автор - Альбина
Дата добавления - 18.11.2013 в 13:17
Альбина Дата: Понедельник, 18.11.2013, 15:05 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 7 ±
Замечаний: 0% ±

К сожалению не рассчитала свои силы, слишком упростила документ для примера.
Если можно было бы вернуться к этой теме, помогите пожалуйста.
Исходный файл осложнен тем, что в столбце "Группа" включено объединение ячеек и каждая новая группа отделяется строкой с именем этой группы. Можно ли обойти эти сложности?
К сообщению приложен файл: 9031252.xls (45.5 Kb)
 
Ответить
СообщениеК сожалению не рассчитала свои силы, слишком упростила документ для примера.
Если можно было бы вернуться к этой теме, помогите пожалуйста.
Исходный файл осложнен тем, что в столбце "Группа" включено объединение ячеек и каждая новая группа отделяется строкой с именем этой группы. Можно ли обойти эти сложности?

Автор - Альбина
Дата добавления - 18.11.2013 в 15:05
AndreTM Дата: Понедельник, 18.11.2013, 16:34 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Альбина, и что? Мы теперь будем на каждый чих переписывать код?
Вообще-то, вам выше правильно советовали сразу получить нужный вид сводной, а не напрягать уже готовые таблицы дополнительным функционалом. С другой стороны, вы в макросе разбирались? Или вам (как, между прочим, многим здесь) - "некогда, поскольку начальство напрягает и всё надо ещё вчера"? Так поверьте, многих из нас тоже напрягают - и ничего, успеваем и работать, и новые знания получать, и делиться ими.
Нет, конечно, макрос-то не влом переписать - но ведь там минимум исправлений требуется. Вот только помощь наша уходит в песок... и вы рискуете с таким подходом очень быстро исчерпать запас здешних альтруистов :D
[vba]
Код
Sub test()

     Application.ScreenUpdating = False
      
     i = 17
     cPriz = "~"
      
     Do
         If Cells(i, 2) <> cPriz And cPriz <> "~" Then
             Rows(i).Insert
             Cells(i, 2) = "Итого с признаком '" & Cells(i - 1, 2) & "':"
             Cells(i, 2).Resize(, 4).Interior.ColorIndex = 36
             Cells(i, 3) = nSum
             'Cells(i, 1).Resize(, 2).Merge
             cPriz = "~"
         Else
             If cPriz = "~" Then
                 nSum = 0
                 If Cells(i, 2) = "X" Or Cells(i, 2) = "" Then
                     cPriz = Cells(i, 2)
                 End If
             End If
             If Cells(i, 2) = cPriz Then
                 nSum = nSum + Cells(i, 3)
             End If
         End If
         i = i + 1
     Loop Until Left(Cells(i, 1), 5) = "Всего"
      
     Application.ScreenUpdating = True
      
End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеАльбина, и что? Мы теперь будем на каждый чих переписывать код?
Вообще-то, вам выше правильно советовали сразу получить нужный вид сводной, а не напрягать уже готовые таблицы дополнительным функционалом. С другой стороны, вы в макросе разбирались? Или вам (как, между прочим, многим здесь) - "некогда, поскольку начальство напрягает и всё надо ещё вчера"? Так поверьте, многих из нас тоже напрягают - и ничего, успеваем и работать, и новые знания получать, и делиться ими.
Нет, конечно, макрос-то не влом переписать - но ведь там минимум исправлений требуется. Вот только помощь наша уходит в песок... и вы рискуете с таким подходом очень быстро исчерпать запас здешних альтруистов :D
[vba]
Код
Sub test()

     Application.ScreenUpdating = False
      
     i = 17
     cPriz = "~"
      
     Do
         If Cells(i, 2) <> cPriz And cPriz <> "~" Then
             Rows(i).Insert
             Cells(i, 2) = "Итого с признаком '" & Cells(i - 1, 2) & "':"
             Cells(i, 2).Resize(, 4).Interior.ColorIndex = 36
             Cells(i, 3) = nSum
             'Cells(i, 1).Resize(, 2).Merge
             cPriz = "~"
         Else
             If cPriz = "~" Then
                 nSum = 0
                 If Cells(i, 2) = "X" Or Cells(i, 2) = "" Then
                     cPriz = Cells(i, 2)
                 End If
             End If
             If Cells(i, 2) = cPriz Then
                 nSum = nSum + Cells(i, 3)
             End If
         End If
         i = i + 1
     Loop Until Left(Cells(i, 1), 5) = "Всего"
      
     Application.ScreenUpdating = True
      
End Sub
[/vba]

Автор - AndreTM
Дата добавления - 18.11.2013 в 16:34
Альбина Дата: Понедельник, 18.11.2013, 16:53 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 7 ±
Замечаний: 0% ±

Очень извиняюсь, если я вас обидела. Естественно я разбиралась с макросом. Я потому и выставляла изначально упрощенный вариант, чтобы получить направление, в котором можно разобраться с данной задачей. Я не программист, то, что i = 17, т. к. данные начинаются с 17 строки я поняла, ну и то, что номер столбца может варьироваться, а с объединенными ячейками не разобралась.
Спасибо, что потратили время и помогли мне.
 
Ответить
СообщениеОчень извиняюсь, если я вас обидела. Естественно я разбиралась с макросом. Я потому и выставляла изначально упрощенный вариант, чтобы получить направление, в котором можно разобраться с данной задачей. Я не программист, то, что i = 17, т. к. данные начинаются с 17 строки я поняла, ну и то, что номер столбца может варьироваться, а с объединенными ячейками не разобралась.
Спасибо, что потратили время и помогли мне.

Автор - Альбина
Дата добавления - 18.11.2013 в 16:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Промежуточные итоги в таблице (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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