как да направя в EXCEL да ми търси данни и стойностти от различни Sheet-ве и да ми ги записва в един отделен Sheet
Добър ден! Интересуваме как мога да направя в EXCEL да ми търси информация в определена зона от клетки от няколко страници и да ми ги записва в една и съща страница като ми прибавя стойностите към същата клетка, но без да ги повтаря нещата, а само да се увеличава стойността на дадената позиция.
За един лист формулата има приблизително този вид: =IF(LOOKUP(44;B1:F16);SUMIF(B1:F16;44);0)
- търсят се числа равни на 44 и се събират в текущата клетка.
Ако трябва да се претърсят няколко листа, трябва в зоните на функциите LOOKUP
и SUMIF
да се посочи (маркира) съответно листа и след това зоната от клетки. Цялата функция IF ще се повтори толкова пъти, от колкото листа искаме да вземем стойности, като събираме тези ифове. Нещо като =IF(....)+IF(...)+IF(...)
Защо не ми приема въпроса?
Как да направя формулата, ако искам на шийт "Общо разходи", в ред "разходи за Д.", колоните са по месеци, да се сумират всички разходи в жълто от шийт 3? С версия 2010 съм. Благодаря!
Здравейте, Събирането на клетки с еднакъв цвят най-лесно може да стане с използването на дефинирана от потребителя функция (UDF). На първата картинка съм описала как да се стигне до прозореца, в който да се постави (Paste) функцията:
Function SumByColor(CellColor As Range, myRange As Range)
Dim myCell As Range
Dim mySum As Double
Dim myColor As Integer
myColor = CellColor.Interior.ColorIndex
For Each myCell In myRange
If myCell.Interior.ColorIndex = myColor Then
mySum = WorksheetFunction.Sum(myCell, mySum)
End If
Next myCell
SumByColor = mySum
End Function
Трябва да се копира и пейстне цялата. Съхранете файла като Excel Macro-Enabled Workbook (*.xlsm). File -> Save As и изберете тип на файла с разширение .xlsm Сега можете да затворите прозореца на Microsoft Visual Basic for Applications. На втората картинка съм показала един пример с използването на новата функция. Тя има следния синтаксис: SumByColor(клетка с цвета, който ще бъде критерий за събирането; областта, която искаме да съберем)
ВНИМАНИЕ!!! Ако промените цвета на някоя клетка, функцията няма да се актуализира автоматично. За целта кликнете в клетката, в която е използвана функцията, натиснете клавиш F2 и след това Enter. Необходимо е да се направи навсякъде, където е използвана. Ако промените стойност в оцветена клетка - функцията се актуализира.
Ако използвате функцията в много клетки можете да използвате следната й модификация:
Function SumByColor(CellColor As Range, myRange As Range)
Application.Volatile
Dim myCell As Range
Dim mySum As Double
Dim myColor As Integer
myColor = CellColor.Interior.ColorIndex
For Each myCell In myRange
If myCell.Interior.ColorIndex = myColor Then
mySum = WorksheetFunction.Sum(myCell, mySum)
End If
Next myCell
SumByColor = mySum
End Function
При натискане на клавиш F9 функцията ще се актуализира навсякъде, където е използвана. В този случай обаче, функцията ще се актуализира навсякъде където сте я използвали при всяка промяна на стойност на която и да е клетка (не и при промяна на цвят). Например ако кликнете в която и да е клетка, натиснете клавиш F2 и след това Enter, функцията ще се преизчисли навсякъде, където е използвана. НО имайте предвид, че това води до по-бавна работа на файла.
И още нещо за финал: въведена по гореописания начин, функцията е достъпна само във файла, в който е създадена.
Надявам се да съм успяла да обясня ясно функцията и особеностите й.
Много благодаря за подробното обяснение!
Здравейте,а може ли на същият принцип да се направи и функция да сумира по шрифт и ако може как би трябвало да изглежда?Благодаря
Здравейте, Kalina Nakova,
Да, може да се сумира в зависимост от цвета на шрифта. Ето го и кода:
Function SumByFontColor(MySumRange As Range, CellWithFontColor As Range) As Double
Dim c As Range, TempSum As Double
Application.Volatile
MyFontColor = CellWithFontColor.Font.Color
TempSum = 0
On Error Resume Next
For Each c In MySumRange.Cells
If c.Font.Color = MyFontColor Then
TempSum = TempSum + c.Value
End If
Next c
On Error GoTo 0
Set c = Nothing
SumByFontColor = TempSum
End Function
Синтаксиса е:
SumByFontColor(областта, която искате да съберете; клетка с цвят на шрифта критерий)
Надявам се функцията да бъде полезна!
смятам едни примерни зелени клетки,но винаги ми дава резултат 0,не ми се получава.
Кой от двата кода дава резултат 0? Последния (този от днес) не е за цвят на фона, а за цвят на шрифта, за какъвто попитахте.
да,но при мен не се получава,а само SumByColor работи,но явно не я записвам правилно и всеки път след затварянето на файла изчезва и като го отворя отново я вграждам
Функцията изчезва, вероятно защото не сте съхранила файла като Excel Macro-Enabled Workbook (*.xlsm).
File -> Save As и изберете тип на файла с разширение .xlsm
Дайте снимка на VBA прозореца, в който сте записала функцията, за да видя как изглежда.
Записах я и открих как да я вкарвам в други работни книги,но отново ми дава резултат 0,а задавам клетка-критерии и регион за търсене,но........явно при мен не иска и това си е
Тествах отново функцията в нов файл. При мен работи. С версия Excel 2010 съм и нямам никакви добавки към него. Не се сещам какъв може да е проблема.
Направете скрийншот и го публикувайте тук, за да видя дали няма техническа грешка при изписването на функцията. Също и на лист с данни, които ползвате за теста и как сте изписали функцията във формула бара.
С коя версия на Excel сте?
2016
Когато е включена опцията Option Explicit, задължително трябва да са дефинирани всички променливи, т.е. и променливата MyFontColor.
С включена тази опция и дефинирани всички променливи, функцията е:
''' Option Explicit Function SumByFontColor(MySumRange As Range, CellWithFontColor As Range) As Double Dim c As Range, TempSum As Double, MyFontColor As Double Application.Volatile MyFontColor = CellWithFontColor.Font.Color TempSum = 0 On Error Resume Next For Each c In MySumRange.Cells If c.Font.Color = MyFontColor Then TempSum = TempSum + c.Value End If Next c On Error GoTo 0 Set c = Nothing SumByFontColor = TempSum End Function '''
Надявам се сега всичко да бъде наред!
Не ми се получи изписването на функцията, подредена както трябва....
Втория ред от нея вместо:
Dim c As Range, TempSum As Double
трябва да бъде
Dim c As Range, TempSum As Double, MyFontColor As Double
Всичко е отлично,имам си мечтаната функция-БЛАГОДАРЯ ВИ Прекрасни Хора
Аз също се възползвах от отговорите Ви , за което много , ама много Ви благодаря ! :-) Прекрасни сте ! :-) Бъдете живи и здрави ! :-)