» »

kako v excelu avtomatsko obarvati celice

kako v excelu avtomatsko obarvati celice

dragana ::

Problem je sledeč. Imam stolpec z vrednostmi od 1 do 5(samo cela števila). Kakšno funkcijo naj uporabim, da mi bo vse celice v stolpcu s številko 5 obarvalo rdeče, one s številko 4 v oranžno, 3 v rumeno, 2 v zeleno in 1 v modro?
Še to. Vrednosti v stolpcu so že izračuni funkcije: =IF(AV9>0,8;1;IF(AV9>0,6;2;IF(AV9>0,4;3;IF(AV9>0,2;4;5))))

imagodei ::

Pogojno oblikovanje
- Hoc est qui sumus -

dragana ::

Hvala. Deluje;)

imagodei ::

Ni problema, še kdaj. Je užitek odgovarjat, če ni treba človeku cele procedure spisat, ampak je sposoben potem sam najti/zgooglati do konca. :)
- Hoc est qui sumus -

camalotz2 ::

Res je.
Še tole: če vrednost v polju AV9 (ki je naveden v formuli) nikoli ne preseže vrednosti 1, bi se morda lahko namesto zgornjih vgnezdenih pogojnih stavkov uporabilo naslednjo formulo:
=5-INT(AV9*5-0,01)

foofighter ::

Zdravo, tudi sam imam problem z barvanje celic, le da je moj malo bolj kompliciran:)

Imam tabelo števil ~ 10 stolpcev X 40 vrstic. Rad bi sestavil makro, ki bi v vsaki vrstici poiskal največja 3 števila in jih potem pobarval. Na netu sem uspel izbrskati kodo, ki približno ustreza mojemu problemu, jo malenkost priredil, ampak bi rabil še dodatno pomoč.

Sub Barvaj()
Dim arr(3)
For i = 1 To 3
arr(i) = WorksheetFunction.Large(Selection, i)
Next i
For i = 3 To 1 Step -1
Select Case i
Case 1
colorr = 27
Case 2
colorr = 15
Case 3
colorr = 53
End Select
Set findit = Selection.Find(what:=arr(i))
findit.Interior.ColorIndex = colorr
If WorksheetFunction.CountIf(Selection, arr(i)) > 1 Then
firstadd = findit.Address
Do
Set findit = Selection.Find(what:=arr(i), after:=Range(findit.Address))
findit.Interior.ColorIndex = colorr
Loop Until findit.Address = firstadd
End If
Next i
End Sub

Ta koda načeloma dela in pobarva 3 največja števila v določeni tabeli. Ampak bi moral ročno označevati vsako vrstico in klikati gumb pobarvaj za vsako vrstico posebej. Rad pa bi da je že vnaprej določeno od kje do kje je tabela s podatki, in da se program sam premika od 1. pa do zadnje vrstice in sproti označuje polja.
Problem pri zgornji kodi je tudi ta, da ne upošteva enakih števil. Če imam recimo vrednosti 5,5,4,3.
Bo petici označil z barvo za največje število, štirico z barvo za drugo največje število. Trojke pa ne bo označil, čeprav želim da bi jo označil z barvo za tretje mesto. Predvidevam da je to zaradi casov, pa me zanima katera rešitev bi bila za to bolj primerna.

Upam da mi kdo lahko pomaga:)


LP, Jan

Zgodovina sprememb…

smetko ::

Poizkusi sledečo kodo:
Sub Barvaj()
 Dim arr(3)
 arr(0) = 0
 Dim vrstica, stopnja, j As Integer
    For vrstica = 1 To 40
        Sheets("List1").Activate
        ActiveSheet.Range(Cells(vrstica, 1), Cells(vrstica, 10)).Select
        arr(0) = 0
        stopnja = 1
        j = 1
        Do
            arr(stopnja) = WorksheetFunction.Large(Selection, j)
            If arr(stopnja) <> arr(stopnja - 1) Then
                stopnja = stopnja + 1
            End If
            j = j + 1
        Loop While stopnja <= 3 And Selection.Columns.Count >= j
        For i = stopnja - 1 To 1 Step -1
            Select Case i
            Case 1
                colorr = 27
            Case 2
                colorr = 15
            Case 3
                colorr = 53
            End Select
            Set findit = Selection.Find(what:=arr(i))
            findit.Interior.ColorIndex = colorr
            If WorksheetFunction.CountIf(Selection, arr(i)) > 1 Then
                firstadd = findit.Address
                Do
                    Set findit = Selection.Find(what:=arr(i), after:=Range(findit.Address))
                    findit.Interior.ColorIndex = colorr
                Loop Until findit.Address = firstadd
            End If
        Next i
    Next vrstica
End Sub
No comment

Zgodovina sprememb…

  • spremenilo: smetko ()

foofighter ::

V osnovi dela tako kot sem si zamislil. Bom pa najbrž rabil še nekaj časa da to prilagodim svojemu primeru. :)

Zaenkrat pa sem opazil 2 težavi. Podobno stvar bom uporabljal na isti tabeli tudi za navpično barvanje polj, tako da bi moral vključiti v kodo še da vsa ostala polja pobarva belo, saj mi drugače ostane barva v tistih poljih ki so bila obarvana vodoravno.

Napako pa mi javi tudi v primeru ko je toliko polj z enako vrednostjo da so vsa polja izenačena ali na 1. mestu, ali pa na prvih dveh in ni nobeno na 3. mestu.

Imaš še glede tega kakšno idejo?

Drugače pa hvala za to kodo. Že to mi je ogromno pomagalo.

smetko ::

za
ActiveSheet.Range(Cells(vrstica, 1), Cells(vrstica, 10)).Select
dodaj
Selection.Interior.Pattern = xlNone

Drugo napako sem že predhodno popravil. glej:
Loop While stopnja <= 3 And Selection.Columns.Count >= j
No comment

foofighter ::

Super! Za navpično bom pa sam poskušal spremeniti to kodo. Če se mi kje zatakne pa vprašam.
Vidim da obvladaš te zadeve. Katero gradivo za učenje VB-a bi priporočil?

Najlepša hvala še enkrat.

LP, Jan

smetko ::

Sam sem za učenje VBA uporabil različne vire na internetu. Tako da ti tu težko pomagam.
Je pa pri tem treba ločevati:
VBA (Visual Basic for Application) --> Vgrajen v word,excel,..
VBS(Visual Basic Script) --> skriptni jezik za windows.
VB (Visual Basic) --> Programski jezik za pisanje programov.
No comment


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

vba array

Oddelek: Programiranje
12878 (571) Vazelin
»

[Java - DN] Naključna števila

Oddelek: Šola
121304 (833) nyler
»

[C] - Spreminjanje programa s pointerji

Oddelek: Programiranje
61109 (861) DaMachk
»

C++ fibonacci

Oddelek: Programiranje
61035 (630) lebdim
»

[Excel] problem z makrojem, visual basic (strani: 1 2 )

Oddelek: Programiranje
585478 (4941) steev

Več podobnih tem