Clever-Excel-Forum

Normale Version: Count if
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Servus ein Gutes neues Jahr nochmals

Ich bin am Verzweifeln
mit diesem Code will ich die Formel =ZÄHLENWENN($C3:$T3;H$27) in VBA umsetzen was auch mit der ersten Codezeile
Kontrolle = Application.WorksheetFunction.CountIf(Bereich, Cells(27, Y).Value) fast einwandfrei Funktioniert das fast bedeutet ich weiß nicht warum ich die For next Schleifen brauche
wenn ich diese lösche dann bekomme ich nur Nullen geliefert mit dem könnte ich aber leben

zurück zum Ober Problem bei der nächsten Codezeile Kontrolle2 = Application.WorksheetFunction.CountIf(Bereich2, Cells(27, Y).Value)

Liefert Excel wieder nur nullen ich verstehe das einfach nicht vielleicht kann mir jemand auf die Sprünge helfen die
Mappe hänge ich zum besseren Verständnis an noch was ich weiß dass ich das alles mit der oberen Formel ganz einfach lösen kann aber ich will definitiv VBA und das muß doch zu
machen sein

Danke im Voraus für die Hilfe
Code:
Sub ZaehlenWenn()
ErsteZeile = 3
 LetzteZeile = 20
  ErsteSpalte = 4
   LetzteSpalte = 20
 
 X = 28
 Y = 8
    For Zeile = ErsteZeile To LetzteZeile
      For Spalte = ErsteSpalte To LetzteSpalte
     
             Set Bereich = Range(Cells(Zeile, ErsteSpalte), Cells(Zeile, LetzteSpalte))
             Set Bereich1 = Range(Cells(3, ErsteSpalte), Cells(3, LetzteSpalte))
             Set Bereich2 = Range(Cells(4, ErsteSpalte), Cells(4, LetzteSpalte))
             Set Bereich3 = Range(Cells(5, ErsteSpalte), Cells(5, LetzteSpalte))
            
            
                  '   =ZÄHLENWENN($C3:$T3;H$27)
                  '   =ZÄHLENWENN($C4:$T4;H$27)
            
                     Kontrolle = Application.WorksheetFunction.CountIf(Bereich, Cells(27, Y).Value)
                     Kontrolle2 = Application.WorksheetFunction.CountIf(Bereich2, Cells(27, Y).Value)
                    
                     Cells(Zeile + 25, Spalte + 4) = Kontrolle
                     Cells(Zeile + 26, Spalte + 4) = Kontrolle2
                    
   Y = Y + 1
   X = X + 1
        
        
        
                     Heimspiele = Application.WorksheetFunction.CountIf(Bereich, ">=0")
                     Auswaertsspiele = Application.WorksheetFunction.CountIf(Bereich, "")
                     SpieleSumme = SpieleSumme + Cells(Zeile + 25, 4) + Cells(Zeile + 25, 5)
            
                     Cells(Zeile + 25, 4) = Heimspiele
                     Cells(Zeile + 25, 5) = Auswaertsspiele
                     Cells(Zeile + 25, 6) = SpieleSumme
                     Cells(Zeile + 25, 3) = Cells(Zeile, 3).Value
   

   
   SpieleSumme = 0
   Next Spalte
 Next Zeile
End Sub
Hallo,


hast Du eigentlich schon mal probiert, was Deine Formeln für Ergebnisse bringen?????
Die Formeln sind schon falsch, wie soll das mit VBA besser werden. Vielleicht erläuterst Du mal mit einfachen Worten, was Du eigentlich willst, dann kann man Dir auch helfen. So viel sei schon mal gesagt, der Code ist zwar nicht sehr toll, aber offensichtlich ohne Fehler.

Vielleicht als Tipp dieses:

http://www.online-excel.de/excel/singsel_vba.php?f=4

Es ist nicht unbedingt sinnvoll, so viele Variablen festzulegen, dazu noch in Kurzform und als public!
Servus Edgar

Danke für Deine Antwort

Ja ich habe die Formeln Geprüft und diese bringen absolut das Richtige Ergebnis

Es geht um folgendes zu ermitteln : es sind ja zwei Tabellen in dem Blatt die Obere und die Untere

in der unteren Tabelle wo auch die Formel greift wird gezählt wie oft eine zahl in der oberen Tabelle in jeder Zeile vorhanden ist
jede Zahl darf in der jeweiligen Zeile nur einmal eingetragen sein


ich weiß dass es mit der Formel einfacher wäre aber ich möchte das mit VBA lösen
Hallo Edgar

ich hänge die Mappe nochmals an diesmal mit der Formel im Blatt

und ohne Makros hier sieht man das die Formel Funktioniert und zwar über die ganzen Zeilen und Spalten

Danke
Hallo,



Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'  SpieleZaehlen
    Application.ScreenUpdating = False
  ZaehlenWenn
    Application.ScreenUpdating = True
End Sub

Sub ZaehlenWenn()
ErsteZeile = 3
 LetzteZeile = 20
  ErsteSpalte = 4
   LetzteSpalte = 20
 
 
 X = 28
    For Zeile = ErsteZeile To LetzteZeile
    
    Y = 8
      For Spalte = ErsteSpalte To LetzteSpalte
Servus Edgar,

Kleine Ursache große Wirkung  Du hast mir echt riesig geholfen

mit den beiden Code Zeilen ist mein Problem absolut Top gelößt

und dass nur durch das verschieben der Variablen wär ich nieeeeeeee draufgekommen

Danke




Code:
Sub ZaehlenWenn()
ErsteZeile = 3
 LetzteZeile = 20
  ErsteSpalte = 4
   LetzteSpalte = 20
 
 
    X = 28
    For Zeile = ErsteZeile To LetzteZeile
    Y = 8
    For Spalte = ErsteSpalte To LetzteSpalte

             Set Bereich = Range(Cells(Zeile, ErsteSpalte), Cells(Zeile, LetzteSpalte))
            
                     Kontrolle = Application.WorksheetFunction.CountIf(Bereich, Cells(27, Y).Value)
                     Cells(Zeile + 25, Spalte + 4) = Kontrolle
    Y = Y + 1
                     Heimspiele = Application.WorksheetFunction.CountIf(Bereich, ">=0")
                     Auswaertsspiele = Application.WorksheetFunction.CountIf(Bereich, "")
                     SpieleSumme = SpieleSumme + Cells(Zeile + 25, 4) + Cells(Zeile + 25, 5)
            
                     Cells(Zeile + 25, 4) = Heimspiele
                     Cells(Zeile + 25, 5) = Auswaertsspiele
                     Cells(Zeile + 25, 6) = SpieleSumme
                     Cells(Zeile + 25, 3) = Cells(Zeile, 3).Value
   SpieleSumme = 0
   Next Spalte
 Next Zeile
End Sub
Hallo,

ansonsten wird Y niemals mehr 8!
Servus Edgar

Eigentlich jetzt nach Deiner Aufklärung LOGISCH normal hätte ich selber Draufkommen sollen
Denn die meisten versuche haben  mir zwar Ergebnise geliefert aber immer um eine oder mehrere Spalten nach rechts versetzt
und das war es Variable vor der Schleife und es fängt in jeder Zeile wieder von vorne an ansonsten zählt sie weiter so wie bei mir


Hätte es geholfen wenn ich Y am ende wieder auf Null gesetzt hätte ? muss ich mal versuchen

Danke nochmals man lernt immer wieder dazu