Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Vytvor si funkciu v module VBA projektu, pomocou ktorej zistíš farby pre rozsah buniek: Function CO…
los 23.11.2012 19:43
los
Ano, takto som to uz riesil, takto to aj funguje, no ja by som potreboval vyselektovat rozne bunky (…
slivki 26.11.2012 10:16
slivki
Môžeš si vybrať bunky a definovať pomenovanú oblasť (nemusí byť spojitá), s ktorou potom môžeš normá…
los 26.11.2012 19:51
los
fajn. funguje to presne ako chcem. Vdaka vsetkym za pomoc. poslední
slivki 29.11.2012 10:43
slivki

Vytvor si funkciu v module VBA projektu, pomocou ktorej zistíš farby pre rozsah buniek:

Function COLOR(aRange As Range) As Variant
    Dim aColors() As Variant
    Dim aRow As Integer
    Dim aColumn As Integer
    
    If aRange.Cells.Count = 1 Then
        COLOR = aRange.Interior.ColorIndex
        Exit Function
    End If
    
    ReDim aColors(1 To aRange.Rows.Count, 1 To aRange.Columns.Count)
    For aRow = 1 To aRange.Rows.Count
        For aColumn = 1 To aRange.Columns.Count
            aColors(aRow, aColumn) = aRange.Cells(aRow, aColumn).Interior.ColorIndex
        Next aColumn
    Next aRow
    COLOR = aColors
End Function

Potom môžeš bunky rovnakej farby v nejakej oblasti jednoducho spočítať pomocou funkcie SUMPRODUCT. Napríklad bunky v oblasti C1:C8, ktoré majú farbu ako bunka A1, spočítaš takto:

=SUMPRODUCT((COLOR($C$1:$C$8)=COLOR($A$1))*$C$1:$C$8)

Česky:

SOUČIN.SKALÁRNÍ((COLOR($C$1:$C$8)=COLOR($A$1))*$C$1:$C$8)

P.S.: Ešte dodám, že počítať čokoľvek podľa farby je nesystémové riešenie, ktoré so sebou prináša len problémy. S takým zošitom, kde záleží na farbe buniek, sa nepracuje dobre.

Ano, takto som to uz riesil, takto to aj funguje, no ja by som potreboval vyselektovat rozne bunky (t.j. Nezadavam rozsah, od-do, zadavam konkretne bunky) vie mi s tym niekto pomoct?
Vdaka

P.S. Viem, ze pocitanie na zaklade farby neje to prave, no takto na moje poziadavky to staci, uz iba dotiahnut tento problem..

Môžeš si vybrať bunky a definovať pomenovanú oblasť (nemusí byť spojitá), s ktorou potom môžeš normálne počítať vo vzorcoch.

Druhá možnosť je vytvoriť si pomocné funkcie, ktoré ti vrátia pole hodnôt a pole farieb, ktoré môžeš potom medzi sebou násobiť:

Function COLOR_ARRAY(aRange As Range) As Variant
    Dim aColors() As Variant
    Dim aIndex As Integer
    Dim aCell As Range
    
    ReDim aColors(1 To aRange.Cells.Count)
    aIndex = 1
    For Each aCell In aRange.Cells
        aColors(aIndex) = aCell.Interior.ColorIndex
        aIndex = aIndex + 1
    Next
    COLOR_ARRAY = aColors
End Function

Function VALUE_ARRAY(aRange As Range) As Variant
    Dim aValues() As Variant
    Dim aIndex As Integer
    Dim aCell As Range
    
    ReDim aValues(1 To aRange.Cells.Count)
    aIndex = 1
    For Each aCell In aRange.Cells
        aValues(aIndex) = aCell.Value
        aIndex = aIndex + 1
    Next
    VALUE_ARRAY = aValues
End Function

Vzorec by potom mohol napríklad pre nespojitú oblasť C1:C6;C8 vyzerať takto:

=SUMPRODUCT((COLOR_ARRAY(($C$1:$C$6;$C8))=COLOR($A$1))*VALUE_ARRAY(($C$1:$C$6;$C8)))

Zpět do poradny Odpovědět na původní otázku Nahoru