Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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!!!

Anzeige

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

Anzeige
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

Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bereiche aus Excel an VBA Function übergeben


Schritt-für-Schritt-Anleitung

Um eine Excel VBA Funktion zu erstellen, die einen Projektnamen mit einer Liste von Projekten vergleicht und die Bearbeitungszeit summiert, befolge diese Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden VBA Code ein, um die Funktion zu definieren:

    Function Projektzeit(p_name As String, rngProjekt As Range) As Date
       Dim rng As Range
       Dim 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
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. In einer Zelle kannst du die Funktion wie folgt aufrufen:

    =Projektzeit(Oktober!A9, E4:E33)

    Hierbei steht Oktober!A9 für den Projektnamen und E4:E33 für die Projektliste.


Häufige Fehler und Lösungen

  • Fehler: #NAME?

    • Ursache: Die Funktion wurde nicht korrekt im VBA-Editor gespeichert.
    • Lösung: Stelle sicher, dass der Code korrekt eingegeben und das Modul gespeichert wurde.
  • Fehler: Ungültiger Zellbereich

    • Ursache: Der angegebene Zellbereich existiert nicht oder ist falsch definiert.
    • Lösung: Überprüfe die Zellreferenzen in deinem Funktionsaufruf.

Alternative Methoden

Wenn du die Excel VBA Funktion nicht verwenden möchtest, kannst du auch die integrierte Excel Funktion SUMMEWENN nutzen, um ähnliche Ergebnisse zu erzielen:

=SUMMEWENN(E4:E33; Oktober!A9; F4:F33)

Diese Formel summiert die Werte in F4:F33, wenn der entsprechende Wert in E4:E33 mit dem Projektnamen in Oktober!A9 übereinstimmt.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung der Projektzeit Funktion in Excel:

  1. Beispiel 1:

    • Projektname: Oktober!A9 enthält "Projekt A".
    • Projektliste in E4:E33 enthält mehrere Projekte, und die Zeiten in F4:F33 sind die Bearbeitungszeiten.
    • Funktionsaufruf:
      =Projektzeit(Oktober!A9, E4:E33)
  2. Beispiel 2:

    • Wenn du verschiedene Projektlisten hast, kannst du die Funktion anpassen, um unterschiedliche Bereiche zu verwenden.

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Dokumentiere deinen Code mit Kommentaren, um die Wartbarkeit zu erhöhen.
  • Experimentiere mit Debug.Print, um Werte während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einer Funktion und einer Prozedur in VBA?
Eine Funktion gibt einen Wert zurück, während eine Prozedur einfach eine Abfolge von Anweisungen ausführt, ohne einen Wert zurückzugeben.

2. Wie kann ich die Funktion in einer anderen Arbeitsmappe verwenden?
Du musst die Funktion in jedes Modul der jeweiligen Arbeitsmappe kopieren oder die Arbeitsmappe als Add-In speichern und laden.

3. Welche Excel-Version benötige ich?
Diese VBA Funktion kann in Excel 2010 und höheren Versionen verwendet werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige