Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
204to208
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
204to208
204to208
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

UDF und Array bzw. Matrix

UDF und Array bzw. Matrix
17.01.2003 16:32:31
Rolf, Lgh.
Hallo Excelfreunde,
mal keine Frage, sondern was ich schon lange gesucht und jetzt gefunden habe: Wie kann man mehrere UDF-Teilergebnisse in mehreren Zellen ausgeben:

Die Function:


Option Explicit

Function DATUMDIFF(d1, d2) As Variant
Dim YearDiff As Integer
Dim MonthDiff As Integer
Dim DayDiff As Integer
Dim temp As Date

' Bei Bedarf Argumente tauschen

  If d1 > d2 Then
    temp = d1
    d1 = d2
    d2 = temp
  End If

' Jahre berechnen
  YearDiff = Year(d2) - Year(d1)

  If DateSerial(Year(d2), Month(d1), Day(d1)) > d2 _
     Then YearDiff = YearDiff - 1

' Monate berechnen
  If Month(d2) > Month(d1) Then
    If Day(d2) >= Day(d1) Then
      MonthDiff = Month(d2) - Month(d1)
    Else
      MonthDiff = Month(d2) - Month(d1) - 1
    End If
  Else
    If Day(d2) >= Day(d1) Then
      MonthDiff = Month(d2) - Month(d1) + 12
      If MonthDiff = 12 Then MonthDiff = 0
    Else
      MonthDiff = Month(d2) - Month(d1) + 11
    End If
  End If

' Tage berechnen

  If Day(d2) >= Day(d1) Then
    DayDiff = Day(d2) - Day(d1)
  Else
    DayDiff = Day(DateSerial(Year(d1), _
    Month(d1) + 1, 1) - 1) - Day(d1) + Day(d2)
  End If

' Matrix mit Ergebnissen vorbereiten
  DATUMDIFF = Array(YearDiff, MonthDiff, DayDiff)
End Function

     Code eingefügt mit Syntaxhighlighter 1.13

Nachdem Sie sie in ein Excel-Modul eingegeben haben, steht Ihnen die Funktion "DatumDiff" sowohl in Tabellen als auch in VBA-Prozeduren zur Verfügung. Sie übergeben einfach die beiden Tage, deren Differenz berechnet werden soll und erhalten als Ergebnis eine Matrix mit der Anzahl der Jahre, Monate und Tage. Beachten Sie dabei, dass "DatumDiff" als Matrixformel eingegeben werden muss:

- Markieren Sie drei nebeneinander liegende Zellen.
- Geben Sie die gewünschte Formel ein. Zum Beispiel:
=DateDiff(A1;A2)

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: UDF und Array bzw. Matrix
17.01.2003 17:30:10
Hans W. Hofmann
Sehr lobenswert :-),

dann will ich Dir noch was zum Knobeln geben, damit Du oder Deine Funktion perfekt werden ;-).
Die Funktion stellt z.B. via Application.Caller selber fest, ob sie als Zeilen- oder Spaltenarray benützt wird.

Set f = Application.Caller

Dim't einen entsprechenden Array

If f.Rows.Count > 1 Then
ReDim a(f.Rows.Count, 1)

If f.Columns.Count > 1 Then
ReDim a(1, f.Columns.Count)

und gibt die Ergebnisse passgenau zurück.

DATUMDIFF = a

Spart den Workaround mit TRANS und man muss dem Benutzer keine lange Story aufs Ohr erzählen.
Mach doch mal...

Gruß HW

Anzeige
Re: UDF und Array bzw. Matrix
18.01.2003 10:26:17
Rolf, Lgh.
Hallo Hans,
zum Knobeln habe ich seit Wochen leider keine Zeit mehr. Deine Lösung würde mich aber schon sehr interessieren und für das Archiv wäre es mit Sicherheit auch sinnvoll, wenn Du Deine Lösung postest.
Gruß Rolf

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige