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.
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
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:
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.
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.)
Daher steht dann in A1:
Vielleicht hat noch jemand einen heißen Tip?
Gruß
Jürgen
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
ebenfalls verwenden, da aus den Spaltenindexzahlen die Spaltenbuchstaben erzeugt werden. Daher lautet dann Dein Makro
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.
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:
oder "verschachtelt":
Gruß
Jürgen
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