VBA ile belirli değeri içeren satırı boyamak

Katılım
12 Eylül 2020
Mesajlar
165
Excel Vers. ve Dili
365 ev
belirli bir hücrede, ya da satırın herhangi bir hücresinde "#YOK" yazan satırı kırmızı ile vurgulamak istiyorum, koşullu biçimlendirme ile yapamadım vba ile deneyeyim dedim, paslanmışım sanırım
Kod:
Sheets("pdfkarsan").Select
    Dim i As Integer
    Dim col As Integer
  
    
  
    For i = 2 To 1500
        If Cells(i, 6).Value = "#YOK" Then
            ActiveSheet.Rows(i).Interior.Color = RGB(255, 0, 0)
        End If
    Next i
bu kodda hata nerede?
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,045
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Tüm hücreleri seçin.
Koşullu biçimlendirme / Yeni Kural / ... ... ... formül kullan seçin.
Formül kısmına =EHATALIYSA($F1) formülünü kopyalayın.
Biçimlendirme seçeneklerini seçin Tamamı tıklatarak pencereleri kapatın.
 
Son düzenleme:

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
530
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kodunuz Cells(i, 6).Value ifadesini kullanarak kontrolü 6. sütundaki hücreye yapıyor. "#YOK" değeri farklı bir sütunda ise bu kod satırı atlayacaktır. Kontrol etmeniz gereken hücrenin konumunu doğru şekilde belirtmeniz gerekiyor.
Örnek: "#YOK" değeri A sütunundaysa, kontrolü Cells(i, 1).Value şeklinde yapmalısınız.

Aşağıdaki kodu denermisiniz

Sub Vurgula()

Const kontrolSutunu As Integer = 1

Dim veriAraligi As Range
Set veriAraligi = Sheets("pdfkarsan").Range("A2:A1500")

For Each satir In veriAraligi
If satir.Value = "#YOK" Then
satir.EntireRow.Interior.Color = RGB(255, 0, 0)
Exit For
End If
Next satir

End Sub
 
Katılım
12 Eylül 2020
Mesajlar
165
Excel Vers. ve Dili
365 ev
Kodunuz Cells(i, 6).Value ifadesini kullanarak kontrolü 6. sütundaki hücreye yapıyor. "#YOK" değeri farklı bir sütunda ise bu kod satırı atlayacaktır. Kontrol etmeniz gereken hücrenin konumunu doğru şekilde belirtmeniz gerekiyor.
Örnek: "#YOK" değeri A sütunundaysa, kontrolü Cells(i, 1).Value şeklinde yapmalısınız.

Aşağıdaki kodu denermisiniz

Sub Vurgula()

Const kontrolSutunu As Integer = 1

Dim veriAraligi As Range
Set veriAraligi = Sheets("pdfkarsan").Range("A2:A1500")

For Each satir In veriAraligi
If satir.Value = "#YOK" Then
satir.EntireRow.Interior.Color = RGB(255, 0, 0)
Exit For
End If
Next satir

End Sub
#YOK değeri F sütununda olduğu için cells(i,6) yı kullanıyordum, kod ilk başta çalışıyor, ilk #YOK değerine sahip satırı boyuyor fakat For döngüsünde 2. i ye geçerken mismatch hatası veriyor
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,045
Excel Vers. ve Dili
2019 Türkçe
Formülde "$" işaretini unutmuşum yeniden deneyin.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
530
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Hata Nedeni: Hata, satir.Value ifadesinin veri türünden kaynaklanıyor. veriAraligi bir hücre aralığıdır ve her bir hücrenin değeri farklı bir veri türünde olabilir. Bu durumda, "#YOK" değeri bir metin değeri olabilirken, diğer hücre değerleri sayısal veya başka bir veri türünde olabilir. satir.Value ifadesi, her seferinde farklı bir veri türüyle karşılaştırılmaya çalışıldığında "mismatch" hatasına neden olur.

Çözüm: Bu hatayı çözmek için, satir.Value ifadesinin her seferinde aynı veri türüyle karşılaştırılmasını sağlamanız gerekir

Tüm değerleri metine dönüştürme

For Each satir In veriAraligi
If CStr(satir.Value) = "#YOK" Then
satir.EntireRow.Interior.Color = RGB(255, 0, 0)
Exit For
End If
Next satir

Tavsiyem : Muzaffer Ali hocamızın çözümünü uygulamanız
 
Katılım
12 Eylül 2020
Mesajlar
165
Excel Vers. ve Dili
365 ev
Hata Nedeni: Hata, satir.Value ifadesinin veri türünden kaynaklanıyor. veriAraligi bir hücre aralığıdır ve her bir hücrenin değeri farklı bir veri türünde olabilir. Bu durumda, "#YOK" değeri bir metin değeri olabilirken, diğer hücre değerleri sayısal veya başka bir veri türünde olabilir. satir.Value ifadesi, her seferinde farklı bir veri türüyle karşılaştırılmaya çalışıldığında "mismatch" hatasına neden olur.

Çözüm: Bu hatayı çözmek için, satir.Value ifadesinin her seferinde aynı veri türüyle karşılaştırılmasını sağlamanız gerekir

Tüm değerleri metine dönüştürme

For Each satir In veriAraligi
If CStr(satir.Value) = "#YOK" Then
satir.EntireRow.Interior.Color = RGB(255, 0, 0)
Exit For
End If
Next satir

Tavsiyem : Muzaffer Ali hocamızın çözümünü uygulamanız
Muzaffer Ali hocamızın çözümü bir türlü çalışmıyor, koşullu biçimlendirmeyi en başta denemiştim fakat olmuyor bir türlü
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,045
Excel Vers. ve Dili
2019 Türkçe

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,279
Excel Vers. ve Dili
2007 Türkçe
Muzaffer Ali hocamızın çözümü bir türlü çalışmıyor, koşullu biçimlendirmeyi en başta denemiştim fakat olmuyor bir türlü
Merhaba,
Çözümde bir problem yok.
Sayın Muzaffer Ali'nin çözümünü uyguladığınızda F sütununda hatalı sonuç varsa ilgili aralık renklenecektir.
İsteğiniz sadece #YOK hatalı hücrelerin renklenmesi ise koşullu biçimlendirme formülünü =HATA.TİPİ($F1)=7 şeklinde deneyiniz.
Bu durumda makro kodu da aşağıdaki gibi olabilir.
Kod:
    For i = 2 To 1500
        If IsError(Cells(i, 6)) Then
            If Cells(i, 6) = Evaluate("#N/A") Then
                ActiveSheet.Rows(i).Interior.Color = RGB(255, 0, 0)
            End If
        End If
    Next i
 
Katılım
12 Eylül 2020
Mesajlar
165
Excel Vers. ve Dili
365 ev
Teşekkür ederim ilginize, kod istediğimi yaptı
 
Üst