Soru Makro İle Koşullu Satır Boyama

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Değerli Üstadlar;

Koşullu biçimlendirmeyi kullanmayı istemediğim için, Aşağıdaki Kod ile satır boyama yapmaktayım. "G:G" gütununda "HAZIR" yazanları boyamakta. Makro sorunsuz çalışıyor ancak örneğin "G4:G15" toplu seçip DELTE ile sildiğimde satırlar hala boyalı kalıyor. Ama tek tek silsem hiç sorun yok çalışıyor. Kurguma nasıl bir ekleme/düzeltme yapmalıyım?

Dosyalarım Ekte.

Makro ile Satır Biçimlendirme.jpg


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
Application.ScreenUpdating = False

If Intersect(Target, [G:G]) Is Nothing Then Exit Sub
Range(Cells(Target.Row, 1), Cells(Target.Row, 17)).Interior.ColorIndex = xlNone


If Range("G" & Target.Row) = "" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 17)).Interior.ColorIndex = xlNone
End If


If Range("G" & Target.Row) = "HAZIR" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 17)).Interior.ColorIndex = 8
End If


Application.ScreenUpdating = True

End Sub
 

Ekli dosyalar

muygun

Özel Üye
Katılım
6 Temmuz 2004
Mesajlar
9,206
Excel Vers. ve Dili
Excel-2003 Türkçe
Merhaba;

Sayfadaki kodları aşağıdaki kodlarla değiştirerek deneyin.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
On Error Resume Next
For i = 1 To Range("g65536").End(xlUp).Row
If Cells(i, "g") = "" Then
Range("a" & i & ":q" & i).Interior.ColorIndex = xlNone
End If
If Cells(i, "g") = "HAZIR" Then
Range("a" & i & ":q" & i).Interior.ColorIndex = 8
End If
Next i
Application.ScreenUpdating = True
End Sub


İyi çalışmalar.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,653
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Set Rng = Intersect(Target, [G:G])
    If Rng Is Nothing Then Exit Sub
    For Each r In Rng
        If r.Value <> "HAZIR" Then
            Cells(r.Row, 1).Resize(, 17).Interior.ColorIndex = xlNone
        Else
            Cells(r.Row, 1).Resize(, 17).Interior.ColorIndex = 8
        End If
    Next r
End Sub
 
Son düzenleme:

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Çok teşekkürler üstadlarım @veyselemre ve @muygun Başka arkadaşlara da faydalı olması dileğiyle :)
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@veyselemre üstadım. Bu kodlar güzel çalışıyor ancak dosyam inanılmaz şişiyor. 500 Satırda 46 mb ları gördüm. Durumları silsemde boyut yine düşmüyor.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Merhaba;

Sayfadaki kodları aşağıdaki kodlarla değiştirerek deneyin.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
On Error Resume Next
For i = 1 To Range("g65536").End(xlUp).Row
If Cells(i, "g") = "" Then
Range("a" & i & ":q" & i).Interior.ColorIndex = xlNone
End If
If Cells(i, "g") = "HAZIR" Then
Range("a" & i & ":q" & i).Interior.ColorIndex = 8
End If
Next i
Application.ScreenUpdating = True
End Sub


İyi çalışmalar.
@muygun hocam boyama işleminde sorun yok ancak silince düzelmiyor malesef.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,736
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif;

"G" sütununu seçip tüm hücrelere HAZIR yazarsanız biraz bekletecektir. Bunun dışında sorun çıkarmadan çalışacaktır.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Veri As Range, Alan As Range
    
    On Error GoTo Son
    
    Application.ScreenUpdating = 0
    Application.EnableEvents = 0
    
    If Not Intersect(Target, Range("G:G")) Is Nothing Then
        If WorksheetFunction.CountA(Intersect(Target, Range("G:G"))) = 0 Then
            Cells(Target.Row, "A").Resize(Target.Rows.Count, 17).Interior.ColorIndex = xlNone
        Else
            For Each Veri In Intersect(Target, Range("G:G"))
                If UCase(Replace(Replace(Veri.Value, "ı", "I"), "i", "İ")) = "HAZIR" Then
                    If Alan Is Nothing Then
                        Set Alan = Cells(Veri.Row, "A").Resize(, 17)
                    Else
                        Set Alan = Union(Alan, Cells(Veri.Row, "A").Resize(, 17))
                    End If
                End If
            Next
            If Not Alan Is Nothing Then Alan.Interior.ColorIndex = 8
        End If
    End If

Son:
    Application.EnableEvents = 1
    Application.ScreenUpdating = 1
End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,653
Excel Vers. ve Dili
Pro Plus 2021
@veyselemre üstadım. Bu kodlar güzel çalışıyor ancak dosyam inanılmaz şişiyor. 500 Satırda 46 mb ları gördüm. Durumları silsemde boyut yine düşmüyor.
Kodlarla alakası olmayan bir durum. Bu sistemle test için bile bir kez kullanmış olduğunuz en son satır dosyanızın usedrange alanını genişletecektir. Dolayısıyla dosyanız büyümüş olacaktır. Yani bir kez 1 milyonuncu satırın g sutununda bir işlem yaparsanız sayfanızın usedrange alanı 1milyon * 17 satır olacaktır. Kodu pasif edip dolu en son satırınızdan en sonuncu satıra kadar satırları silerseniz dosya boyutu düşmesi gerekir, yoksa 500 satırda 52kb oldu ancak.
 
Üst