sumifs, чтобы зациклить все листы

Я искал разные форумы и не могу найти свой ответ. У меня есть довольно базовые знания VBA, и я создаю большую часть своего кода из битов онлайн!

Независимо от ссылок на ячейки, поскольку я смогу решить их позже. Пожалуйста, подскажите, как сделать ссылку на формулу суммирования на нескольких листах. Это встраивается в шаблон, и каждый раз при его запуске будет разное количество листов с разными именами, поэтому я не смогу ссылаться на листы.

извините, это немного расплывчато, заранее спасибо


person Fcarboni    schedule 18.05.2016    source источник
comment
Вы можете использовать Sheets(1) или любую другую ссылку на номер листа в вашей книге. Есть много вещей, которые вы потенциально могли бы сделать, но трудно сказать без дополнительной информации.   -  person Histerical    schedule 18.05.2016
comment
Просмотрите ответ на этот вопрос, чтобы понять, как ссылаться на листы по номеру в формуле: stackoverflow.com/questions/19790985/   -  person David    schedule 18.05.2016
comment
мне в основном нужно было бы в моем сводном листе в ячейке B3 сделать sumifs (B2006: B3005 (по всем листам), где summaryA3 = все листы A2006: A3005 и сводка B2 = все листы B2005)   -  person Fcarboni    schedule 18.05.2016
comment
Спасибо, Дэвид, я не думаю, что смогу использовать это, так как рабочая книга может иметь 3 листа или 300 листов, это неизвестно до тех пор, пока не будет запущен первый макрос, поэтому не могу ссылаться на номера листов, также если он запускается один раз, а затем снова, он создает новый листы и удаляет старые, которые сдвигаются по номерам листов, вот основная причина, по которой мне нужен цикл для всех листов в книге!   -  person Fcarboni    schedule 18.05.2016
comment
Гуглите 3D СУММЕСЛИМН. Он покажет, как использовать формулу для этого.   -  person Scott Craner    schedule 18.05.2016
comment
Спасибо @ScottCraner за предложение, у меня есть следующее, но это ошибки в формуле, есть идеи?   -  person Fcarboni    schedule 19.05.2016
comment
Листы(Сводка).Диапазон(AI3:AI150).Имя = Диапазон счетов(B3).формула ==СУММПРОИЗВ(СУММЕСЛИ(ДВССЫЛ( '&Счета&'!&A2006:A3005),A3,ДВССЫЛ('&Счета&'!&B2006:B3005) ))   -  person Fcarboni    schedule 19.05.2016
comment
Работает ли формула, если ввести ее прямо на лист? Сначала заставьте его работать на листе, затем запишите макрос, вставив формулу в ячейку, затем Excel создаст правильную форму для vba.   -  person Scott Craner    schedule 19.05.2016
comment
Попробуйте эту формулу "=SUMPRODUCT(SUMIF(INDIRECT(""'"" & Invoices & ""'!B2006:B3005""),A3))"   -  person Scott Craner    schedule 19.05.2016
comment
он не работает на листе, он переосмысливает, что это формула, и пересматривает мой список, но вызывает #Ref   -  person Fcarboni    schedule 19.05.2016
comment
Я думаю, что это близко, но это еще не совсем так   -  person Fcarboni    schedule 19.05.2016
comment
Затем в одном или нескольких именах листов в диапазоне «Счета-фактуры» есть опечатка. Убедитесь, что они написаны одинаково и нет пробелов, которых нет в обоих.   -  person Scott Craner    schedule 19.05.2016
comment
TOP Человек, диапазон выбирал пустую ячейку, поэтому вылетал   -  person Fcarboni    schedule 19.05.2016
comment
Теперь напишите ответ, рассказав нам, что вы сделали для будущих поисков. затем через два дня, если никто не предложит лучший метод, отметьте его как правильный.   -  person Scott Craner    schedule 19.05.2016


Ответы (1)


Спасибо, так что для всех, кому это нужно, вот как это было сделано полностью, моя исходная формула была

"=SUMPRODUCT(SUMIF(INDIRECT(" '"&Invoices&"'!"&"A2006:A3005"),A3,INDIRECT("'"&Invoices&"'!"&"B2006:B3005")))" 

это работало при вводе прямо в ячейку, но, как вы можете видеть, при добавлении в VBA оно читается как комментарий. Чтобы исправить это, каждый раз, когда вы используете «вам нужно добавить больше», как показано ниже (кроме формы перед «= в начале и после )» в конце формулы)

 *****'list all the sheet names in cell AI1 of the sheet summary*****
For i = 1 To Sheets.Count
Sheets("Summary").Range("AI1")(i, 1).Value = Sheets(i).Name
Next i
***'clear the first 3 entries in AI as i didnt need the first three sheet names***
Sheets("Summary").Select
Sheets("Summary").Range("AI1:AI3").Clear
***'select the first sheet name, which is in AI4 as we cleard the first 3 to the last used cell, e.g Ctrl.Shift.down*** 
Sheets("Summary").Activate
Sheets("summary").Range(ActiveSheet.Range("AI4"),    ActiveSheet.Range("AI4").End(xlDown)).Select
***' Name the range invoices***
Selection.Name = "Invoices"
' ***Formula to do a sumIf looping all the shets in the named range Invoices***
Sheets("summary").Range("B3").Formula = "=SUMPRODUCT(SUMIF(INDIRECT(""'""&Invoices&""'!$A$2006:$A$3005""),$A3,INDIRECT(""'""&Invoices&""'!B$2006:B$3005"")))"
person Fcarboni    schedule 20.05.2016