Girilen sayısal değere göre hücre renklendirme

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Arkadaşlar ekteki dosyada [A:E] sütun aralığına girilecek sayısal değerlere göre hücreleri nasıl renklendirebiliriz. Tabi renklendirme şartlı olacak. Girilen sayısal değerler sıralamaya göre renklendirilecektir.

Soruyu çözecek arkadaşlarımızın formül ve makro kodlarının açıklamalarını yazarak yorumda bulunmaları yeni başlayan arkadaşlarımız için faydalı olacaktır.

Not: Başlangıç aşamasında olan arkadaşlarımızda lütfen yorumlarını belirtsinler.

Kolay gelsin.
 
Katılım
31 Ekim 2005
Mesajlar
62
Excel Vers. ve Dili
İşte : 2000 Tr
Evde : XP Tr
re

aşağıdaki örnekte her hücre değişiminde hücre değerini a1'den e1'e kadar karşılaştırıp eşleşme durumunda 1.satırdaki uygun renk hücre rengi olarak atanmaktadır.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = Range("a1").Value Then Target.Interior.ColorIndex = Range("a1").Interior.ColorIndex
If Target.Value = Range("b1").Value Then Target.Interior.ColorIndex = Range("b1").Interior.ColorIndex
If Target.Value = Range("c1").Value Then Target.Interior.ColorIndex = Range("c1").Interior.ColorIndex
If Target.Value = Range("d1").Value Then Target.Interior.ColorIndex = Range("d1").Interior.ColorIndex
If Target.Value = Range("e1").Value Then Target.Interior.ColorIndex = Range("e1").Interior.ColorIndex

end sub
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Private Sub Worksheet_Change(ByVal Target As Range)

If IsNumeric(Target.Value) And _
Not Intersect(Target, Columns("A:E")) Is Nothing Then _
Target.Interior.ColorIndex = _
Cells(((Target.Value - 1) Mod 5) + 1, "h").Interior.ColorIndex


End Sub



' Girilen değer sayıysa ve A:E aralığında ise
' Color indexini h sütunundaki ilk 5 hücreye göre
' mod 5 yaparak eşitle


Bundan fazla kısaltamadım :mrgreen:
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Verdiğim örnek negatif değerlerde hata verdiği için
şu şekilde modifiye ettim.

Kod:
If IsNumeric(Target.Value) And _
Not Intersect(Target, Columns("A:E")) Is Nothing Then _
Target.Interior.ColorIndex = _
Cells((([COLOR="Red"]IIf(Target.Value < 0, -1, 1) * [/COLOR]Target.Value - 1) Mod 5) + 1, "h").Interior.ColorIndex
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
A&#351;a&#287;&#305;daki kodu sayfan&#305;n kod sayfas&#305;na kopyalamal&#305;y&#305;z. Sorulan soruda en fazla 5 renk i&#231;in s&#305;n&#305;rlama yap&#305;ld&#305;&#287;&#305;ndan bende buna uydum, yani be&#351; renkten fazla ise fazla olan say&#305; i&#231;in renklendirme yap&#305;lmayacakt&#305;r. Kod her yeni veri girildi&#287;inde t&#252;m renklendirmeyi tekrardan yapar.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim sayi As Range
If Intersect(Target, [a:e]) Is Nothing Then Exit Sub
For Each sayi In [a:e].SpecialCells(xlCellTypeConstants, 1)
deg = WorksheetFunction.Rank(sayi, [a:e], 1)
sayi.Interior.ColorIndex = Cells(deg, "h").Interior.ColorIndex
Next
End Sub
 
[B][COLOR=green]1-Hata durumunda kodun &#231;al&#305;&#351;maya devam etmesini sa&#287;lar.[/COLOR][/B]
[B][COLOR=#008000]2-sayi de&#287;i&#351;kenini range yani aral&#305;k olarak tan&#305;mlar[/COLOR][/B]
[B][COLOR=#008000]3-kodun A:E aral&#305;&#287;&#305;nda &#231;al&#305;&#351;mas&#305; sa&#287;lan&#305;r.[/COLOR][/B]
[B][COLOR=#008000]4-A-E aral&#305;&#287;&#305;ndaki sadece say&#305;sal h&#252;creler i&#231;in d&#246;ng&#252; olu&#351;turur.[/COLOR][/B]
[B][COLOR=#008000]5-deg de&#287;i&#351;kenine h&#252;credeki say&#305;n&#305;n A:E aral&#305;&#287;&#305;ndaki s&#305;ra de&#287;erini hesaplar[/COLOR][/B]
[B][COLOR=#008000]6-T&#252;m h&#252;creleri s&#305;ras&#305;na g&#246;re renklendirir.[/COLOR][/B]
[B][COLOR=#008000]7-d&#246;ng&#252; bitimi[/COLOR][/B]
 

İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,104
Excel Vers. ve Dili
Excel, 365 - İngilizce
Sayın leventm müsaade ederlerse,

Hücredeki değeri sildiğimizde beyaz olması amacıyla,

koda;

sayi.Interior.ColorIndex = Cells(deg, "h").Interior.ColorIndex

kodlarından sonra gelmek üzere;

If Intersect(Target, [a:e]) = "" Then Intersect(Target, [a:e]).Interior.ColorIndex = xlNone

kodlarını eklersek iyi olur kanısındayım.

..
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn yurttas rica ederim, ilaveniz kodun eksikli&#287;ini gidermi&#351;tir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Arkada&#351;lar san&#305;r&#305;m sorum yanl&#305;&#351; anla&#351;&#305;ld&#305;. Sn. leventm beyin &#231;&#246;z&#252;m&#252;ne yak&#305;n bir &#231;&#246;z&#252;m olacak fakat renklendirme sat&#305;r baz&#305;nda sabit kalacak. Yani bir sat&#305;ra 5 adet de&#287;er girdik bu de&#287;erler kendi aralar&#305;nda b&#252;y&#252;kten k&#252;&#231;&#252;&#287;e renklendirilecek. Sayfada verdi&#287;im renklendirmeler &#246;rnektir. Yani H s&#252;tununun olmad&#305;&#287;&#305;n&#305; d&#252;&#351;&#252;nerek yan&#305;tlaman&#305;z&#305; rica edece&#287;im.

1. sat&#305;r i&#231;in &#246;rneklersek;

Girilen de&#287;erler;

A1=25 (K&#305;rm&#305;z&#305;)
B1=23 (Pembe)
C1=18 (Sar&#305;)
D1=15 (Lacivert)
E1=10 (Ye&#351;il)
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu durumda kodu a&#351;a&#287;&#305;daki gibi d&#252;zenleyebiliriz. Bu sefer kod sat&#305;r baz&#305;nda d&#252;zenlenmi&#351;tir. Yani A:E s&#252;tununun t&#252;m&#252; de&#287;il sadece veri girilen sat&#305;r kendi aras&#305;nda s&#305;ralanm&#305;&#351;t&#305;r. Yukar&#305;daki koda tek ilave Sn yurttas'&#305;n hat&#305;rlatt&#305;&#287;&#305; gibi veri silindi&#287;inde h&#252;cre renginin kald&#305;r&#305;lmas&#305; ile ilgili sat&#305;rd&#305;r.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim sayi As Range
If Intersect(Target, [a:e]) Is Nothing Then Exit Sub
satir = Target.Row
For Each sayi In Range("a" & satir & ":e" & satir).SpecialCells(xlCellTypeConstants, 1)
deg = WorksheetFunction.Rank(sayi, Range("a" & satir & ":e" & satir), 1)
sayi.Interior.ColorIndex = Cells(deg, "h").Interior.ColorIndex
If Target = "" Then Target.Interior.ColorIndex = xlNone
Next
End Sub
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
&#304;ki veri ayn&#305; olunca renk atl&#305;yor san&#305;r&#305;m 10 10 9 8 7 gibi oldu&#287;u durumda.

=TOPLA.&#199;ARPIM((A2<$A$2:$E$2)/E&#286;ERSAY($A$2:$E$2;$A$2:$E$2&""))+1

form&#252;l&#252; gibi s&#305;ra iki b&#252;y&#252;&#287;ede 1 de&#287;eri verse iyi olur san&#305;r&#305;m
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Levent Bey 10-bo&#351; h&#252;cre-10-9-8 gibi bir durumdada Rank fonksiyonunun sa&#287;l&#305;kl&#305; &#231;al&#305;&#351;mamas&#305; laz&#305;m.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Hata vermiyor, ekli dosyada sizde denemeler yapın, belki benim gözden kaçırdığım bir durum vardır.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Levent Bey anlatmak istedi&#287;im &#246;rnek dosyan&#305;za uygularsak A1'e 10 B1'i bo&#351; b&#305;rakt&#305;k (orayada 10 yaz&#305;labilir) C1'e 10 ve D1 ve E1'e 8 yazd&#305;k.Bu durumda D1 ve E1 renklenmiyor.S&#252;r&#252;kleyip &#231;o&#287;alt&#305;&#287;&#305;nda bu hata daha &#231;ok olu&#351;uyor.10 yaz&#305;l&#305;p sa&#287;a do&#287;ru &#231;ekildi&#287;inde ikinci ve &#252;&#231;&#252;nc&#252; onlar renklenmeyebiliyor.
E&#287;er hatam varsa d&#252;zeltirsiniz.
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Say&#305;n Cost_Control'un ilave a&#231;&#305;klamas&#305;ndan sonra i&#351;yerinde vaktim bulamad&#305;&#287;&#305;m i&#231;in &#246;devimi yeni tamamlayabildim. :mrgreen:

S&#246;z&#252;m meclisten d&#305;&#351;ar&#305;, i&#351; delinin bir kuyuya bir ta&#351; atm&#305;&#351; &#231;&#305;kartabilirsen &#231;&#305;kart pozisyonuna geldi&#287;i i&#231;in soruya ehemmiyetle e&#287;ildim :hihoho:

A&#351;a&#287;&#305;daki kod &#351;u &#351;ekilde &#231;al&#305;&#351;&#305;r.

Se&#231;imin ilgili sat&#305;r&#305;ndaki a:e aras&#305;n&#305; b&#252;y&#252;kten k&#252;&#231;&#252;&#287;e bir diziye s&#305;ralar
E&#287;er ayn&#305; de&#287;er bir ka&#231; s&#252;tunda mevcutsa s&#305;ralamas&#305;na g&#246;re b&#252;y&#252;k varsayar.
Metinleride Alfabetik s&#305;ras&#305;na koyar.

Renklendirmeyi en k&#252;&#231;&#252;k k&#305;rm&#305;z&#305;, s&#305;ras&#305;yla ye&#351;il, mavi, sar&#305; ve en b&#252;y&#252;k pembemsi yapar. H&#252;creye hi&#231;bir&#351;ey girili de&#287;il ise renklendirmez.


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Columns("A:E")) Is Nothing Then Exit Sub

Dim liste(5) As Integer


For derlenen_sutun = 1 To 5

buyukluk = 1
For n = 1 To 5
If Cells(Target.Row, derlenen_sutun).Value > Cells(Target.Row, n) Then buyukluk = buyukluk + 1
Next

eslesme = 1
Do While eslesme = 1
eslesme = 0
For n = 1 To derlenen_sutun - 1
If liste(n) = buyukluk Then
buyukluk = buyukluk + 1
eslesme = 1
End If
Next
Loop

liste(derlenen_sutun) = buyukluk

Next

For n = 1 To 5
If IsEmpty(Cells(Target.Row, n)) Then Cells(Target.Row, n).Interior.ColorIndex = 0 _
Else Cells(Target.Row, n).Interior.ColorIndex = liste(n) + 2
Next

End Sub
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Kuyuya ta&#351; atan deli tabirini kullanman&#305;z hi&#231; ho&#351; olmam&#305;&#351; burada ne kuyuya ta&#351; atan bir deli ne de onu &#231;&#305;karmaya &#231;al&#305;&#351;an birileri var. Buras&#305; payla&#351;&#305;m forumu ve g&#252;n&#252;n sorusu ve alternatif &#231;&#246;z&#252;mler alt&#305;nda en do&#287;rusunu bulmaya &#231;al&#305;&#351;&#305;yoruz.
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
S&#246;z&#252;m meclisten d&#305;&#351;ar&#305; ...
Latife yapt&#305;k Sn.Ali,
Size kar&#351;&#305; oldu&#287;u gibi Sn.Cost_control &#252;stada da sayg&#305;m sonsuz.
Sorunun g&#252;zelli&#287;i kar&#351;&#305;s&#305;nda H&#304;C&#304;V sanat&#305;n&#305; kulland&#305;m sadece.
Ba&#351;ka bir anlam &#231;&#305;kart&#305;rsan&#305;z &#252;z&#252;l&#252;r&#252;m.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Arkadaşlar ekteki açıklamalı örneği incelediğinizde sorumun daha net anlaşılacağı kanısındayım.
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Benim bulabildi&#287;im yegane &#231;&#246;z&#252;m &#351;u &#351;ekildedir.

1. &#304;lgili sat&#305;r&#305;n A:E aras&#305; h&#252;crelerindeki m&#252;kerrer kay&#305;tlardan ar&#305;nm&#305;&#351; benzersiz kay&#305;tlardan olu&#351;an bir L&#304;STE yap
2. &#304;lgili de&#287;erin bu L&#304;STE'deki b&#252;y&#252;kl&#252;&#287;&#252;n&#252; tespit et
3. B&#252;y&#252;kl&#252;&#287;e g&#246;re renk ata

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Columns("A:E")) Is Nothing Then Exit Sub

Dim liste(5) As String
Dim renk(5) As Integer

'Renk Kartelasini Belirleme
renk(0) = 0
renk(1) = 3
renk(2) = 7
renk(3) = 6
renk(4) = 5
renk(5) = 4


'benzersiz kay&#305;tlar&#305;n listesini alma
liste_ata = 1
For n = 1 To 5
If Not IsEmpty(Cells(Target.Row, n)) And IsNumeric(Cells(Target.Row, n)) Then
    mukerrerlik = False
    For nn = 1 To liste_ata - 1
    If liste(nn) = Cells(Target.Row, n).Value Then mukerrerlik = True
    Next
    If Not mukerrerlik Then
    liste(liste_ata) = Cells(Target.Row, n).Value
    liste_ata = liste_ata + 1
    End If
End If
Next

' &#304;lgili de&#287;erin A:E aras&#305;ndaki Buyuklugunu Tespit Et
For n = 1 To 5

    If Not IsNumeric(Cells(Target.Row, n)) Or IsEmpty(Cells(Target.Row, n)) Then
        buyukluk = 0
    Else
        buyukluk = 1
        For nn = 1 To 5
        If Cells(Target.Row, n) < liste(nn) Then buyukluk = buyukluk + 1
        Next
    End If

'&#304;lgili s&#252;tuna ilgili rengi ata
Cells(Target.Row, n).Interior.ColorIndex = renk(buyukluk)

Next

End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Yukarıda vermiş olduğum koddaki rank fonksiyonu hatalı çalışyordu bu sebeple Sn Ali beyin uyarısı ve önerisi doğrultusunda kodu aşağıdaki gibi revize ettim, bu şekilde gayet güzel çalışıyor, Ali beyede önerisi için teşekkür ederim.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [a:e]) Is Nothing Then Exit Sub
satir = Target.Row
For a = 1 To 5
adr = Cells(satir, a).Address
deg = Evaluate("=SUMPRODUCT((" & adr & "<A" & satir & ":E" & satir & ")/COUNTIF(A" & satir & ":E" & satir & ",A" & satir & ":E" & satir & "&""""))+1")
Cells(satir, a).Interior.ColorIndex = Cells(deg, "h").Interior.ColorIndex
If Cells(satir, a) = "" Then Cells(satir, a).Interior.ColorIndex = xlNone
Next
End Sub
 
[B][COLOR=green]1-Hata durumunda kodun çalışmaya devam etmesini sağlar.[/COLOR][/B]
[B][COLOR=#008000]2-kodun A:E aralığında çalışması sağlanır.[/COLOR][/B]
[B][COLOR=#008000]3-satir değişkenine veri girilen hücrenin satır nosu atanır.[/COLOR][/B]
[B][COLOR=#008000]4-A-E aralığındaki sadece sayısal hücreler için döngü oluşturur.[/COLOR][/B]
[B][COLOR=#008000]5-deg değişkenine hücredeki sayının A:E aralığındaki sıra değerini hesaplar ve atar.[/COLOR][/B]
[B][COLOR=#008000]6-Tüm hücreleri sırasına göre renklendirir.[/COLOR][/B]
[B][COLOR=#008000]7-Eğer hücre silinirse renklendirme kaldırılır.[/COLOR][/B]
[B][COLOR=#008000]8-döngü bitimi[/COLOR][/B]
 
Üst