Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2015, 14:38   #1
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию Сумма по листам в зависимости от № печати

Ребят помогите пожалуйста:
Листки 1-31 будут заполняться
В листке "за месяц":
Нужно чтобы искало номер печати, например "11" во всех столбиках с заголовком "№печати" по всем листкам 1-31 и если находит данную печать суммировало в листок "за месяц" количество
Пытался сделать с помощью суммеслимн, но почему-то не получается сделать по всем листкам
Или тут без макроса не обойтись?
Вложения
Тип файла: zip zvorot_calc.zip (50.3 Кб, 12 просмотров)
KApSuL вне форума Ответить с цитированием
Старый 25.03.2015, 15:34   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

http://msexcel.ru/8-microsoft-excel/...%B2-excel.html
Цитата:
Трехмерные ссылки могут быть использованы для создания ссылок на ячейки на других листах, определения имен и создания формул с использованием следующих функций: СУММ, СРЗНАЧ, СРЗНАЧА, СЧЁТ, СЧЁТЗ, МАКС, МАКСА, МИН, МИНА, ПРОИЗВЕД, СТАНДОТКЛОН, СТАНДОТКЛОНА, СТАНДОТКЛОНП, СТАНДОТКЛОНПА, ДИСП, ДИСПА, ДИСПР и ДИСПРА.
Можно создать пользовательскую функцию, но в нее нельзя передать трехмерный диапазон. Можно передать строку или номера листов, или в функции обрабатывать все листы от первого до того, откуда вызвана функция.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 25.03.2015 в 15:37.
Казанский вне форума Ответить с цитированием
Старый 25.03.2015, 15:55   #3
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
http://msexcel.ru/8-microsoft-excel/...%B2-excel.html
Можно создать пользовательскую функцию, но в нее нельзя передать трехмерный диапазон. Можно передать строку или номера листов, или в функции обрабатывать все листы от первого до того, откуда вызвана функция.
или же пойти индусским методом в стиле:
Код HTML:
=СУММЕСЛИ('1'!$C2;C$1;'1'!$D2)+СУММЕСЛИ('1'!$E2;C$1;'1'!$F2)+СУММЕСЛИ('1'!$G2;C$1;'1'!$H2)+СУММЕСЛИ('1'!$I2;C$1;'1'!$J2)+СУММЕСЛИ('1'!$K2;C$1;'1'!$L2)+СУММЕСЛИ('1'!$M2;C$1;'1'!$N2)+СУММЕСЛИ('1'!$O2;C$1;'1'!$P2)+СУММЕСЛИ('1'!$Q2;C$1;'1'!$R2)+СУММЕСЛИ('1'!$S2;C$1;'1'!$T2)+СУММЕСЛИ('1'!$U2;C$1;'1'!$V2)
+СУММЕСЛИ('2'!$C2;C$1;'2'!$D2)+СУММЕСЛИ('2'!$E2;C$1;'2'!$F2)+СУММЕСЛИ('2'!$G2;C$1;'2'!$H2)+СУММЕСЛИ('2'!$I2;C$1;'2'!$J2)+СУММЕСЛИ('2'!$K2;C$1;'2'!$L2)+СУММЕСЛИ('2'!$M2;C$1;'2'!$N2)+СУММЕСЛИ('2'!$O2;C$1;'2'!$P2)+СУММЕСЛИ('2'!$Q2;C$1;'2'!$R2)+СУММЕСЛИ('2'!$S2;C$1;'2'!$T2)+СУММЕСЛИ('2'!$U2;C$1;'2'!$V2)
+СУММЕСЛИ('3'!$C2;C$1;'3'!$D2)+СУММЕСЛИ('3'!$E2;C$1;'3'!$F2)+СУММЕСЛИ('3'!$G2;C$1;'3'!$H2)+СУММЕСЛИ('3'!$I2;C$1;'3'!$J2)+СУММЕСЛИ('3'!$K2;C$1;'3'!$L2)+СУММЕСЛИ('3'!$M2;C$1;'3'!$N2)+СУММЕСЛИ('3'!$O2;C$1;'3'!$P2)+СУММЕСЛИ('3'!$Q2;C$1;'3'!$R2)+СУММЕСЛИ('3'!$S2;C$1;'3'!$T2)+СУММЕСЛИ('3'!$U2;C$1;'3'!$V2)
KApSuL вне форума Ответить с цитированием
Старый 25.03.2015, 16:33   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Это не наш метод См. файл
Код:
Function СУММЕСЛИМН3d(diapSum As Range, diapUsl As Range, usl)
Dim i&, dS$, dU$
dS = diapSum.Address
dU = diapUsl.Address
For i = 1 To Application.Caller.Worksheet.Index - 1
  СУММЕСЛИМН3d = СУММЕСЛИМН3d + _
    Application.SumIfs(Worksheets(i).Range(dS), Worksheets(i).Range(dU), usl)
Next
End Function
Вложения
Тип файла: zip zvorot_calc.zip (30.3 Кб, 12 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 25.03.2015, 17:02   #5
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Это не наш метод См. файл
Код:
Function СУММЕСЛИМН3d(diapSum As Range, diapUsl As Range, usl)
Dim i&, dS$, dU$
dS = diapSum.Address
dU = diapUsl.Address
For i = 1 To Application.Caller.Worksheet.Index - 1
  СУММЕСЛИМН3d = СУММЕСЛИМН3d + _
    Application.SumIfs(Worksheets(i).Range(dS), Worksheets(i).Range(dU), usl)
Next
End Function
а как функцию активировать?
пишет ЗНАЧ#
вроде есть модуль с функцией, а функция чёт не работает
всё вроде, сделал, но всё-равно считает только по 1му листку
а..всё понял...считает по всем листкам но ищет только по одной паре столбцов
нужно расплодить её на 10 диапазонов?

Последний раз редактировалось KApSuL; 25.03.2015 в 17:11.
KApSuL вне форума Ответить с цитированием
Старый 25.03.2015, 17:48   #6
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Это не наш метод См. файл
Код:
Function СУММЕСЛИМН3d(diapSum As Range, diapUsl As Range, usl)
Dim i&, dS$, dU$
dS = diapSum.Address
dU = diapUsl.Address
For i = 1 To Application.Caller.Worksheet.Index - 1
  СУММЕСЛИМН3d = СУММЕСЛИМН3d + _
    Application.SumIfs(Worksheets(i).Range(dS), Worksheets(i).Range(dU), usl)
Next
End Function
формула по ходу будет считать по всем строчкам одинаковое число
по сути нужен не диапазон с 1-23 а просто клеточка
KApSuL вне форума Ответить с цитированием
Старый 04.02.2016, 15:30   #7
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

а можете подсказать как в функции сделать сдвиг столбиков на +1
К примеру есть 2 начальные ячейки
D2 - тут суммирует количество штук
C2 - тут ищет № нашей печати
И чтобы в формуле в цикле for столбцы после каждой итерации сдвигались на 1 вправо и ячейки были уже
F2
E2
и так 10 раз подряд?
KApSuL вне форума Ответить с цитированием
Старый 04.02.2016, 15:37   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
for c = 4 to 22 step 2
  if cells(2,c) then ' тут сумма
  if cells(2,c-1) then ' тут печать
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.02.2016, 17:19   #9
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

а сюда как-то можно этот цикл применить?
Код:
Function СУММЕСЛИМН3d (diapSum As Range, diapUsl As Range, usl)
Dim i&, dS$, dU$, c
dS = diapSum.Address
dU = diapUsl.Address
For i = 1 To Application.Caller.Worksheet.Index - 1
  СУММЕСЛИМН3d = СУММЕСЛИМН3d + _
    Application.SumIfs(Worksheets(i).Range(dS), Worksheets(i).Range(dU), usl)
    
Next
End Function
И ещё может поможете разобраться
Не пойму почему но на 1-м листе

Код:
Асортимент	Код № печаті К-сть штук № печаті К-сть штук № печаті К-сть штук № печаті К-сть штук
унітаз Eko 010 041210	42 34	43 56	44 35	23 8
[/HTML]
Печати № 34 нету, но в общий листок "за месяц" считает каких-то 56 штук, никак не соображу в чём причина, формула должна по идее считать правильно
Вложения
Тип файла: zip zvorot_calc2.zip (330.5 Кб, 9 просмотров)
KApSuL вне форума Ответить с цитированием
Старый 10.02.2016, 16:05   #10
KApSuL
Форумчанин
 
Регистрация: 04.09.2010
Сообщений: 119
По умолчанию

можете подсказать ещё момент
Код:
Function суммеслимн3d(diapSum As Range, diapUsl As Range, usl)

Dim i&, dS$, dU$, sColumnNamedS, sRowNumberdS, sColumnNamedU, sRowNumberdU


dS = diapSum.Address 'D2
dU = diapUsl.Address 'C2

sColumnNamedS = Mid(dS, 2, (InStr(2, dS, "$") - 2)) //вот тут по идее достаём номера столбца и рядка
sRowNumberdS = Mid(dS, (InStr(2, dS, "$") + 1))//вот тут по идее достаём номера столбца и рядка
sColumnNamedU = Mid(dU, 2, (InStr(2, dU, "$") - 2))//вот тут по идее достаём номера столбца и рядка
sRowNumberdU = Mid(dU, (InStr(2, dU, "$") + 1))//вот тут по идее достаём номера столбца и рядка

For i = 1 To Application.Caller.Worksheet.Index - 1
Do While sColumnNamedS < 22
суммеслимн3d = суммеслимн3d + _
    Application.SumIfs(Worksheets(i).Cells(sRowNumberdS, sColumnNamedS), Worksheets(i).Cells(sRowNumberdU, sColumnNamedU), usl)
    
sColumnNamedS = sColumnNamedS + 2
sColumnNamedU = sColumnNamedU + 2

Loop
Next
End Function
Как то так придумал, но не работает, может сможете помочь?
Просто не особо понимаю как вытащить из Range номер столбца чтобы к нему прибавлять +2 и перебрать все столбцы на листке
Вложения
Тип файла: zip zvorot_calc2.zip (308.2 Кб, 8 просмотров)

Последний раз редактировалось KApSuL; 10.02.2016 в 16:12.
KApSuL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сумма столбца в зависимости от даты absbelii Microsoft Office Excel 8 16.11.2012 19:46
макрос по листам KApSuL Microsoft Office Excel 4 07.11.2012 13:29
Сумма из одного столбца с числами в зависимости от интервала дат из другого столбца Severny Microsoft Office Excel 10 14.03.2011 10:13
Сумма n-ой ячейки по листам KlimoDi Microsoft Office Excel 1 01.07.2010 15:13
Отчет. Сумма по листам и общий итог. Как? Relax2010 Microsoft Office Excel 1 02.05.2010 22:38