Supportnet Computer
Planet of Tech

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

Antwort 2 von nighty

hi jöke :)

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ß

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

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

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

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

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

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

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: