Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Excel VBA: Formel einfügen "Zählenwenn"





Frage

Hallo zusammen, ich möchte über ein Makro automatisch eine "Zählenwenn"-Formel in Zeile 1 bis 100 einfügen lassen. Gezählt werden sollen in der jeweiligen Zeile die Zellen, die Zahlenwerte >6 enthalten. Hierzu habe ich folgende Variablen: lZeilenZaehler --> Durchläuft Zeile 1 bis 100 iSpalteFormel --> Spaltennummer, in der jeweils die Formel stehen soll iSpalteBeginn --> Spaltennummer für Anfang des Bereiches, der geprüft werden soll iSpalteEnde--> Spaltennummer für Ende des Bereiches, der geprüft werden soll Wie sieht der richtige Syntax hierfür aus? so ähnlich wird’s wohl sein.. [code] For ZeilenZaehler=1 to 100 oWSFormeln.cells(lZeilenZaehler, iSpalteFormel).Formula= [b]Zählenwenn(lZeilenZaehler; iSpalteBeginn : lZeilenZaehler; iSpalteEnde; ">6")[/b] Next [/code] Für Eure Hilfe im voraus vielen Dank! Gruß Jürgen

Antwort 1 von coros

Hallo Jürgen,

kurze Nachfrage: Hat das einen Grund, warum die Spalten mit der Spaltenindexnummer und nicht mit Ihrem Spaltenbuchstaben angegeben werden sollen?

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von snailhouse

Hallo Coros,

die Tabelle wird dynamisch aufgebaut, daher kann sich die Spaltennummer ändern und mit Zahlen rechnet sich's leichter.

Gruß
Jürgen

Antwort 3 von coros

Hallo Jürgen,

meinst Du das in etwa so:

strSpalteBeginn = Left(Cells(1, iSpalteBeginn).Address(True, False), _
                InStr(Cells(1, iSpalteBeginn).Address(True, False), "$") - 1)
strSpalteEnde = Left(Cells(1, iSpalteEnde).Address(True, False), _
                InStr(Cells(1, iSpalteEnde).Address(True, False), "$") - 1)

For lZeilenZaehler = 1 To 100
Cells(lZeilenZaehler, iSpalteFormel).FormulaLocal = _
"=Zählenwenn(" & strSpalteBeginn & lZeilenZaehler & _
":" & strSpalteEnde & lZeilenZaehler & ";"">6"")"
Next



MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von snailhouse

Hallo Oliver,

so klappts fast..
Die Formel wird zwar erkannt, aber Excel verwendet dann als zu Prüfenden Bereich die Zeilen (deren Nummern so nicht ganz stimmen, da Zeilennummer und Spaltennummer zu 1er Zahl zusammengesetzt werden.)


Option Explicit
Public Sub test()
Dim lzeilenzaehler As Integer
Dim ispalteformel As Integer
Dim strSpalteBeginn As String
Dim strSpalteEnde As String
ispalteformel = 1
strSpalteBeginn = 2
strSpalteEnde = 4
For lzeilenzaehler = 1 To 100
Cells(lzeilenzaehler, ispalteformel).FormulaLocal = _
"=Zählenwenn(" & strSpalteBeginn & lzeilenzaehler & _
":" & strSpalteEnde & lzeilenzaehler & ";"">6"")"
Next
End Sub


Daher steht dann in A1:
=ZÄHLENWENN(21:41;">6")


Vielleicht hat noch jemand einen heißen Tip?

Gruß
Jürgen

Antwort 5 von coros

Hallo Jürgen,

warum nimmst Du nicht die komplett von mir gepostetetn Zeilen? Du musst die Zeilen


strSpalteBeginn = Left(Cells(1, iSpalteBeginn).Address(True, False), _
                InStr(Cells(1, iSpalteBeginn).Address(True, False), "$") - 1)
strSpalteEnde = Left(Cells(1, iSpalteEnde).Address(True, False), _
                InStr(Cells(1, iSpalteEnde).Address(True, False), "$") - 1)


ebenfalls verwenden, da aus den Spaltenindexzahlen die Spaltenbuchstaben erzeugt werden. Daher lautet dann Dein Makro

Option Explicit
Public Sub test()
Dim lzeilenzaehler As Integer
Dim ispalteformel As Integer
Dim strSpalteBeginn As String
Dim strSpalteEnde As String
ispalteformel = 1
strSpalteBeginn = 2
strSpalteEnde = 4
strSpalteBeginn = Left(Cells(1, iSpalteBeginn).Address(True, False), _
                InStr(Cells(1, iSpalteBeginn).Address(True, False), "$") - 1)
strSpalteEnde = Left(Cells(1, iSpalteEnde).Address(True, False), _
                InStr(Cells(1, iSpalteEnde).Address(True, False), "$") - 1)
For lzeilenzaehler = 1 To 100
Cells(lzeilenzaehler, ispalteformel).FormulaLocal = _
"=Zählenwenn(" & strSpalteBeginn & lzeilenzaehler & _
":" & strSpalteEnde & lzeilenzaehler & ";"">6"")"
Next
End Sub




MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von snailhouse

Hallo Oliver,

stimmt, so funktioniert's. Danke!
Von einem Kollegen habe ich heute noch den Hinweis bekommen, dass es auch so funktioniert:


    sRange = Range(Cells(lZeilenzaehler, iSpalteBeginn), _
                        Cells(lZeilenzaehler, iSpalteEnde)).AddressLocal

    oWS.Cells(lZeilenzaehler, iSpalteFormel).Formula = "=COUNTIF(" &  sRange & ","">6"")"


oder "verschachtelt":

    oWS.Cells(lZeilenzaehler, iSpalteFormel).Formula = "=COUNTIF(" & _
                    Range(Cells(lZeilenzaehler, iSpalteBeginn), Cells(lZeilenzaehler, iSpalteEnde)).AddressLocal & _
                    ","">6"")"


Gruß
Jürgen

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: