DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Sub Hucreleri_Renklendirme()
Dim j As Integer
Dim col As New Collection
Dim rg As Range
Dim hcr As Range
Set rg = Range("A1:A" & Cells(65536, 1).End(xlUp).Row)
On Error Resume Next
For Each hcr In rg.Cells
hcr.Interior.ColorIndex = xlNone
col.Add CStr(hcr), CStr(hcr)
Next
On Error GoTo 0
For Each hcr In rg.Cells
For j = 1 To col.Count
If CStr(hcr) = col.Item(j) Then: Exit For
Next j
If j <= 52 Then
hcr.Interior.ColorIndex = j
End If
Next
Set rg = Nothing
End Sub
Ekteki örnek dosyayı inceleyiniz. Aşağıdaki kodlar, "Sayfa1"in kod bölümüne yazılmıştır.Selamlar
Değerli üstadım.Konu hakkında bizleri aydınlattığınız için teşekkürler....Fakat benim size şöyle bir sorum olacak.Bir sütuna farklı sayıları ayrı ayrı hücrelere yazarken aynı sayıyı yazdığım ikinci hücrede ikisininde tek renk yapmasını nasıl sağlayabiliriz....
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim bul As Range
Dim col As New Collection
[COLOR=darkgreen] 'Eğer veri girilen hücre A sütunundaysa[/COLOR]
If Not Intersect(Target, [A:A]) Is Nothing Then
[COLOR=darkgreen] 'Eğer veri girilen hücrenin değeri boşsa;[/COLOR]
'Yani silme işlemi yapıldıysa
If Target.Text = Empty Then
Selection.Interior.ColorIndex = xlNone
Call Hucreleri_Renklendirme
Exit Sub
End If
[COLOR=darkgreen] 'Sütunda kullanılan tüm renklerin toplanması[/COLOR]
On Error Resume Next
For i = 1 To Cells(65536, 1).End(xlUp).Row
col.Add CStr(Cells(i, 1).Interior.ColorIndex), CStr(Cells(i, 1).Interior.ColorIndex)
Next i
On Error GoTo 0
[COLOR=darkgreen] 'Girilen veri, A sütunda aranır[/COLOR]
Set bul = Columns(1).Find(Target, LookAt:=xlWhole, After:=Range("A65536"), LookIn:=xlValues)
[COLOR=darkgreen] 'Girilen veri A sütununda daha önceden varsa ...[/COLOR]
If Not bul Is Nothing And bul.Address <> Target.Address Then
Target.Interior.ColorIndex = bul.Interior.ColorIndex
[COLOR=darkgreen] 'Yoksa[/COLOR]
Else
If col.Count = 0 Then
Target.Interior.ColorIndex = 2
Else
For j = 2 To 52
For i = 1 To col.Count
If j = col.Item(i) Then: x = x + 1
Next i
If x = 0 Then
Target.Interior.ColorIndex = j
Exit For
Else
x = 0
Target.Interior.ColorIndex = xlNone
'yani renklendirme yapılamıyor
End If
Next j
End If
End If
End If
Set bul = Nothing
End Sub
[COLOR=darkgreen]'----------------------------------------[/COLOR]
Private Sub Hucreleri_Renklendirme()
Dim j As Integer
Dim col As New Collection
Dim rg As Range
Dim hcr As Range
Set rg = Range("A1:A" & Cells(65536, 1).End(xlUp).Row)
On Error Resume Next
For Each hcr In rg.Cells
hcr.Interior.ColorIndex = xlNone
col.Add CStr(hcr), CStr(hcr)
Next
On Error GoTo 0
For Each hcr In rg.Cells
For j = 1 To col.Count
If CStr(hcr) = col.Item(j) Then: Exit For
Next j
If j < 52 Then
hcr.Interior.ColorIndex = j + 1
ElseIf j = 52 Then
hcr.Interior.ColorIndex = j
End If
Next
Set rg = Nothing
End Sub
Collection nesnesini, bir sepet olarak düşünün. (Baya bildiğiniz sazlardan yapılmış otantik bir sepet, farklı bir anlam çıkarmayın) . Bu sepet öyle bir sepet ki, içine attığınız şeylerin herbirinden sadece bir tane olmalı... Eğer aynı şeyi bir daha atmaya kalkarsanız, kabul etmeyecektir.Değerli arkadaşım,
yazdığınız makroda aşağıdaki komutlar bana yabancı. ne işe yaradıkları hakkında bilgi yazarsanız sevinirim. Teşekkürler..
Dim col As New Collection
col.Add CStr(hcr), CStr(hcr)
fakat girmiş olduğum değerlerin hepsi renkleniyor...Bir değer girsem farklı renk alıyor...Dolayısıyla benim için karmaşıklığa yol açıyor...Sadece girilen iki veya daha fazla aynı değerin renkenmesini nasıl yapabiliriz....Ekteki örnek dosyayı inceleyiniz. Aşağıdaki kodlar, "Sayfa1"in kod bölümüne yazılmıştır.
Kod:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer Dim j As Integer Dim x As Integer Dim bul As Range Dim col As New Collection [COLOR=darkgreen] 'Eğer veri girilen hücre A sütunundaysa[/COLOR] If Not Intersect(Target, [A:A]) Is Nothing Then [COLOR=darkgreen] 'Eğer veri girilen hücrenin değeri boşsa;[/COLOR] 'Yani silme işlemi yapıldıysa If Target.Text = Empty Then Selection.Interior.ColorIndex = xlNone Call Hucreleri_Renklendirme Exit Sub End If [COLOR=darkgreen] 'Sütunda kullanılan tüm renklerin toplanması[/COLOR] On Error Resume Next For i = 1 To Cells(65536, 1).End(xlUp).Row col.Add CStr(Cells(i, 1).Interior.ColorIndex), CStr(Cells(i, 1).Interior.ColorIndex) Next i On Error GoTo 0 [COLOR=darkgreen] 'Girilen veri, A sütunda aranır[/COLOR] Set bul = Columns(1).Find(Target, LookAt:=xlWhole, After:=Range("A65536"), LookIn:=xlValues) [COLOR=darkgreen] 'Girilen veri A sütununda daha önceden varsa ...[/COLOR] If Not bul Is Nothing And bul.Address <> Target.Address Then Target.Interior.ColorIndex = bul.Interior.ColorIndex [COLOR=darkgreen] 'Yoksa[/COLOR] Else If col.Count = 0 Then Target.Interior.ColorIndex = 2 Else For j = 2 To 52 For i = 1 To col.Count If j = col.Item(i) Then: x = x + 1 Next i If x = 0 Then Target.Interior.ColorIndex = j Exit For Else x = 0 Target.Interior.ColorIndex = xlNone 'yani renklendirme yapılamıyor End If Next j End If End If End If Set bul = Nothing End Sub [COLOR=darkgreen]'----------------------------------------[/COLOR] Private Sub Hucreleri_Renklendirme() Dim j As Integer Dim col As New Collection Dim rg As Range Dim hcr As Range Set rg = Range("A1:A" & Cells(65536, 1).End(xlUp).Row) On Error Resume Next For Each hcr In rg.Cells hcr.Interior.ColorIndex = xlNone col.Add CStr(hcr), CStr(hcr) Next On Error GoTo 0 For Each hcr In rg.Cells For j = 1 To col.Count If CStr(hcr) = col.Item(j) Then: Exit For Next j If j < 52 Then hcr.Interior.ColorIndex = j + 1 ElseIf j = 52 Then hcr.Interior.ColorIndex = j End If Next Set rg = Nothing End Sub