Countifs Kodunda Hata

Feylosof

Altın Üye
Katılım
24 Temmuz 2019
Mesajlar
455
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
Değerli Ustalarım iyi akşamlar
Ekli dosyada aşağıdaki kodu çalıştıramadım. Yardımcı olursanız sevinirim.
Kod:
Sub Seviye()

son = Cells(Rows.Count, "B").End(3).Row
    For i = 3 To son
        Range("L2").Value = WorksheetFunction.CountIfs(Split(Cells(i, 2).Value, ".")(0), Range("J2").Value, Range("H3:H" & son), Range("K2").Value)
        
    Next i
End Sub
 

Ekli dosyalar

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
CountIfs fonksiyonu çoklu aralıklar ve koşullar almak için kullanılır, ancak burada doğru şekilde uygulanmamış.
Split fonksiyonu genellikle bir metni ayırmak için kullanılır, ancak burada doğru biçimde kullanılması gerekiyor.
Range("L2")'ye her döngüde değer atanıyor, bu büyük bir veri seti ile çalışırken her seferinde hücreyi güncellemek gereksiz olabilir. Bunun yerine başka bir hücre aralığına yazma düşünülmelidir.

Kod:
Sub Seviye()
    Dim son As Long
    Dim i As Long
    Dim splitValue As String
    Dim countResult As Long
    Dim k2Value As String
    Dim j2Value As Long
    
    son = Cells(Rows.Count, "B").End(xlUp).Row
    
    k2Value = Trim(Range("K2").Value)
    j2Value = Val(Range("J2").Value)

    For i = 3 To son
        If Cells(i, 2).Value <> "" Then 'Hata önleme için boş olup olmadığını kontrol ediyoruz
            splitValue = Split(Cells(i, 2).Value, " ")(0)
        
            countResult = WorksheetFunction.CountIfs( _
                Range("B3:B" & son), splitValue, _
                Range("H3:H" & son), k2Value)
            
            Cells(i, "L").Value = countResult
        End If
    Next i
End Sub
Kodu çalıştırın ve L sütununda her satır için CountIfs sonucu görebilirsiniz.
 
Son düzenleme:

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
Sub Seviye()
    Dim son As Long
    Dim i As Long
    Dim j As Long
    Dim splitValue As String
    Dim countResult As Long
    Dim k2Value As String

    son = Cells(Rows.Count, "B").End(xlUp).Row
    k2Value = Trim(CStr(Range("K2").Value))
    
    
    For i = 3 To son
        If Cells(i, 2).Value <> "" Then
            splitValue = Trim(CStr(Split(Cells(i, 2).Value, ".")(0)))
            
          
            countResult = 0
            For j = 3 To son
                If Trim(CStr(Cells(j, 2).Value)) = splitValue And Trim(CStr(Cells(j, 8).Value)) = k2Value Then
                    countResult = countResult + 1
                End If
            Next j
            
            Debug.Print "Satır: " & i & " | Split Değer: " & splitValue & " | K2 Değeri: " & k2Value & " | Count: " & countResult
            
            Cells(i, 12).Value = countResult '
        End If
        Debug.Print "Satır: " & i & " | B sütunu içeriği: " & Cells(i, 2).Value
    Next i
End Sub
Buradaki en büyük problem, Split fonksiyonunun yalnızca ilk parçayı alması. Yani "9. Sınıf / A Şubesi" değerinden sadece "9" alınıyor, ancak CountIfs fonksiyonu tam eşleşme arıyor!Bu yüzden B sütunundaki veriyle tam olarak uyumlu bir karşılaştırma yapılmıyor, çünkü "9" ile "9. Sınıf / A Şubesi" doğal olarak eşleşmiyor.
 
Son düzenleme:

Feylosof

Altın Üye
Katılım
24 Temmuz 2019
Mesajlar
455
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
Sayın @muhasebeciyiz hocam malesef kod dosyada sonuç vermiyor. Ya da ben çalıştıramıyorum. Sonuç 0(sıfır) çıkıyor. Kodu dosyaya uygulayıp paylaşabilir misiniz zahmet olmazsa eğer?
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
681
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Değerli Ustalarım iyi akşamlar
Ekli dosyada aşağıdaki kodu çalıştıramadım. Yardımcı olursanız sevinirim.
Kod:
Sub Seviye()

son = Cells(Rows.Count, "B").End(3).Row
    For i = 3 To son
        Range("L2").Value = WorksheetFunction.CountIfs(Split(Cells(i, 2).Value, ".")(0), Range("J2").Value, Range("H3:H" & son), Range("K2").Value)
       
    Next i
End Sub
hocam sözel oalrak ne yapmak istediğinizi ifade eder misiniz. Sizin ifadenize göre kod yazılabilir.
 

Feylosof

Altın Üye
Katılım
24 Temmuz 2019
Mesajlar
455
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
hocam sözel oalrak ne yapmak istediğinizi ifade eder misiniz. Sizin ifadenize göre kod yazılabilir.
Ekli dosyaya göre;
J2 de bulunan kritere göre B Sütununda k2 sütunundaki kritere göre H sütununda sayma işlemi sonucunu L2 HÜCRESİNDE gösterecek şekilde bir kod olacak. Yukarıdaki kodum hata veriyor.
Örneğin 10. sınıfların erkek öğrencilerini veya 9. sınıfların kız öğrencilerini saydırmak istiyorum.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
gerek aşağıdaki kodu gerekse ekli dosyayı test edin hangisi hızlı ise onu kullanınız.

Kod:
Sub SeviyeVeCinsiyetSay()
    Dim son As Long
    Dim sinifSeviyesi As String
    Dim cinsiyet As String
    Dim countResult As Long
  
    son = Cells(Rows.Count, "B").End(xlUp).Row
    sinifSeviyesi = Trim(CStr(Split(Range("J2").Value, ".")(0)))
    cinsiyet = Trim(CStr(Range("K2").Value))

    countResult = WorksheetFunction.CountIfs(Range("B3:B" & son), "*" & sinifSeviyesi & "*", Range("H3:H" & son), cinsiyet)

    Range("L2").Value = countResult
End Sub
Deneyimleyiniz
 

Ekli dosyalar

Son düzenleme:

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
681
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Ekli dosyaya göre;
J2 de bulunan kritere göre B Sütununda k2 sütunundaki kritere göre H sütununda sayma işlemi sonucunu L2 HÜCRESİNDE gösterecek şekilde bir kod olacak. Yukarıdaki kodum hata veriyor.
Örneğin 10. sınıfların erkek öğrencilerini veya 9. sınıfların kız öğrencilerini saydırmak istiyorum.
istediğiniz kod
Kod:
Sub SeviyeVeCinsiyetSay()
    Dim seviye As String
    Dim cinsiyet As String
    Dim i As Long, sonSatir As Long
    Dim sayac As Long
    Dim satirSeviye As String
    Dim noktaPozisyonu As Long
    Dim bDeger As String
    
    seviye = Range("J2").Value
    cinsiyet = Range("K2").Value
    sayac = 0
    
    sonSatir = Cells(Rows.Count, "B").End(xlUp).Row
    
    For i = 3 To sonSatir
        bDeger = Cells(i, "B").Value
        If bDeger <> "" And Cells(i, "H").Value <> "" Then
            noktaPozisyonu = InStr(bDeger, ".")
            If noktaPozisyonu > 0 Then
                satirSeviye = Trim(Left(bDeger, noktaPozisyonu - 1))
                If satirSeviye = seviye And Cells(i, "H").Value = cinsiyet Then
                    sayac = sayac + 1
                End If
            End If
        End If
    Next i
    
    Range("L2").Value = sayac
End Sub
 

Feylosof

Altın Üye
Katılım
24 Temmuz 2019
Mesajlar
455
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
istediğiniz kod
Kod:
Sub SeviyeVeCinsiyetSay()
    Dim seviye As String
    Dim cinsiyet As String
    Dim i As Long, sonSatir As Long
    Dim sayac As Long
    Dim satirSeviye As String
    Dim noktaPozisyonu As Long
    Dim bDeger As String
  
    seviye = Range("J2").Value
    cinsiyet = Range("K2").Value
    sayac = 0
  
    sonSatir = Cells(Rows.Count, "B").End(xlUp).Row
  
    For i = 3 To sonSatir
        bDeger = Cells(i, "B").Value
        If bDeger <> "" And Cells(i, "H").Value <> "" Then
            noktaPozisyonu = InStr(bDeger, ".")
            If noktaPozisyonu > 0 Then
                satirSeviye = Trim(Left(bDeger, noktaPozisyonu - 1))
                If satirSeviye = seviye And Cells(i, "H").Value = cinsiyet Then
                    sayac = sayac + 1
                End If
            End If
        End If
    Next i
  
    Range("L2").Value = sayac
End Sub
Hocam çok teşekkür ederim. Bu kod işe yaradı. Emeğinize sağlık
 

Feylosof

Altın Üye
Katılım
24 Temmuz 2019
Mesajlar
455
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
gerek aşağıdaki kodu gerekse ekli dosyayı test edin hangisi hızlı ise onu kullanınız.

Kod:
Sub SeviyeVeCinsiyetSay()
    Dim son As Long
    Dim sinifSeviyesi As String
    Dim cinsiyet As String
    Dim countResult As Long
 
    son = Cells(Rows.Count, "B").End(xlUp).Row
    sinifSeviyesi = Trim(CStr(Split(Range("J2").Value, ".")(0)))
    cinsiyet = Trim(CStr(Range("K2").Value))

    countResult = WorksheetFunction.CountIfs(Range("B3:B" & son), "*" & sinifSeviyesi & "*", Range("H3:H" & son), cinsiyet)

    Range("L2").Value = countResult
End Sub
Deneyimleyiniz
Hocam çok teşekkür ederim. Sonuç verdi. Yorduk sizi hakkınızı helal ediniz lütfen.
 

Korhan Ayhan

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

C++:
Sub Seviye()
    [L2] = WorksheetFunction.CountIfs([B:B], [J2] & "*", [H:H], [K2])
End Sub
 
Üst