online 1
gast (50)

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

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon snailhouse vom 26.02.2020, 16:22 Options

Lösung

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

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..

For ZeilenZaehler=1 to 100
oWSFormeln.cells(lZeilenZaehler, iSpalteFormel).Formula=  [b]Zählenwenn(lZeilenZaehler; iSpalteBeginn : lZeilenZaehler; iSpalteEnde; ">6")[/b]
Next


Für Eure Hilfe im voraus vielen Dank!

Gruß
Jürgen


Antwort schreiben

Antwort 1 von coros vom 26.02.2020, 18:50 Options

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 vom 26.02.2020, 19:42 Options

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 vom 26.02.2020, 20:11 Options

Hallo Jürgen,

meinst Du das in etwa so:

[b]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
[/b]



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 vom 26.02.2020, 20:43 Options

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 vom 26.02.2020, 21:48 OptionsLösung

Lösung
Hallo Jürgen,

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


[b]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)
[/b]


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

[b]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

[/b]



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 vom 03.03.2020, 20:03 Options

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

Ähnliche Themen

Wenn-Formel
JoeKe  25.10.2006 - 15887 Hits - 3 Antworten

Summewenn und Zählenwenn mit mehreren Kriterien mit Excel
JoeKe  17.05.2009 - 22591 Hits - 1 Antwort

Erkennen und Zählen von Zellinhalten
CBundy  04.07.2007 - 133 Hits - 3 Antworten

Seitenumbrüche in Excel-sheet einfügen per VBA
snailhouse  06.08.2007 - 47 Hits - 5 Antworten

Excel 2003 - Zählen wenn ungleich 0
Numendil  16.05.2008 - 201 Hits - 9 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026