Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

CountA(Range) Problemchen...

CountA(Range) Problemchen...
16.12.2007 02:01:45
Alex
Hallo excel-vba Freunde,
ich bräuchte mal eine kleine Hilfestellung in folgendem Code:
  • 
    Sub Anzahl()
    Dim myRange As Range
    Dim Zeile As Long
    Dim Spalte As Integer
    Zeile = Worksheets("Datenbank").Range("A65536").End(xlUp).Row
    Worksheets("Datenbank").Select
    For Spalte = 4 To 34
    For i = 2 To Zeile
    Cells(i, 35) = Application.WorksheetFunction.CountA(Range("D" & Spalte & ":AH" &  _
    Spalte))
    Next i
    Next Spalte
    Sheets("Datenbank").Select
    Columns("AI:AI").Copy
    Sheets("Unterschriftenblatt").Select
    Columns("D:D").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Worksheets("Unterschriftenblatt").Select
    End Sub
    



  • Passieren soll folgendes: ich will die Spalten D:AH ZEILENWEISE auf Inhalt überprüfen und dann in die Spalte AI den Wert eintragen lassen, wie viele Zellen mit Inhalt vorhanden sind.
    Allerdings bin ich anscheinend zu doof - um das mit den Schleifen auf die Reihe zu bekommen... hab sogar schon aus Verzweiflung versucht die Cells (Argumente) einzeln einzugeben, allerdings ... max. 30 Arg. möglich... und 1 Monat hat auch mal 31 Tage.... *hmpf*
    Bitte um Hilfe.
    Danke schon mal :)
    Alex S.

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    Tja, abgesehen davon, dass du dir recht...
    16.12.2007 04:41:47
    Luc:-?
    ...irreführende Variablenbezeichnungen ausgedacht hast, Alex,
    ("...der Hund, der ein Pferd war..." oder so ähnlich) und überflüssige Selects verwendest, scheint das formal richtig zu sein... Aber schau'n wa mal...
    Du erhöhst Spalte von 4 bis 34 und nach jeder dieser Erhöhungen i ebenfalls um 1 bis zur letzten benutzten Zeile. In jeder i-Zeile zählst du die Werte der "Spalte"-Zeile in den Spalten D:AH. Damit trägst du beim 1.Mal in Zelle AI2 die Anzahl von D4:AH4 ein. Beim 2.Mal in AI3 ebenfalls D4:AH4 usw bis das ganze Spiel von vorn beginnt und du zum Schluss in genau die gleichen Zellen die Werte von Zeile 34 einträgst... Oh, oh, oh! Da läuft ja wohl was ganz besonders schief... ;-) Ich glaube nämlich nicht, dass du das beabsichtigt hast! So, dann dreh mal alles schön um - vom Kopf wieder auf die Füße -, wähle ordentliche Indizes wie i und j oder r und z oder wie auch immer, nur nicht Spalte für Zeile, auch wenn das 'ne andere Zeile ist. Außerdem könnte hier auch nur eine Schleife mit nur einer Zählvariablen reichen, wenn Spalte immer um 2 > i ist... Aber vielleicht ist ja alles auch ganz anders gemeint...
    Deshalb hat man früher immer das gemacht, was ich dir hier vorexerziert habe - das nennt man Trockentest! Es wäre keinem Programmierer eingefallen, teure Großrechnerzeit mit nicht trocken getesteten Fehlerprogrammen zu vergeuden... Aber der PC macht ja auch das möglich! Der Test findet dann notfalls im Internet statt... ;-)
    Gruß Luc :-?
    PS: Verschachtelte Zyklen (Schleifen) wdn immer von innen nach außen abgearbeitet!

    Anzeige
    warum nimmst Du denn nich gleich Formeln?
    16.12.2007 05:32:00
    Matthias
    Hallo Alex und auch ein "Guten Morgen" an Luc:-?
    Du deklarierst myRange und benutzt diese Variable nicht
    Du deklarierst i nicht und benutzt aber diese Variable.
    Dim i As Long wäre also auch notwendig
    Wenn Du ein Option Explicit vor Deine Sub setzt, wäre Excel das aufgefallen und hätte gemeckert ;o)
    Aber warum nimmst Du eigentlich nicht gleich Formeln in dieser Art:
    
    =WENN(A2"";ANZAHL2(D2:AH2);"")
    


    Ich habe es mal mit eine WennAbfrage erstellt, da Du ja geschrieben hast mal 30, mal 31 Tage
    damit wird eben nur geprüft, ob auch ein Wert in A vorhanden ist.
    oder eben nur

    
    ANZAHL2(D2:AH2)
    


    Userbild
    D1:AH1 sind einfach nur die Spalten und haben hier keine Bedeutung
    damit hättest Du schon alle Zählungen und könntest sogar wieder mit Formeln die Zellen der
    2.Tabelle füllen.
    Userbild
    alles andere hat Luc ja schon gepostet.
    Userbild

    Anzeige
    AW: warum nimmst Du denn nich gleich Formeln?
    16.12.2007 18:07:00
    Alex
    Hallo Luc, Hallo Matthias,
    ja ok, das mit den Variablen, war so eine Sache. Habe ich dann später schon korrigiert, aber was ich immer noch nicht geschafft habe, ist das Problem mit VBA zu lösen, ich will nämlich keine Formeln im Excelsheet stehen haben. Mittels der Formel =ANZAHL2(D2:AH2) kommt auch das richtige raus - nur soll das bei mir mittels vba geschehen und insoweit dynamisch sein, dass es beliebig viele Zeilen sein können, in denen er die Anzahl an Werten liefert.
    Was ich benötige ist ein Code in vba, der mit den Bereich von D:AH dynamisch nach unten (zeilenweise) berechnet und das Ergebnis in die Spalte AI (in die selbe Zeile) einträgt. Ganz ohne Formel in die Zelle einzutragen (weil ich diese mittels clearcontent wieder lösche).
    Wenn ihr mir also bitte kurz begreiflich machen könntet wie ich bei dem
  • Cells(i, 35) = Application.WorksheetFunction.CountA(Range("D" & Spalte & ":AH" & Spalte))

  • Bereich automatisch die Werte berechnen könnte, wäre mir schon sehr geholfen.
    @Luc: warum soll ich Spalte mit Zeile verwechseln? Steh ich auf der Leitung? z.B. D4:AH4 = wohl ein Spaltenbereich oder nicht ?
    Oder anders gefragt, wie gebe ich bei CountA eine Range mittels cells an ? ...CountA(Cells(i,4),cells(i,34)) nimmt mir nämlich nur die aktuelle Zeilennummer i und die beiden Spalte D und AH - nicht aber den Bereich dazwischen... wie schreibe ich das in vba, ich kann soweit ich das durchblickt habe nur Zellen angeben, nicht aber den Bereich dazwischen. Und leider kann ich bei CountA maximal 30 Argumente eingeben... benötigen tue ich aber 31...
    Bin für eure Hilfe dankbar :) (sehe vermutlich den Wald vor lauter Bäumen nicht.... )
    MfG
    Alex S.

    Anzeige
    AW: warum nimmst Du denn nich gleich Formeln?
    16.12.2007 19:47:00
    Uduuh
    Hallo,
    
    wie gebe ich bei CountA eine Range mittels cells an ? 
    


    indem du es auch tust.
    ...CountA(Range(Cells(i,4),cells(i,34)))
    Gruß aus’m Pott
    Udo

    AW: warum nimmst Du denn nich gleich Formeln?
    16.12.2007 20:35:00
    Alex
    Hallo Udo,
    THAT'S IT !!
    oh mein gott, ich wusste, dass es nicht so schwer sein kann....
    vielen, vielen Dank.
    Ich war schon knapp am verzweifeln... aber wie ich schon geschrieben habe... oft sieht man den wald vor lauter bäumen nicht....
    Danke nochmals,
    MfG
    Alex S.

    AW: CountA(Range) Problemchen...
    16.12.2007 20:24:28
    Gerd
    Hallo Alex,
    eine Möglichkeit in beiden Schreibweisen, ungetestet.
    
    Sub Anzahl_A1_Schreibweise()
    Dim lngZeile As Long
    With ThisWorkbook.Worksheets("Datenbank")
    For lngZeile = 2 To .Range("A65536").End(xlUp).Row
    .Range("AI" & lngZeile).Value = _
    Application.WorksheetFunction. _
    CountA(.Range("D" & lngZeile & ":AH" & lngZeile))
    Next lngZeile
    .Columns("AI:AI").Copy
    End With
    With ThisWorkbook.Worksheets("Unterschriftenblatt")
    .Columns("D:D").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    .Select
    End With
    End Sub
    


    
    Sub Anzahl_Cells_Schreibweise()
    Dim lngZeile As Long
    With ThisWorkbook.Worksheets("Datenbank")
    For lngZeile = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
    .Cells(lngZeile, 35).Value = _
    Application.WorksheetFunction. _
    CountA(.Range(Cells(lngZeile, 4), Cells(lngZeile, 34)))
    Next lngZeile
    .Columns(35).Copy
    End With
    With ThisWorkbook.Worksheets("Unterschriftenblatt")
    .Columns(4).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    .Select
    End With
    End Sub
    


    Die Worksheet-Objekte zu referenzieren habe ich jetzt der Übersichtlichkeit halber vergessen.
    Alles klar ? :-)

    Anzeige
    AW: CountA(Range) Problemchen...
    16.12.2007 20:38:00
    Alex
    Hallo Gerd,
    danke für deine Ausführung, aber mit dem Beitrag von Udo hab ich schon alles was ich brauche. Mehr wollte ich gar nicht :D
    hätte einfach ein Wort mehr tippen sollen... Cells(i, 35) = Application.WorksheetFunction.CountA(Range(Cells(i, 4), Cells(i, 34)))
    dann hätte alles so geklappt, wie ich mir das vorgestellt habe.
    MfG
    Alex S.

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige