Excel макрос для суммирования таблиц
Доброго времени суток.)
У меня проблема следующая. Необходимо суммировать данные 14 листов, расположенные в 14 книгах в диапазоне C14:N25/ Суммировать нужно часть книг, результат должен появиться в открытой книге "Итоги", открывать книги при выполнении операции в скрытом режиме
Нашел такой Макрос, но не могу понять что нужно изменить, чтобы он работал по суммированию только определенных книг, и чтобы вносил результат в открытую книгу "Итоги"
Dim Folder As String
Dim wb As String
Dim objWb As Workbook
Dim workWb As Workbook
Dim i As Integer
Dim R, C
Dim Q As Worksheet
Dim REZ()
Dim T()
Application.ScreenUpdating = False
Range("C16:N25").Select
Selection.ClearContents
Range("C16:N25").Select
Set workWb = ActiveWorkbook
REZ = workWb.ActiveSheet.Range(Cells(7, 1), Cells(29, 39)).Value
wb = Dir(workWb.Path & "\*.xlsx")
While Len(wb) > 0 And wb <> Итоги.xls"
wb = workWb.Path & "\" & wb
Set objWb = Workbooks.Open(wb)
For Each Q In objWb.Sheets
Q.Select
m = Q.Range(Cells(7, 1), Cells(29, 39)).Value
For R = 4 To 23
For C = 2 To 39
REZ(R, C) = REZ(R, C) + m(R, C)
Next C
Next R
Next
objWb.Close False
wb = Dir Wend
workWb.ActiveSheet.Range(Cells(7, 1), Cells(29, 39)).Value = REZ
Application.ScreenUpdating = True
MsgBox "Ok", 64, ""
End Sub
Но что то не хочет он работать, кроме того
Без примера могу ошибиться,макрос суммирует данные первых листов книг.Я засомневался,что есть 14 книг ,каждая с 14 листамиПоследний раз редактировалось doober; 26.10.2013 в 00:13 . Если имена всех листов книг, из которых требуется получить данные, известны (или вообще одинаковые), то все можно сделать и вовсе не открывая файлов-источников.
Например, пусть листы с данными называются "Лист1" и требуемые файлы находятся в той же папке, где файл с этим макросом.
Если нужно, добавьте проверки на предмет существования искомых файлов и листов. Последний раз редактировалось SAS888; 27.10.2013 в 09:54 .
это потому, что названия листов и книг здесь вымышленны:
Sheets("Итоги")
"Вася.xls",
"Петя.xls",
"Коля.xls"
рассматривайте это не как готовый код, а как заготовку. вооружитесь напильником и допиливайте пока не начнет работать или пока волдыри на клавиатуре не появятся.
41001804815208 - ЮMoney бывш.Яндекс-кошелек благодарности за удачные советы и решения можно отправлять прямо сюда)Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете Подразумевается, что в открытой книге, содержащей этот код, имеется лист с именем "Итоги", на который и будут помещаться данные. Измените в коде имя листа на требуемое.
Можно поступить так же, как предлагает doober, т. е. присвоить Но, в этом случае, макрос потребуется запускать только в тот момент, когда активным является лист, на который требуется собрать данные.
Итак, у меня есть папка "Temp", в которой книга "Аналитика", содержащая лист "ИТОГИ" и диапазон B3:N25 в который должны подставиться результаты суммирования других книг. Для суммирования берутся листы "Итоги" из книг "Вася.xlsx", "Петя.xlsx" (диапазон B3:N25 ), в итоге у меня заработал такой скрипт.
Private Sub CommandButton1_Click()
Dim x As Range, ws As Worksheet, p As String
Application.ScreenUpdating = False: Application.DisplayAlerts = False
Set ws = Sheets("ИТОГИ"): Set x = ws.[B3:N25]: x.ClearContents
Sheets.Add.Name = "Temp": p = ThisWorkbook.Path & "\"
For Each f In Array("Вася.xlsx", "Петя.xlsx") 'нужные файлы
With Range(x.Address)
.ClearContents
.Formula = "='" & p & "[" & f & "]Итоги'!" & x.Address
.Copy
x.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
End With
Next
ActiveSheet.Delete: x.Value = x.Value: Application.CutCopyMode = False
End Sub
При суммировании появляются очень странные цифры, похоже что формула содержит ошибку, вот только какую неясно окончательно. Но хоть убей не считает она.
Имеем таблицу по продажам, например, следующего вида:
Задача: просуммировать все заказы, которые менеджер Григорьев реализовал для магазина "Копейка".
Способ 1. Функция СУММЕСЛИ, когда одно условие
Если бы в нашей задаче было только одно условие (все заказы Петрова или все заказы в "Копейку", например), то задача решалась бы достаточно легко при помощи встроенной функции Excel СУММЕСЛИ (SUMIF) из категории Математические (Math&Trig) . Выделяем пустую ячейку для результата, жмем кнопку fx в строке формул, находим функцию СУММЕСЛИ в списке:
Жмем ОК и вводим ее аргументы:
- Диапазон - это те ячейки, которые мы проверяем на выполнение Критерия. В нашем случае - это диапазон с фамилиями менеджеров продаж.
- Критерий - это то, что мы ищем в предыдущем указанном диапазоне. Разрешается использовать символы * (звездочка) и ? (вопросительный знак) как маски или символы подстановки. Звездочка подменяет собой любое количество любых символов, вопросительный знак - один любой символ. Так, например, чтобы найти все продажи у менеджеров с фамилией из пяти букв, можно использовать критерий . . А чтобы найти все продажи менеджеров, у которых фамилия начинается на букву "П", а заканчивается на "В" - критерий П*В. Строчные и прописные буквы не различаются.
- Диапазон_суммирования - это те ячейки, значения которых мы хотим сложить, т.е. нашем случае - стоимости заказов.
Способ 2. Функция СУММЕСЛИМН, когда условий много
Если условий больше одного (например, нужно найти сумму всех заказов Григорьева для "Копейки"), то функция СУММЕСЛИ (SUMIF) не поможет, т.к. не умеет проверять больше одного критерия. Поэтому начиная с версии Excel 2007 в набор функций была добавлена функция СУММЕСЛИМН (SUMIFS) - в ней количество условий проверки увеличено аж до 127! Функция находится в той же категории Математические и работает похожим образом, но имеет больше аргументов:
При помощи полосы прокрутки в правой части окна можно задать и третью пару (Диапазон_условия3-Условие3), и четвертую, и т.д. - при необходимости.
Если же у вас пока еще старая версия Excel 2003, но задачу с несколькими условиями решить нужно, то придется извращаться - см. следующие способы.
Способ 3. Столбец-индикатор
Добавим к нашей таблице еще один столбец, который будет служить своеобразным индикатором: если заказ был в "Копейку" и от Григорьева, то в ячейке этого столбца будет значение 1, иначе - 0. Формула, которую надо ввести в этот столбец очень простая:
=(A2="Копейка")*(B2="Григорьев")
Логические равенства в скобках дают значения ИСТИНА или ЛОЖЬ, что для Excel равносильно 1 и 0. Таким образом, поскольку мы перемножаем эти выражения, единица в конечном счете получится только если оба условия выполняются. Теперь стоимости продаж осталось умножить на значения получившегося столбца и просуммировать отобранное в зеленой ячейке:
Способ 4. Волшебная формула массива
Если вы раньше не сталкивались с такой замечательной возможностью Excel как формулы массива, то советую почитать предварительно про них много хорошего здесь. Ну, а в нашем случае задача решается одной формулой:
=СУММ((A2:A26="Копейка")*(B2:B26="Григорьев")*D2:D26)
После ввода этой формулы необходимо нажать не Enter , как обычно, а Ctrl + Shift + Enter - тогда Excel воспримет ее как формулу массива и сам добавит фигурные скобки. Вводить скобки с клавиатуры не надо. Легко сообразить, что этот способ (как и предыдущий) легко масштабируется на три, четыре и т.д. условий без каких-либо ограничений.
Способ 4. Функция баз данных БДСУММ
В категории Базы данных (Database) можно найти функцию БДСУММ (DSUM) , которая тоже способна решить нашу задачу. Нюанс состоит в том, что для работы этой функции необходимо создать на листе специальный диапазон критериев - ячейки, содержащие условия отбора - и указать затем этот диапазон функции как аргумент:
Добрый день. Подскажите, как сделать макрос который сможет суммировать данные с разных книг (разного названия), но таблицы одинаковые. Суть проблемы такова, присылают 21 отчет, и мне нужно суммировать все в один. Заранее благодарен. Книгу с таблицами прикреплю.
[p.s.]
В том то и дело, книги будут называться по разному, листы в каждой книге называются одинаково, размер ячеек и расположение одинаково. А один файл, с точно такой же таблицей просто будет называться "общий отчет" или в том же духе. Нужно, что бы все данные из разных книг, лист "табличная форма", суммировались в книге "общий" в листе "табличная форма"
Добрый день. Подскажите, как сделать макрос который сможет суммировать данные с разных книг (разного названия), но таблицы одинаковые. Суть проблемы такова, присылают 21 отчет, и мне нужно суммировать все в один. Заранее благодарен. Книгу с таблицами прикреплю.
[p.s.]
В том то и дело, книги будут называться по разному, листы в каждой книге называются одинаково, размер ячеек и расположение одинаково. А один файл, с точно такой же таблицей просто будет называться "общий отчет" или в том же духе. Нужно, что бы все данные из разных книг, лист "табличная форма", суммировались в книге "общий" в листе "табличная форма" GSeReGa
Из Вашего примера - не понятно какие ячейки нужно суммировать - выделите эти ячейки каким - то одним цветом
Тогда все будет намного проще.
И еще как будут называться файлы всегда одинаково, или как макросу понять куда "тыкаться"?
- вложите парочку файлов для проверки.
Из Вашего примера - не понятно какие ячейки нужно суммировать - выделите эти ячейки каким - то одним цветом
Тогда все будет намного проще.
И еще как будут называться файлы всегда одинаково, или как макросу понять куда "тыкаться"?
- вложите парочку файлов для проверки. SLAVICK
Переносите все файлы в одну папку, затем циклом проходите по всем книгам в папке
и переносите нужные данные в сводный файл
Переносите все файлы в одну папку, затем циклом проходите по всем книгам в папке
и переносите нужные данные в сводный файл Kuzmich
Смотрите архив - там создал папку с файлами - туда нужно кидать файлы для обработки.
разархивируйте архив в любую папку.
В общем файле - кнопка нажимайте и ждите
С всех файлов данные просуммируются в общий файл
Смотрите архив - там создал папку с файлами - туда нужно кидать файлы для обработки.
разархивируйте архив в любую папку.
В общем файле - кнопка нажимайте и ждите
С всех файлов данные просуммируются в общий файл SLAVICK
Иногда все проще чем кажется с первого взгляда.
Читайте также: