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

Вход

Регистрация

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

 

= Мир MS Excel/Сумма значений с разных листов книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Сумма значений с разных листов книги
Ed_Vard Дата: Среда, 11.05.2011, 15:24 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времени суток уважаемые форумчане.
Прошу помощи в седующей проблеме:
Есть книга excel в которой есть три листа - на листах есть данные, имеющие одинаковую структуру, но отличающиеся данные. Необходимо в макросе собрать данные листов 1 и 2 отобранные по столбцу А листа Серка дабы получить следующий результат:

1 результат = (лист1столбец6+лист2столбец6+листСверкастолбец6) - (лист1столбец7+лист2столбец7+листСверкастолбец7)
2 результат = (лист1столбец8+лист2столбец8+листСверкастолбец8) - (лист1столбец9+лист2столбец9+листСверкастолбец9)

произвести вычисления в макросе и вставить полученные данные в Лист Сверка в столбцы K и L построчно.

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

1 результат = (лист1столбец6+лист2столбец6+листСверкастолбец6) - (лист1столбец7+лист2столбец7+листСверкастолбец7)
2 результат = (лист1столбец8+лист2столбец8+листСверкастолбец8) - (лист1столбец9+лист2столбец9+листСверкастолбец9)

произвести вычисления в макросе и вставить полученные данные в Лист Сверка в столбцы K и L построчно.


Автор - Ed_Vard
Дата добавления - 11.05.2011 в 15:24
Serge_007 Дата: Среда, 11.05.2011, 16:15 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте.

А так:

Code
=СУММ(Лист1:Лист2!F2)

не пойдёт?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте.

А так:

Code
=СУММ(Лист1:Лист2!F2)

не пойдёт?

Автор - Serge_007
Дата добавления - 11.05.2011 в 16:15
Ed_Vard Дата: Среда, 11.05.2011, 16:24 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (Serge_007)
не пойдёт

К сожалению нет - пробовал - это малая часть файла - кажый лист имеет порядка 25-30 тысяч строк - расчет формул будет о-о-о-о-чень долгим. Тем более там нужно будет использовать ВПР для поиска уникальных значений - что довольно не быстро!


Сообщение отредактировал Ed_Vard - Среда, 11.05.2011, 16:26
 
Ответить
Сообщение
Quote (Serge_007)
не пойдёт

К сожалению нет - пробовал - это малая часть файла - кажый лист имеет порядка 25-30 тысяч строк - расчет формул будет о-о-о-о-чень долгим. Тем более там нужно будет использовать ВПР для поиска уникальных значений - что довольно не быстро!

Автор - Ed_Vard
Дата добавления - 11.05.2011 в 16:24
nilem Дата: Среда, 11.05.2011, 17:54 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот, наверное, не совсем то (или совсем не то), что нужно, но код получился интересный, как мне кажется: суммируем разность столбцов 6, 7 и 8, 9 для уникальных по ст. А по всем листам.
Code
Sub ertert()
Dim x, i&, wshList(), bu, t()
wshList = Array("сверка", "Лист1", "Лист2")
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For Each bu In wshList
         x = Sheets(bu).Range("A2:I" & Sheets(bu).Cells(Rows.Count, 1).End(xlUp).Row).Value
         For i = 1 To UBound(x)
             If Not .Exists(x(i, 1)) Then
                 .Item(x(i, 1)) = Array(x(i, 6) - x(i, 7), x(i, 8) - x(i, 9))
             Else
                 t = .Item(x(i, 1))
                 t(0) = t(0) + x(i, 6) - x(i, 7)
                 t(1) = t(1) + x(i, 8) - x(i, 9)
                 .Item(x(i, 1)) = t
             End If
         Next
     Next bu
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("сверка").[l2:m2].Resize(.Count).Value = x
     x = Application.Transpose(.Keys)
     Sheets("сверка").[k2].Resize(.Count).Value = x
End With
End Sub
К сообщению приложен файл: _6507151.zip (17.3 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВот, наверное, не совсем то (или совсем не то), что нужно, но код получился интересный, как мне кажется: суммируем разность столбцов 6, 7 и 8, 9 для уникальных по ст. А по всем листам.
Code
Sub ertert()
Dim x, i&, wshList(), bu, t()
wshList = Array("сверка", "Лист1", "Лист2")
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For Each bu In wshList
         x = Sheets(bu).Range("A2:I" & Sheets(bu).Cells(Rows.Count, 1).End(xlUp).Row).Value
         For i = 1 To UBound(x)
             If Not .Exists(x(i, 1)) Then
                 .Item(x(i, 1)) = Array(x(i, 6) - x(i, 7), x(i, 8) - x(i, 9))
             Else
                 t = .Item(x(i, 1))
                 t(0) = t(0) + x(i, 6) - x(i, 7)
                 t(1) = t(1) + x(i, 8) - x(i, 9)
                 .Item(x(i, 1)) = t
             End If
         Next
     Next bu
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("сверка").[l2:m2].Resize(.Count).Value = x
     x = Application.Transpose(.Keys)
     Sheets("сверка").[k2].Resize(.Count).Value = x
End With
End Sub

Автор - nilem
Дата добавления - 11.05.2011 в 17:54
Ed_Vard Дата: Среда, 11.05.2011, 20:15 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
не совсем то

Да - спасибо большое - весьма интересны код - у меня даже есть - куда его применить - но сюда он немного не подходит sad
Немножечко не то, хотя я наверно сам виновант - не все описал - на листе Сверка я постоянно меняю данные подгружая их из файлов поэтому он имеет такую структуру и записываються в ячейки B2:I -макросом произвожу сцепление по строкам столбцов B:E:C в столбец А, а затем макросом удаляю дубликаты по столбцу А - все это на листе Сверка - т.е. дубликатов у меня на нем нет - это я сделать в примере забыл по запарке sad
На листах Лист1 и Лист2 данные повторяються - но это одно и тоже значение - поэтому я и поставил одиковые суммы в столбцах поэтому если в столбце А несколько одиковых значений - сумировать не нужно все такие - нужно просто взять данные из любой строки или вернее считать их в Scripting.Dictionary как уникальные.
В столбец К записывать ничего не нужно - достаточно будет - что это есть с столбце А
Попытался описать в файле примера на листе сверка
К сообщению приложен файл: 5444137.xls (54.0 Kb)


Сообщение отредактировал Ed_Vard - Среда, 11.05.2011, 23:38
 
Ответить
Сообщение
Quote (nilem)
не совсем то

Да - спасибо большое - весьма интересны код - у меня даже есть - куда его применить - но сюда он немного не подходит sad
Немножечко не то, хотя я наверно сам виновант - не все описал - на листе Сверка я постоянно меняю данные подгружая их из файлов поэтому он имеет такую структуру и записываються в ячейки B2:I -макросом произвожу сцепление по строкам столбцов B:E:C в столбец А, а затем макросом удаляю дубликаты по столбцу А - все это на листе Сверка - т.е. дубликатов у меня на нем нет - это я сделать в примере забыл по запарке sad
На листах Лист1 и Лист2 данные повторяються - но это одно и тоже значение - поэтому я и поставил одиковые суммы в столбцах поэтому если в столбце А несколько одиковых значений - сумировать не нужно все такие - нужно просто взять данные из любой строки или вернее считать их в Scripting.Dictionary как уникальные.
В столбец К записывать ничего не нужно - достаточно будет - что это есть с столбце А
Попытался описать в файле примера на листе сверка

Автор - Ed_Vard
Дата добавления - 11.05.2011 в 20:15
nilem Дата: Четверг, 12.05.2011, 09:08 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
На Лист1 и Лист2 повторы удалить можно? Тогда будет за один проход - удаляем дубликаты и складываем со значениями из Сверка.
Значения по ст. А на всех листах всегда одни и те же?
Вот так без удаления повторов. Предполагается, что повторы в ст. А отсортированы, т.е. идут один за другим.
Code
Sub ertert()
Dim x, i&, wshList(), bu, t()
wshList = Array("сверка", "Лист1", "Лист2")
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For Each bu In wshList
         x = Sheets(bu).Range("A1").CurrentRegion.Value
         For i = 2 To UBound(x)
             If x(i, 1) <> x(i - 1, 1) Then
                 If Not .Exists(x(i, 1)) Then
                     .Item(x(i, 1)) = Array(x(i, 6) - x(i, 7), x(i, 8) - x(i, 9))
                 Else
                     t = .Item(x(i, 1))
                     t(0) = t(0) + x(i, 6) - x(i, 7)
                     t(1) = t(1) + x(i, 8) - x(i, 9)
                     .Item(x(i, 1)) = t
                 End If
             End If
         Next
     Next bu
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("сверка").[k2:l2].Resize(.Count).Value = x
End With
End Sub


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Четверг, 12.05.2011, 10:00
 
Ответить
СообщениеНа Лист1 и Лист2 повторы удалить можно? Тогда будет за один проход - удаляем дубликаты и складываем со значениями из Сверка.
Значения по ст. А на всех листах всегда одни и те же?
Вот так без удаления повторов. Предполагается, что повторы в ст. А отсортированы, т.е. идут один за другим.
Code
Sub ertert()
Dim x, i&, wshList(), bu, t()
wshList = Array("сверка", "Лист1", "Лист2")
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For Each bu In wshList
         x = Sheets(bu).Range("A1").CurrentRegion.Value
         For i = 2 To UBound(x)
             If x(i, 1) <> x(i - 1, 1) Then
                 If Not .Exists(x(i, 1)) Then
                     .Item(x(i, 1)) = Array(x(i, 6) - x(i, 7), x(i, 8) - x(i, 9))
                 Else
                     t = .Item(x(i, 1))
                     t(0) = t(0) + x(i, 6) - x(i, 7)
                     t(1) = t(1) + x(i, 8) - x(i, 9)
                     .Item(x(i, 1)) = t
                 End If
             End If
         Next
     Next bu
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("сверка").[k2:l2].Resize(.Count).Value = x
End With
End Sub

Автор - nilem
Дата добавления - 12.05.2011 в 09:08
Ed_Vard Дата: Четверг, 12.05.2011, 12:06 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem, Добрый день - большое спасибо за помощь!
Quote (nilem)
На Лист1 и Лист2 повторы удалить можно? Тогда будет за один проход - удаляем дубликаты и складываем со значениями из Сверка.

Удалять на этих листах дубликаты нельзя - т.к. они используються для визуального контроля!
Quote (nilem)
Значения по ст. А на всех листах всегда одни и те же?

Значение по Лист1 и Лист2 всегда одно и тоже по столбцу А - на листе сверка - они меняються в зависимости от того - какие файлы я загружаю - Но они всегда совпадают с какимито значениями по столбцу А листов 1 и 2.
Quote (nilem)
Вот так без удаления повторов. Предполагается, что повторы в ст. А отсортированы, т.е. идут один за другим.

Ваш вариант вроде в примере работает нормально - но при использовании в моем файле - переносит на лист сверка се разности по лист1 и лист2
Вот прикладываю пример файла с макросом - который дает результат - который мне нужен: Это вариация одного из Ваших макросов. В нем я не могу использовать больше двух листов - не знаю как это сделать - а мне нужно в дальнейшем - т.к. будут кроме лист 1 и 2 еще и лист 3 и т.д. еще такие же листы - с которых нужно будет брать данные.
И также его нужно запускать два раза - чтоб сначала получить данные по разности с Листа 1 а потом тока разность итоговую.
Прикладываю пример - как то что я пробовал сделать - может так станет более понятно:
К сообщению приложен файл: 5166446.xls (59.0 Kb)
 
Ответить
Сообщениеnilem, Добрый день - большое спасибо за помощь!
Quote (nilem)
На Лист1 и Лист2 повторы удалить можно? Тогда будет за один проход - удаляем дубликаты и складываем со значениями из Сверка.

Удалять на этих листах дубликаты нельзя - т.к. они используються для визуального контроля!
Quote (nilem)
Значения по ст. А на всех листах всегда одни и те же?

Значение по Лист1 и Лист2 всегда одно и тоже по столбцу А - на листе сверка - они меняються в зависимости от того - какие файлы я загружаю - Но они всегда совпадают с какимито значениями по столбцу А листов 1 и 2.
Quote (nilem)
Вот так без удаления повторов. Предполагается, что повторы в ст. А отсортированы, т.е. идут один за другим.

Ваш вариант вроде в примере работает нормально - но при использовании в моем файле - переносит на лист сверка се разности по лист1 и лист2
Вот прикладываю пример файла с макросом - который дает результат - который мне нужен: Это вариация одного из Ваших макросов. В нем я не могу использовать больше двух листов - не знаю как это сделать - а мне нужно в дальнейшем - т.к. будут кроме лист 1 и 2 еще и лист 3 и т.д. еще такие же листы - с которых нужно будет брать данные.
И также его нужно запускать два раза - чтоб сначала получить данные по разности с Листа 1 а потом тока разность итоговую.
Прикладываю пример - как то что я пробовал сделать - может так станет более понятно:

Автор - Ed_Vard
Дата добавления - 12.05.2011 в 12:06
nilem Дата: Четверг, 12.05.2011, 13:31 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Видно, что-то я недоперепонял (с)
Вот вариант с перебором всех листов (любое количество). В синих столбцах формулы для проверки.
Так?
К сообщению приложен файл: 3_5444137.xlsm (27.3 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВидно, что-то я недоперепонял (с)
Вот вариант с перебором всех листов (любое количество). В синих столбцах формулы для проверки.
Так?

Автор - nilem
Дата добавления - 12.05.2011 в 13:31
Ed_Vard Дата: Четверг, 12.05.2011, 14:01 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
К сообщению приложен файл: 3_5444137.xlsm(27Kb)

Почему то не могу скачать sad - открываеться пустое окно и все! Может в архив лучше?



Сообщение отредактировал Ed_Vard - Четверг, 12.05.2011, 14:12
 
Ответить
Сообщение
Quote (nilem)
К сообщению приложен файл: 3_5444137.xlsm(27Kb)

Почему то не могу скачать sad - открываеться пустое окно и все! Может в архив лучше?


Автор - Ed_Vard
Дата добавления - 12.05.2011 в 14:01
nilem Дата: Четверг, 12.05.2011, 16:54 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот в архиве в формате 2003.
К сообщению приложен файл: 3_5444137.zip (17.4 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВот в архиве в формате 2003.

Автор - nilem
Дата добавления - 12.05.2011 в 16:54
Ed_Vard Дата: Четверг, 12.05.2011, 19:13 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem,
Выкладываю слегка измененый - но в принципе тот файл - в который мне нужен макрос. В столбцах Z:AA - расчет формулами - как должно быть.
В столбцах AC:AD - как получаеться макросом.
Лучше в макросе дописывать - какие листы считать - а не использовать все - т.к. могут быть лишние листы - которые нужны - но в расчете не должны учавствовать - типа как вот так: wshList = Array("сверка", "Лист1", "Лист2") - то что нужно я смогу дописать какой лист.
Выкладываю файл - большой размер:

СКАЧАТЬ

 
Ответить
Сообщениеnilem,
Выкладываю слегка измененый - но в принципе тот файл - в который мне нужен макрос. В столбцах Z:AA - расчет формулами - как должно быть.
В столбцах AC:AD - как получаеться макросом.
Лучше в макросе дописывать - какие листы считать - а не использовать все - т.к. могут быть лишние листы - которые нужны - но в расчете не должны учавствовать - типа как вот так: wshList = Array("сверка", "Лист1", "Лист2") - то что нужно я смогу дописать какой лист.
Выкладываю файл - большой размер:

СКАЧАТЬ


Автор - Ed_Vard
Дата добавления - 12.05.2011 в 19:13
nilem Дата: Четверг, 12.05.2011, 20:48 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
А-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник.
К сообщению приложен файл: __290_3_5_4.zip (29.3 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеА-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник.

Автор - nilem
Дата добавления - 12.05.2011 в 20:48
Ed_Vard Дата: Четверг, 12.05.2011, 21:05 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
А-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник

Да-а-а-а-а! Спасибо огромное - это именно то - что нужно! Счас я еще его посмотрю - попробую - но кажется то что нужно!

 
Ответить
Сообщение
Quote (nilem)
А-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник

Да-а-а-а-а! Спасибо огромное - это именно то - что нужно! Счас я еще его посмотрю - попробую - но кажется то что нужно!


Автор - Ed_Vard
Дата добавления - 12.05.2011 в 21:05
Ed_Vard Дата: Среда, 29.06.2011, 00:18 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Quote (nilem)
А-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник.

К сожалению - в реальности оказалось - что листы 1 и 2 имеют разное количество строк данных - поэтому подсчет идет неправильно sad

Уважаемые форумчане - можно ли как то оптимизировать вычисления формулами (поскольку макросом не совсем правильный результат получаеться) для большого количества данных в результате на листе 3?
пример файла прилагаю.
К сообщению приложен файл: 7858703.xls (29.5 Kb)


Сообщение отредактировал Ed_Vard - Среда, 29.06.2011, 01:22
 
Ответить
Сообщение
Quote (nilem)
А-а-а-а, теперь понял. Файл обрезал, чтобы войти в стольник.

К сожалению - в реальности оказалось - что листы 1 и 2 имеют разное количество строк данных - поэтому подсчет идет неправильно sad

Уважаемые форумчане - можно ли как то оптимизировать вычисления формулами (поскольку макросом не совсем правильный результат получаеться) для большого количества данных в результате на листе 3?
пример файла прилагаю.

Автор - Ed_Vard
Дата добавления - 29.06.2011 в 00:18
DV Дата: Среда, 29.06.2011, 13:22 | Сообщение № 15
Группа: Друзья
Ранг: Обитатель
Сообщений: 286
Репутация: 194 ±
Замечаний: 0% ±

Excel 2010 RUS
Два варианта:
К сообщению приложен файл: 7858703_otv.xls (28.5 Kb)
 
Ответить
СообщениеДва варианта:

Автор - DV
Дата добавления - 29.06.2011 в 13:22
Ed_Vard Дата: Четверг, 27.10.2011, 00:27 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времени суток уважаемые форумчане!
Прошу помощи у Вас - т.к. уже голову сломал sad - не хватает знаний
Направление задачи тоже - но усложнилось - и не могу придумать - как ее решить.
Есть книга excel в которой есть четыре листа с данными необходимыми для вычисления:1-2010,2-2010,1-2011,КОРР-ТП - на листах есть данные. Необходимо в макросе собрать данные с этих листов, произвести вычисления на листе Серка получить результат в столбцы U и V:

До настоящего времени использовал макрос уважаемого nilem за что ему еще раз большое спасибо, вот такого содержания:
Code

Option Explicit

Sub Сверка_2_БК()
Dim x, i&, wshList(), bu, t()
wshList = Array("1-2010", "2-2010", "1-2011") 'здесь дописываем Array("1 полугодие", "Лист2", "Лист3") и т.д. без "сверка"

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     x = [a4].CurrentRegion.Value
     For i = 2 To UBound(x)
         .Item(x(i, 1) & "" & x(i, 12)) = Array(x(i, 14) - x(i, 15), x(i, 16) - x(i, 17))
     Next i

     For Each bu In wshList
         x = Sheets(bu).[a4].CurrentRegion.Value
         For i = 2 To UBound(x)
             If .exists(x(i, 1) & "" & x(i, 12)) Then
                 t = .Item(x(i, 1) & "" & x(i, 12))
                 t(0) = Round(t(0) + x(i, 14) - x(i, 15), 2)
                 t(1) = Round(t(1) + x(i, 16) - x(i, 17), 2)
                 .Item(x(i, 1) & "" & x(i, 12)) = t
             End If
         Next i
     Next bu
      
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("Сверка").[u5:v5].Resize(.Count).Value = x
End With

End Sub


То - что мне нужно получить - попытался объяснить в файле примера на листе 1-2011. Свормулировал как то непонятно возможно - за что прошу сильно не пинать sad - но просто уже сам запуталя и буковки в слова никак не складываються.
Прошу подсказать - возможно ли это вообще реализовать и в какую сторону копать!
К сообщению приложен файл: 8231897.rar (40.5 Kb)
 
Ответить
СообщениеДоброго времени суток уважаемые форумчане!
Прошу помощи у Вас - т.к. уже голову сломал sad - не хватает знаний
Направление задачи тоже - но усложнилось - и не могу придумать - как ее решить.
Есть книга excel в которой есть четыре листа с данными необходимыми для вычисления:1-2010,2-2010,1-2011,КОРР-ТП - на листах есть данные. Необходимо в макросе собрать данные с этих листов, произвести вычисления на листе Серка получить результат в столбцы U и V:

До настоящего времени использовал макрос уважаемого nilem за что ему еще раз большое спасибо, вот такого содержания:
Code

Option Explicit

Sub Сверка_2_БК()
Dim x, i&, wshList(), bu, t()
wshList = Array("1-2010", "2-2010", "1-2011") 'здесь дописываем Array("1 полугодие", "Лист2", "Лист3") и т.д. без "сверка"

With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     x = [a4].CurrentRegion.Value
     For i = 2 To UBound(x)
         .Item(x(i, 1) & "" & x(i, 12)) = Array(x(i, 14) - x(i, 15), x(i, 16) - x(i, 17))
     Next i

     For Each bu In wshList
         x = Sheets(bu).[a4].CurrentRegion.Value
         For i = 2 To UBound(x)
             If .exists(x(i, 1) & "" & x(i, 12)) Then
                 t = .Item(x(i, 1) & "" & x(i, 12))
                 t(0) = Round(t(0) + x(i, 14) - x(i, 15), 2)
                 t(1) = Round(t(1) + x(i, 16) - x(i, 17), 2)
                 .Item(x(i, 1) & "" & x(i, 12)) = t
             End If
         Next i
     Next bu
      
     x = Application.Transpose(Application.Transpose(.Items))
     Sheets("Сверка").[u5:v5].Resize(.Count).Value = x
End With

End Sub


То - что мне нужно получить - попытался объяснить в файле примера на листе 1-2011. Свормулировал как то непонятно возможно - за что прошу сильно не пинать sad - но просто уже сам запуталя и буковки в слова никак не складываються.
Прошу подсказать - возможно ли это вообще реализовать и в какую сторону копать!

Автор - Ed_Vard
Дата добавления - 27.10.2011 в 00:27
nilem Дата: Четверг, 27.10.2011, 16:53 | Сообщение № 17
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Непонятно...
Ed_Vard, попробуйте как-то "алгоритмически" что ли ("а-ля дядя Хьюго" smile ) описать задачу. Например:
Заносим в массив таблицу с листа "Сверка", используя в качестве уникальных связку РегНомер-Страховой.
Перебираем последовательно таблицы на листах 1-2010, 2-2010, 1-2011, КОРР-ТП, и, увидев соответствующую РегНомер-Страховой, перезаписываем в исходном массиве Н/С, У/С, Н/Н, У/Н (если совпадают о/п и год). Корректировки из КОРР-ТП мы увидим в последнюю очередь, и просто перезапишем нужные значения.
В массиве пересчитываем СТР-АЯ и НАК-АЯ и переносим обратно на лист Сверка.
Может, так и надо?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеНепонятно...
Ed_Vard, попробуйте как-то "алгоритмически" что ли ("а-ля дядя Хьюго" smile ) описать задачу. Например:
Заносим в массив таблицу с листа "Сверка", используя в качестве уникальных связку РегНомер-Страховой.
Перебираем последовательно таблицы на листах 1-2010, 2-2010, 1-2011, КОРР-ТП, и, увидев соответствующую РегНомер-Страховой, перезаписываем в исходном массиве Н/С, У/С, Н/Н, У/Н (если совпадают о/п и год). Корректировки из КОРР-ТП мы увидим в последнюю очередь, и просто перезапишем нужные значения.
В массиве пересчитываем СТР-АЯ и НАК-АЯ и переносим обратно на лист Сверка.
Может, так и надо?

Автор - nilem
Дата добавления - 27.10.2011 в 16:53
Ed_Vard Дата: Четверг, 27.10.2011, 17:57 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem, да - наверно лучше я и сам не сформулировал sad
Только немного уточню вот этот момент:
Quote (nilem)
(если совпадают о/п и год).

Только если совпадают КАТ, о/п и год - т.к. на листе могут быть два совпадающих значения по РегНомеру-Страховой и они сумируются - что правильно, но в коректировке указываеться - какая именно КАТ корректируеться и за какой перриод (столбцы J и K) т.е ее нужно подставить вместо того значения а потом уже сложить с со следующим совпадающим РегНомер-Страховой на даном листе.
Например-если смотреть мой пример- на листе 1-2011 есть строка 32
011-011-000006|РОГА И КОПЫТА|5006|СЗВ-6-1| КОР|УСЕН|1|2011|2|2010|123-123-123 21|ФИО ЧЕЛОВЕКА|100|80|50|25|
это корректировка, которая дожна заменить строку 15 с листа 2-2010, а не строку 16
011-011-000006|РОГА И КОПЫТА|2011|СЗВ-6-1| ИСХ|УСЕН|2|2010|||123-123-123 21|ФИО ЧЕЛОВЕКА|5000|4500|3000|2500

Все остально вроде как Вы описали кажеться.
Т.е. макрос должен делать в принципе тоже самое - что и ранее, только учитывать - что если по совпавшему РегНомеру-Страховой есть КОР в столбце Е - то нужно заменить этими значениями соответствующие значения в указанном периоде (столбцы J и K - в них указываеться за какой период идет корректировка, в ИСХ эти столбцы пусты - период для них указан в в столбцах H и I) при условии что совпадает у них КАТ - столбец F.


Сообщение отредактировал Ed_Vard - Пятница, 28.10.2011, 00:15
 
Ответить
Сообщениеnilem, да - наверно лучше я и сам не сформулировал sad
Только немного уточню вот этот момент:
Quote (nilem)
(если совпадают о/п и год).

Только если совпадают КАТ, о/п и год - т.к. на листе могут быть два совпадающих значения по РегНомеру-Страховой и они сумируются - что правильно, но в коректировке указываеться - какая именно КАТ корректируеться и за какой перриод (столбцы J и K) т.е ее нужно подставить вместо того значения а потом уже сложить с со следующим совпадающим РегНомер-Страховой на даном листе.
Например-если смотреть мой пример- на листе 1-2011 есть строка 32
011-011-000006|РОГА И КОПЫТА|5006|СЗВ-6-1| КОР|УСЕН|1|2011|2|2010|123-123-123 21|ФИО ЧЕЛОВЕКА|100|80|50|25|
это корректировка, которая дожна заменить строку 15 с листа 2-2010, а не строку 16
011-011-000006|РОГА И КОПЫТА|2011|СЗВ-6-1| ИСХ|УСЕН|2|2010|||123-123-123 21|ФИО ЧЕЛОВЕКА|5000|4500|3000|2500

Все остально вроде как Вы описали кажеться.
Т.е. макрос должен делать в принципе тоже самое - что и ранее, только учитывать - что если по совпавшему РегНомеру-Страховой есть КОР в столбце Е - то нужно заменить этими значениями соответствующие значения в указанном периоде (столбцы J и K - в них указываеться за какой период идет корректировка, в ИСХ эти столбцы пусты - период для них указан в в столбцах H и I) при условии что совпадает у них КАТ - столбец F.

Автор - Ed_Vard
Дата добавления - 27.10.2011 в 17:57
Ed_Vard Дата: Среда, 02.11.2011, 14:11 | Сообщение № 19
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времени суток уважаемы форумчане
Вопрос относиться к вышеизложенному чуть выше.
Возможно ли как то при считывании данных в массив, при попадании значения нового значения заменить им строку которую уже считали на предыдущем листе при совпадении определенных условий?
 
Ответить
СообщениеДоброго времени суток уважаемы форумчане
Вопрос относиться к вышеизложенному чуть выше.
Возможно ли как то при считывании данных в массив, при попадании значения нового значения заменить им строку которую уже считали на предыдущем листе при совпадении определенных условий?

Автор - Ed_Vard
Дата добавления - 02.11.2011 в 14:11
nilem Дата: Пятница, 04.11.2011, 11:47 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Ну чтобы как-то снять с якоря. На листе "промежуточный результат" жмем зеленую кнопку. Выводятся данные с листов "1-2010", "2-2010", "1-2011", "КОРР-ТП", которые соответствуют связке РЕГ НОМЕР-СТРАХОВОЙ с листа "сверка" (Sub ertert() модуль1).
Теперь, видимо, их надо как-то скомпоновать и посчитать страховую и накопительную части. Но вот как? В примере строк не так много - может вручную сделаете, чтобы увидеть нужный результат? И пояснения какие-нибудь, желательно "алгоритмически" smile

Всех с праздником! smile
К сообщению приложен файл: 9983193.zip (52.0 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеНу чтобы как-то снять с якоря. На листе "промежуточный результат" жмем зеленую кнопку. Выводятся данные с листов "1-2010", "2-2010", "1-2011", "КОРР-ТП", которые соответствуют связке РЕГ НОМЕР-СТРАХОВОЙ с листа "сверка" (Sub ertert() модуль1).
Теперь, видимо, их надо как-то скомпоновать и посчитать страховую и накопительную части. Но вот как? В примере строк не так много - может вручную сделаете, чтобы увидеть нужный результат? И пояснения какие-нибудь, желательно "алгоритмически" smile

Всех с праздником! smile

Автор - nilem
Дата добавления - 04.11.2011 в 11:47
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

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