|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.10.2013, 15:59 | #1 |
Пользователь
Регистрация: 08.11.2010
Сообщений: 33
|
Макрос суммирования книг
Доброго времени суток.)
У меня проблема следующая. Необходимо суммировать данные 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 Но что то не хочет он работать, кроме того |
26.10.2013, 01:04 | #2 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Без примера могу ошибиться,макрос суммирует данные первых листов книг.Я засомневался,что есть 14 книг ,каждая с 14 листами
Код:
Анализ,обработка данных Недорого
Последний раз редактировалось doober; 26.10.2013 в 01:13. |
27.10.2013, 07:33 | #3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Если имена всех листов книг, из которых требуется получить данные, известны (или вообще одинаковые), то все можно сделать и вовсе не открывая файлов-источников.
Например, пусть листы с данными называются "Лист1" и требуемые файлы находятся в той же папке, где файл с этим макросом. Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 27.10.2013 в 10:54. |
28.10.2013, 15:18 | #4 |
Пользователь
Регистрация: 08.11.2010
Сообщений: 33
|
Спасибо большое, только почему то не срабатывает последний скрипт, подсвечивает наименование в строке Set ws = Sheets("Итоги") подсвечивает "Итоги". Может быть это потому что путь где лежат файлы слишком длинный \\nwdata.nw.mmm.ru\DavWWWRoot\sites \ur_dep\DocLib\юристы\
|
28.10.2013, 17:51 | #5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
это потому, что названия листов и книг здесь вымышленны:
Sheets("Итоги") "Вася.xls", "Петя.xls", "Коля.xls" рассматривайте это не как готовый код, а как заготовку. вооружитесь напильником и допиливайте пока не начнет работать или пока волдыри на клавиатуре не появятся.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
29.10.2013, 05:49 | #6 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Можно поступить так же, как предлагает doober, т. е. присвоить Код:
Чем шире угол зрения, тем он тупее.
|
|
31.10.2013, 12:27 | #7 |
Пользователь
Регистрация: 08.11.2010
Сообщений: 33
|
Итак, у меня есть папка "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 При суммировании появляются очень странные цифры, похоже что формула содержит ошибку, вот только какую неясно окончательно. Но хоть убей не считает она. |
01.11.2013, 07:14 | #8 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Какие могут быть ошибки? Единственное, что можно предположить, это то, что значения в суммируемых диапазонах файлов-источников имеют нечисловой формат (например, текстовый). Попробуйте в код добавить следующее: Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 01.11.2013 в 07:16. |
|
01.11.2013, 11:08 | #9 |
Пользователь
Регистрация: 08.11.2010
Сообщений: 33
|
Выкладываю пример файлов,
|
01.11.2013, 11:15 | #10 |
Пользователь
Регистрация: 08.11.2010
Сообщений: 33
|
Вложения
Сорри, не прикрепилось с первого раза
Последний раз редактировалось Extril; 01.11.2013 в 11:24. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос: Сводная таблица из нескольких книг | MaxxVer | Microsoft Office Excel | 7 | 28.08.2012 14:45 |
Макрос промежуточного суммирования . | Ravvil | Microsoft Office Excel | 6 | 26.05.2012 21:39 |
Написать макрос суммирования. | Kreol64 | Microsoft Office Excel | 24 | 11.03.2011 19:27 |
макрос суммирования данных столбца | RECit | Microsoft Office Excel | 3 | 11.10.2010 15:14 |
макрос для суммирования | jisu | Microsoft Office Excel | 5 | 30.03.2009 23:21 |