как да направя в EXCEL да ми търси данни и стойностти от различни Sheet-ве и да ми ги записва в един отделен Sheet

Microsoft Excel

Добър ден! Интересуваме как мога да направя в 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 сте?

Когато е включена опцията 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

Всичко е отлично,имам си мечтаната функция-БЛАГОДАРЯ ВИ Прекрасни Хора

Аз също се възползвах от отговорите Ви , за което много , ама много Ви благодаря ! :-) Прекрасни сте ! :-) Бъдете живи и здрави ! :-)


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация