PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelRäkna celler som har både färg och textRäkna celler som har både färg och text
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2019-10-29 09:04
 

 Hej experter

Min chef använder ett exceldokument för att hålla koll på planeringen. När någon är ledig markerar han rutan med gul fyllningsfärg och skriver vad som händer första dagen men vill ej fylla i resten av dagarna för att minska att dokumentet känns klottrigt. Jag önskar att kunna räkna dom dagar som är ifyllda med gul färg OCH har text i sig (kan stå något av 100 olika saker)

Jag för beläggningsstatistik på hans dokument genom att köra =antal.om(a1:a70;"*") men tyvärr räknas dom gula rutorna med orsaken till ledigheten med. Jag kan tyvärr inte dra bort alla gula rutor då dom flesta inte innehåller någon text och inte räknas i statistiken.

Jag använder ett macro som heter CountCellsCyColor (https://www.excelbrevet.se/rakna-cell...). Men när jag använder Macro:t i en antal.omf function får jag det ej att stämma

=ANTAL.OMF('2019'!A3:A70;"*";'2019'!A3:A70;(CountCellsByColor('2019'!A3:A70;$D$2)))

Känns som om jag gjort något stort fel med Macrot (då jag definerar cellerna två ggr bland annat)

Har även testat en =om(och) funktion men utan framgång

=OM(OCH(CountCellsByColor('2019'!A3:A29;$D$2);1;0);(ANTAL.OM('2019'!A3:A29;"*"))*1;0)

 

Tldr: hjälp att räkna endast celler i kolumner med BÅDE en viss färg och vilken text som helst

Nytt inlägg
 2019-10-29 15:57
 

Om jag läser det rätt så summerar ju UDF:en (CountCellsCyColor) cellerna. I Antal.OMF vill du ju titta i varje cell för att se om villkoret uppfylls. Så det går inte.

En variant är att skapa en egen UDF som returnerar matrisen istället för summan. Ett sunk-exempel:

 

Public Function ÄrGul(rMittOmråde As Range) As Integer()

 

Dim rCell As Range

Dim svar() As Integer

Dim Gul As Integer

Dim i As Integer

Dim iRader As Integer

Gul = 6

iRader = rMittOmråde.Rows.Count

ReDim svar(iRader - 1, 0)

 

i = 0

For Each rCell In rMittOmråde

 

    If rCell.Interior.ColorIndex = Gul Then

        svar(i, 0) = 1

    End If

    i = i + 1

Next rCell

ÄrGul = svar

End Function

 

Men det hade ju varit för enkelt om det hade fungerat direkt...

Om du kör på en cell så blir det som man vill:

=ÄrGul(G20)

Om du lägger in den i en summa för ett område så kan du se att den går igenom alla gula.

=SUMMA(ÄrGul(G5:G20))   

Om du trycke på Fx-knappen så ser du att summa får varje värde för sig som en prydlig radda med 1/0. Tyvärr funkar den inte med Antal.om. Det här borde ge samma svar som summan. Men Icke sa nicke.

=ANTAL.OM(ÄrGul(G5:G20);1)

Bahhhhh. Du blir tvungen att använda produktsumma eller Liknande och då funkar inte dina wildcard. Men det här borde ge svaret du vill ha

=PRODUKTSUMMA(ÄrGul(G5:G20)*ÄRTEXT(G5:G20))

Alternativt om man vill hitta ifyllda celler och struntar i om det är siffror eller text:

=PRODUKTSUMMA(ÄrGul(G5:G20)*(G5:G20<>""))

 

PS om du inte litar på attt 6 = gult (jag tror att det är ett färgcheme-nummer som råkar vara gult på min dator) så får du lägga till färghämtningen från CountCellsCyColor

 

Public Function ÄrGul2(rMittOmråde As Range, rFärgexempelcell As Range) As Integer()

....

Gul = rFärgexempelcell.Interior.ColorIndex

'istället för Gul = 6

...

ÄrGul2 = svar

End Function

 

PPS

rMittOmråde.Rows.Count

Bör inte bytas mot 

rMittOmråde.cells.Count

eftersom jag låste arrayen till en kolumn. Om du vill lösa upp den spärren måste du hålla tungan i rätt mun.

Nytt inlägg
 2019-10-31 08:04
 

Tack Ano

Var ute och reste igår därför sen återkoppling

Är övertygad om att din lösning hjälper mig men tyvärr får jag bara #värdefel oavsett vilken variant jag använder av den. Antar att det är något standrad som jag missat eller så är det någon inställning som sklijer våra excel från varandra. Det jag gjorde var att bara kopiera din text rakt av (från public function..... till End function)

Får #värdefel oavsett om jag väljer att anropa en cell eller en hel rad och oavsett om jag använder gul =6 eller anropar en cell

Har du någon gissning på vad som kan vara fel?

Nytt inlägg
 2019-10-31 09:39
 

Nja. Men om excelbrevet's kod funkade så kan du väl bygga om/ihop en av deras funktioner? Typ 

 

Public Function GetCellColorArray(xlRange As Range, cellRefColor As Range) As Variant()

Dim indRow, indColumn As Long

Dim indRefColor As Long

Dim arResults()

Application.Volatile

indRefColor = cellRefColor.Cells(1, 1).Interior.Color

ReDim arResults(0 To xlRange.Rows.Count - 1, 0 To xlRange.Columns.Count - 1)

For indRow = 1 To xlRange.Rows.Count

For indColumn = 1 To xlRange.Columns.Count

If xlRange(indRow, indColumn).Interior.Color = indRefColor Then

arResults(indRow - 1, indColumn - 1) = 1

Else

arResults(indRow - 1, indColumn - 1) = 0

End If

Next

Next

GetCellColorArray = arResults

End Function

 

(jag vet att namnet är helt ologiskt men orkar inte ändra, kör sök&ersätt GetCellColorArray ->ettbättreNamn)

Nytt inlägg
 2019-10-31 09:53
 
 Ändrad av anonymous  på 2019-10-31 10:58:06

Eller. vad tusan. Om du ändå är beroende av VBA så kan du lika gärna kolla om cellen är tom med hjälp av Excelbrevets räknekod CountCellsByColor. Då slipper du hålla på med matriser eller att passa ihop färgvilkoret med ett excelvillkor för "är inte tom"

dvs du lägger på ett AND och utökar villkoret i raden:

If indRefColor = cellCurrent.Interior.Color Then

till

If indRefColor = cellCurrent.Interior.Color And cellCurrent.value <> "" Then

eller om du bara är ute efter text:

If indRefColor = cellCurrent.Interior.Color And Application.IsText(cellCurrent.Value) Then

 

Då blir excelbrevets kod någonting i stil med::

Function CountNonEmptyCellsByColor(rData As Range, cellRefColor As Range) As Long

Dim indRefColor As Long

Dim cellCurrent As Range

Dim cntRes As Long

Application.Volatile

cntRes = 0

indRefColor = cellRefColor.Cells(1, 1).Interior.Color

For Each cellCurrent In rData

    If indRefColor = cellCurrent.Interior.Color And Application.IsText(cellCurrent.Value) Then

          cntRes = cntRes + 1

    End If

Next cellCurrent

CountNonEmptyCellsByColor = cntRes

End Function

 
Nytt inlägg
 2019-10-31 15:07
 
Hej hej. Hur man än gör så kommer man få problem om man vill räkna på färger, detta pga att färger räknas som egenskaper i celler och inte värden. Detta innebär att formler inte uppdateras när färgen ändras. Jag rekommenderar att din chef får en extrakolumn "ledig" där han kan sätta ett kryss. Därefter kan ni lägga på villkorsstytd formatering om han vill ha kvar det gula..

Mvh
Christian
Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelRäkna celler som har både färg och textRäkna celler som har både färg och text

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter