Supportnet / Forum / Tabellenkalkulation
VBA funktion für Excel
Frage
Ich habe mal eine Frage zu diesem Eintrag: https://supportnet.defaqsthread/888
Kann man das ganze auch in Excel (VBA), als individuelle Funktion/Makro hinterlegen?
Grundfrage war diese: https://supportnet.de/threads/1403054
Die Antwort hat mir auch sehr gut geholfen, für eine WENN-Formel, nur diese soll eben jetzt in ein Makro, als individuelle Funktion geschrieben werden.
Schönen Dank schon mal.
Gruß Dongel
[*][quote][sup][i]Admininfo: bitte vermeide Mehrfachanfragen in verschiedenen, bzw. gleichen Gruppen. Siehe [url=https://supportnet.de/groupfaqs/3][u]FAQ2.[/u][/url][/i][/sup][/quote]
Antwort 1 von JoeKe
Hallo Dongel,
möchtest du eine benutzer deffinierte Funktion:
dann dies in ein Standartmodul:
Function sumpro(bereich1 As Range, bereich2 As Range, bereich3 As Range, _
such1 As Range, such2 As Range) As Integer
Dim a As Integer, rng As Range
For Each rng In bereich1
If rng = such1 And Cells(rng.Row, bereich2.Column) = such2 Then
a = a + Cells(rng.Row, bereich3.Column).Value
End If
Next
sumpro = a
End Function
Die Formel "=sumpro" kann über den Formeleditor aufgerufen oder durch direkte Eingabe in ein Zelle genutzt werden.
Es werden die 3 Bereiche für die Berechnung und zwei Bereiche für den Vergleich abgefragt.
Sollen die Werte für den Vergleich direkt in die Formel eingegeben werden und nicht als Zellbezug, dann musst du such1 as range und such2 as range durch such1 as interger und such2 as integer ersetzen.
Als einfaches Makro würde das so funktionieren:
Sub dongel()
Dim loZeile As Long, a As Integer
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)
End If
Next
MsgBox "Summe=" & a
End Sub
Gruß
JöKe
möchtest du eine benutzer deffinierte Funktion:
dann dies in ein Standartmodul:
Function sumpro(bereich1 As Range, bereich2 As Range, bereich3 As Range, _
such1 As Range, such2 As Range) As Integer
Dim a As Integer, rng As Range
For Each rng In bereich1
If rng = such1 And Cells(rng.Row, bereich2.Column) = such2 Then
a = a + Cells(rng.Row, bereich3.Column).Value
End If
Next
sumpro = a
End Function
Die Formel "=sumpro" kann über den Formeleditor aufgerufen oder durch direkte Eingabe in ein Zelle genutzt werden.
Es werden die 3 Bereiche für die Berechnung und zwei Bereiche für den Vergleich abgefragt.
Sollen die Werte für den Vergleich direkt in die Formel eingegeben werden und nicht als Zellbezug, dann musst du such1 as range und such2 as range durch such1 as interger und such2 as integer ersetzen.
Als einfaches Makro würde das so funktionieren:
Sub dongel()
Dim loZeile As Long, a As Integer
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)
End If
Next
MsgBox "Summe=" & a
End Sub
Gruß
JöKe
Antwort 2 von nighty
hi jöke :)
bei einer function sollte das nicht vergessen werden :)
gruss nighty
Application.Volatile
bei einer function sollte das nicht vergessen werden :)
gruss nighty
Application.Volatile
Antwort 3 von JoeKe
Hallo nighty,
stimmt dann klappts auch mit der autoberechnung. ;-)
Gruß
stimmt dann klappts auch mit der autoberechnung. ;-)
Gruß
Antwort 4 von dongel
Sub dongel()
Dim loZeile As Long, a As Integer
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)
End If
Next
MsgBox "Summe=" & a
End Sub
------A---------B--------C
1----2-------210------5.468,00 €
2----3-------220------646.876,00 €
3----1-------230------4.354.354,00 €
4----2-------220------65.464,00 €
5----3-------220------343.218,00 €
6----1-------210------3.213.847,00 €
7----3-------250------1.324.534,00 €
8----1-------210------3.243.754,00 €
9----1-------220------1.321.354,00 €
10---3------210------3.135.437,00 €
11---5------230------4.135.474,00 €
12---6------250------135.434,00 €
13---4------260------354.343,00 €
14---4------260------3.513.743,00 €
Sagen wir mal die Tabelle sieht so aus, muss ich dann an dem o. g. Makro noch was ändern?
Gruß Dongel
Dim loZeile As Long, a As Integer
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)
End If
Next
MsgBox "Summe=" & a
End Sub
------A---------B--------C
1----2-------210------5.468,00 €
2----3-------220------646.876,00 €
3----1-------230------4.354.354,00 €
4----2-------220------65.464,00 €
5----3-------220------343.218,00 €
6----1-------210------3.213.847,00 €
7----3-------250------1.324.534,00 €
8----1-------210------3.243.754,00 €
9----1-------220------1.321.354,00 €
10---3------210------3.135.437,00 €
11---5------230------4.135.474,00 €
12---6------250------135.434,00 €
13---4------260------354.343,00 €
14---4------260------3.513.743,00 €
Sagen wir mal die Tabelle sieht so aus, muss ich dann an dem o. g. Makro noch was ändern?
Gruß Dongel
Antwort 5 von JoeKe
Moin Dongel,
bei so großen Werten muss
a As Integer in a As Long geändert werden.
Und damit auch Nchkommastellen angezeigt werden, ergänze deinen Code so:
Sub dongel()
Dim loZeile As Long, a As Long
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)*100
End If
Next
MsgBox "Summe=" & a/100
End Sub
Gruß
JöKe
bei so großen Werten muss
a As Integer in a As Long geändert werden.
Und damit auch Nchkommastellen angezeigt werden, ergänze deinen Code so:
Sub dongel()
Dim loZeile As Long, a As Long
For loZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(loZeile, 1).Value = 2 And Cells(loZeile, 2).Value = 220 Then
a = a + Cells(loZeile, 3)*100
End If
Next
MsgBox "Summe=" & a/100
End Sub
Gruß
JöKe
Antwort 6 von dongel
Das sieht sehr gut aus und funktioniert auch gut mit meinem Beispiel, aber was muss ich jetzt noch ändern, wenn Spalte A=P, B=O und C=Q ist.
Schönen Dank
Gruß Dongel
Schönen Dank
Gruß Dongel
Antwort 7 von JoeKe
Hallo Dongel,
bei der Cells Methode benötigst du zwei Angaben.
Dabei steht der erste Wert in der Klammer für die Zeile und der zweite für die Spalte.
Cells(1, 1) = A1
Cells(1, 2) = B1
Cells(2, 1) =A2
usw.
Das heißt, wenn du andere Spalten berechnen willst, musst du den zweiten Wert entsprechend bei jeder Cells Anweisung ändern.
Sub dongel()
Dim loZeile As Long, a As Long
For loZeile = 1 To Cells(Rows.Count, 16).End(xlUp).Row
If Cells(loZeile, 16).Value = 2 And Cells(loZeile, 15).Value = 220 Then
a = a + Cells(loZeile, 17)*100
End If
Next
MsgBox "Summe=" & a/100
End Sub
Gruß
Jöke
bei der Cells Methode benötigst du zwei Angaben.
Dabei steht der erste Wert in der Klammer für die Zeile und der zweite für die Spalte.
Cells(1, 1) = A1
Cells(1, 2) = B1
Cells(2, 1) =A2
usw.
Das heißt, wenn du andere Spalten berechnen willst, musst du den zweiten Wert entsprechend bei jeder Cells Anweisung ändern.
Sub dongel()
Dim loZeile As Long, a As Long
For loZeile = 1 To Cells(Rows.Count, 16).End(xlUp).Row
If Cells(loZeile, 16).Value = 2 And Cells(loZeile, 15).Value = 220 Then
a = a + Cells(loZeile, 17)*100
End If
Next
MsgBox "Summe=" & a/100
End Sub
Gruß
Jöke
Antwort 8 von Dongel
Ich danke dir Jöke,
weißt du denn auch wie man dieses jetzt auf eine Schaltfläche bekommt, quasi wie ein Button in Excel wo man nur drauf drücken muss und dann kommt das Ergebnis heraus?
Das wäre jetzt die Krönung.
Schönen Dank.
Gruß Dongel
weißt du denn auch wie man dieses jetzt auf eine Schaltfläche bekommt, quasi wie ein Button in Excel wo man nur drauf drücken muss und dann kommt das Ergebnis heraus?
Das wäre jetzt die Krönung.
Schönen Dank.
Gruß Dongel
Antwort 9 von JoeKe
Moin Dongel,
am einfachsten ist es, wenn du einen Button aus der Symbolleiste "Formular" nimmst. Nachdem du den Button gezeichnet hast wirst du automatisch aufgefordert ihm ein Makro zu zuweisen. Nachdem du dann einmal in dein Blatt geklickt hast, kanst du mit dem Button das Makro ausführen.
Gruß
JöKe
am einfachsten ist es, wenn du einen Button aus der Symbolleiste "Formular" nimmst. Nachdem du den Button gezeichnet hast wirst du automatisch aufgefordert ihm ein Makro zu zuweisen. Nachdem du dann einmal in dein Blatt geklickt hast, kanst du mit dem Button das Makro ausführen.
Gruß
JöKe

