Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bereiche aus Excel an VBA Function übergeben

Bereiche aus Excel an VBA Function übergeben
07.10.2015 11:26:02
Rocheee
Guten Tag zusammen,
ich möchte einen Projektnamen vergleichen mit einer Übersicht von verschiedenen Projekten (Array).
Immer wenn der Projektname mit einer Position im Array übereinstimmt, soll er aus einem anderen Bereich die Bearbeitungszeit holen und auf addieren.
Wollte so die gesamten Stundenzahlen, die in ein Projekt investiert wurden, zusammenzählen. Dazu sollte diese Funktion in einer Zelle in Excel aufgerufen werden.
- p_name = Projektname der im Array gesucht wird
- p_array = verschiedenste Projekte in einer Projektliste
- p_zeit = Bearbeitungszeit des Projekts aus der Projektliste
- p_zeit_ges = Zeit die in der Excelzelle ausgegeben werden soll
### VBA Code:
Function Projektzeit(p_name As String, ByRef p_array() As String, ByRef p_zeit() As Date)
p_zeit_ges As Date
For i = 1 To 31 Step 1
If p_name = p_array(i) Then
p_zeit_ges = p_zeit_ges + p_zeit(i)
End If
Next
End Function

### Aufruf in excel:
=Projektzeit(Oktober!A9 E4:E33 F4:F33)
- Die Zelle Oktober!A9 ist als Standard definiert und enthät den Projektnamen
- E4:E33 ist die Projektliste als Standard definiert
- F4:F33 enthält die Zeiten zu den jeweiligen Elementen aus der Projektliste
Hoffe Ihr könnte einem Neuling helfen.
Vielen Dank!!!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereiche aus Excel an VBA Function übergeben
07.10.2015 12:54:15
ChrisL
Hi
Ich denke du müsstest dein Array als Range deklarieren.
ungetestet:
Function Projektzeit(p_name As String, rngProjekt As Range) As Date
Dim rng As Range, p_zeit_ges As Date
For Each rng In rngProjekt
If p_name = rng Then
p_zeit_ges = p_zeit_ges + rng.Offset(0, 1)
End If
Next rng
Projektzeit = p_zeit_ges
End Function

Ich frage mich allerdings, ob deine Funktion nicht eigentlich eine SUMMEWENN-Formel ist.
cu
Chris

AW: Bereiche aus Excel an VBA Function übergeben
07.10.2015 16:08:27
Rocheee
Hi,
danke für die super schnelle Antwort.
könntest du mir den sagen wie man so eine SUMME-WENN-Funktion aussieht?
ODER
mir deinen Code kommentieren, verstehe z.b. nicht:
- verstehe den "for Each" teil nicht. Die Variable "rng" wird ja garnicht der function übergeben.
- rng.Offset(0,1) nimmt immer den Wert eine Zelle daneben, oder was?
Danke schon mal für deinen Versuch.

Anzeige
AW: Bereiche aus Excel an VBA Function übergeben
07.10.2015 16:41:15
ChrisL
Hi
SummeWenn ist eine normale Formel:
=SUMMEWENN(Bereich;Suchkriterien;SummenBereich)
rng ist die jeweilige Zelle aus dem übergebenen Bereich. Bereich E4:E33, dann
rng = E4
rng.Offset(0,1) = F4
rng = E5
rng.Offset(0,1) = F5
rng = E6
usw.
wie eine For Next Schleife aber halt mit Zellen.
Und ja, Offset Zelle daneben.
cu

AW: Bereiche aus Excel an VBA Function übergeben
08.10.2015 07:51:52
Rocheee
Hiho,
deine Funktion funkioniert, danke schön.
Noch 2 Dinge zu Verständnis, ist mein 5 Tage mit VBA
- So wie ich das verstehe bekommt "rng" aus dem "rngProjekt" den aktuellen Projektnamen, nur wie?
- "Function Projektzeit(p_name As String, rngProjekt As Range) As Date", wieso muss nach dem Range die Klammer dort hin und nicht nach dem "As Date"?
Das "As Date" ist ja die Definition von welchem Datentyp das Array "rngProjekt" ist oder?
Gruß und Dank.

Anzeige
AW: Bereiche aus Excel an VBA Function übergeben
08.10.2015 08:51:28
ChrisL
Hi
rng ist eine Zelle aus dem Bereich rngProjekt. Folgendes Beispiel macht es evtl. deutlich:
Sub t()
Dim Zelle As Range, Bereich As Range
Set Bereich = Range("A1:B2")
For Each Zelle In Bereich
MsgBox Zelle.Address
Next Zelle
End Sub
Eine Funktion gibt im Gegensatz zu einer Prozedur einen Wert zurück. Dieser Wert muss auch deklariert sein.
Beispiel Bereich wird übergeben, Zahl kommt zurück:
Sub t()
MsgBox ZaehleZellen(Range("A1:B2"))
End Sub
Function ZaehleZellen(Bereich As Range) As Integer
Dim Zelle As Range
For Each Zelle In Bereich
ZaehleZellen = ZaehleZellen + 1
Next Zelle
End Function

cu
Chris

Anzeige
AW: Bereiche aus Excel an VBA Function übergeben
08.10.2015 15:19:59
Rocheee
Super, dass die Zeit für einen Anfänger nimmst
Danke, das hilft.
Freundliche Grüße
Rocheee

15 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige