Štetje obarvanih celic

Pomoč pri delu z MS Excelom
Odgovori
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Štetje obarvanih celic

Odgovor Napisal/-a bate »

Zdravo
Imam neko tabelo v kateri z makrom obarvam določene celice. Želim, da se na dnu vsake kolone izpiše število obarvanih celic v njej. Ali obstaja rešitev s formulo npr: [if((kolona=barva);seštej;0)]?
lp
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Ne, s formulo tega ne morete narediti. Lahko pa najdete nekaj rešitev in idej v podobnih tematikah tega foruma. Izberite opcijo 'Išči' in kot iskalni niz vpišite 'obarvane'.
lp,
Matjaž Prtenjak
Administrator
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Našel sem tri podobne teme. Vendar VB ne obvladam dovolj, da bi si lahko pomagal. Pač pa sem nekoliko pismen v B.Pascalu. Rešitev sem si zamislil nekako v stilu :

Function
...
var
kolona: array....
vrstica: array....
...
Begin
for vrstica= 10 to 16 do
for kolona=10 to 30 do
if [v celici je barva] then
writeln('obarvanih je: ' stevec);
next
stevec:=0;
next
...
End.

Funkcijo bi vkomponiral kar v makro!?
lepo prosim za pomoč. Bi šlo?
lp Brane
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Spodaj imate napisano funkcijo, ki vam na poljubnem območju prešteje vse celice, ki so obarvane z neko barvo:

Koda: Izberi vse

Option Explicit

'
'   www.matjazev.net
'
'     marec 2009
'
Public Function StejObarvane(Obmocje As Range, barva As Integer)
    Dim celica, stevec
    
    stevec = 0
    For Each celica In Obmocje.Cells
        If (celica.Interior.ColorIndex = barva) Then stevec = stevec + 1
    Next

    StejObarvane = stevec
End Function
Funkcijo uporabite preprosto tako, da v neko celico vpišete:

Koda: Izberi vse

=StejObarvane(A1:A300;46)
Gornja koda vam prešteje vse koliko celic na območju A1:A300 je obarvanih z barvo 46.

Barve morate podajati v obliki številk, ker drugače pač ne more biti. V formuli ne morete pobarvati parametra :). Številko barve najlažje ugotovite tako, da okno Immediate vpišete:

Koda: Izberi vse

print activecell.Interior.ColorIndex
lp,
Matjaž Prtenjak
Administrator
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Heureka! Funkcija, ki ste jo predlagali mi odlično deluje! (kaj pa drugega). Hvala.
Le še barve ne znam ugotoviti s pomočjo IMMEDIATE...
LP
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Če lahko malo pomagam...
Označite celico katere barva ozadja vas zanima in nato v okno IMMEDIATE v VBA okolju skopirajte
print activecell.Interior.ColorIndex
->Enter in napisal se vam bo Index barve ozadja 8)
To je vse!

Če okna IMMEDIATE ne vidite, potem klik na MENU -> Wiew: Immediate Window
lp,

cedra
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Našel! Se zahvaljujem.
lp
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Ups, še nekaj.
To pa je trši oreh. Vsaj zame. Ubadam se cel dan in ne gre...in ne gre.
Zgoraj je opisana funkcija s katero na dnu vsake kolone v neki tabeli štejem obarvane celice. V vsako celico, kjer se izpisuje število obarvanih (zelenih) celic sem skopiral formulo:

=StejObarvane(območje;4).

Ker se podatki spreminjajo, z makrom
{ Razveljavi } počistim celice. Žal pa počistim tudi formulo in zadeva ne deluje več! makro:

Sub Razveljavi
For Each cell In Range ("E36:E42")
cell.Value = ""
Next cell
End sub

Če bi se lahko izpisovalo avtomatsko in sproti...
lp Brane
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Zdravo,
tako sem zakompliciral, da še meni ni čisto jasno. Na kratko:

s formulo: =StejObarvane(e36:e42;4)
kličem funkcijo, ki šteje obarvane (zelene) celice v koloni.
A glej zlomka. Vsakič, ko se število obarvanih celic spremeni, moram formulo vpisati na novo, sicer ostane prejšnji rezulat!
Kaj storiti, da bo delalo sproti ?

Ali lahko funkcijo z opisano formulo kličem iz makra?
Upam, da je moj problem bolje objasnjen.

lp Brane
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Tukaj imate makro za osvežitev formule npr. v celici "F13"

Koda: Izberi vse

Sub Osvezi_formulo()
    Range("F13").FormulaR1C1 = _
        "=PERSONAL.XLS!StejObarvane(R[23]C[-1]:R[29]C[-1],4)"
End Sub
Makro predvideva, da imate formulo v celici "F13" in da imate funkcijo "StejObarvane", shranjeno v PERSONAL.XLS...Če temu ni tako, ustrezno popravite. Makro že upošteva, da se formula nanaša na celice "E36:E42" in da iščete ColorIndex4. Nato pa na pravo mesto, kam pa boste morali ugotoviti sami, v vašem makru napišete samo "Osvezi_formulo", seveda brez narekovajev. In zdaj bi moralo to "špilat" 8)
Makro sem enostavno samo posnel. Bo zdaj šlo?
lp,

cedra
bate
Prispevkov: 127
Pridružen: Če Mar 19, 2009 10:11 am

Odgovor Napisal/-a bate »

Zdravo,
je šlo! Tale "R1C1" mi je dal dihat. Še zdaj ne vem kaj dela, ampak s poskušanjem mi je uspelo. Zdaj zadeva špila kot sem si zamislil.
Hvala Cedra,

lp Brane
Odgovori