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

Letzter Wert des Vormonats ermitteln .....

Letzter Wert des Vormonats ermitteln .....
04.10.2007 22:10:07
proxima05
Hallo,
ich habe mehrere Tabellen, aus denen aus der Spalte E, respektive G der letzte Wert (Zahl) des Vormonats (Datum dazu in Spalte A) herausgelesen werden soll. Realisiert werden soll es über den nachfolgenden Code; dieser zieht mir allerdings nur den Wert des letzten Datum des Vormonats + 1 Tag.
An welcher Stelle muss ich da modifizieren?
Allerbesten Dank
Ralph
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit

Private Sub GetPrevValue_Click()
'Zieltabelle, ZielZeile, ZielSpalte, QuellSpalte, QuellMappe, Tabellenname(n)
GetPrevValuesM Workbooks("Tabelle.xls").Sheets("Summary"), 4, 5, 5, ActiveWorkbook, "ABC"
GetPrevValuesM Workbooks("Tabelle.xls").Sheets("Summary"), 5, 5, 7, ActiveWorkbook, "DEF", "GHI" _
End Sub



Public Sub GetPrevValuesM(Zieltabelle As Worksheet, ZielZeile As Long, ZielSpalte As Integer, _
QuellSpalte As Integer, Quellmappe As Workbook, ParamArray Tabellen() As Variant)
Dim intc As Integer
Dim lngZeileLetzterTagVormonat As Long
'### Parameter:
' ZielTabelle = Tabelle in welche die Werte geschrieben werden
' ZielZeile = Zeile in der die Eintragungen starten
' ZielSpalte = Spalte in welche geschrieben wird
' QuellSpalte = Spalte aus der gelesen wird
' QuellMappe = Mappe die ausgelesen werden soll
' Tabellen() = Name der Tabelle(n) aus welche(r)(n) gelesen werden soll
On Error Resume Next
For intc = 0 To UBound(Tabellen)
lngZeileLetzterTagVormonat = Quellmappe.Sheets(Tabellen(intc)).Cells(65536, 1).End(xlUp).Row
Do While Month(CDate(Quellmappe.Sheets(Tabellen(intc)).Cells(lngZeileLetzterTagVormonat - 1, 1)) _
) 


7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
04.10.2007 22:40:34
Daniel
Hi
kannst du vielleicht mal ne Datei mit ein paar Beispieldaten hochladen, damit man das Makro mal durchtesten kann?
ist ein bisschen weniger anstrengend als den Quellcode so rein theoretisch durchzukauen.
bzw. On Error Resume Next sollte man nie pauschal verwenden, sondern nur an Stellen, wo Fehler ganz bewust erlaubt sind.
Gruß, Daniel

AW: Beispieldatei?
05.10.2007 21:05:27
Gerd
Hi Ralph,
probier mal.

Public Sub GetPrevValuesM(Zieltabelle As Worksheet, ZielZeile As Long, ZielSpalte As Integer, _
QuellSpalte As Integer, Quellmappe As Workbook, ParamArray Tabellen() As Variant)
Dim intc As Integer
Dim lngZeileLetzterTagVormonat As Long
'### Parameter:
' ZielTabelle = Tabelle in welche die Werte geschrieben werden
' ZielZeile = Zeile in der die Eintragungen starten
' ZielSpalte = Spalte in welche geschrieben wird
' QuellSpalte = Spalte aus der gelesen wird
' QuellMappe = Mappe die ausgelesen werden soll
' Tabellen() = Name der Tabelle(n) aus welche(r)(n) gelesen werden soll
'On Error Resume Next  ---- zum Testen besser weglassen!
For intc = 0 To UBound(Tabellen)
lngZeileLetzterTagVormonat = Quellmappe.Sheets(Tabellen(intc)).Cells(65536, 1).End(xlUp).Row
Do While Month(CDate(Quellmappe.Sheets(Tabellen(intc)).Cells(lngZeileLetzterTagVormonat - 1, 1)) _
) = _
Month(CDate(Quellmappe.Sheets(Tabellen(intc)).Cells(65536, 1).End(xlUp).Value))
lngZeileLetzterTagVormonat = lngZeileLetzterTagVormonat - 1
Loop
lngZeileLetzterTagVormonat = lngZeileLetzterTagVormonat - 1
Zieltabelle.Cells(ZielZeile + intc, ZielSpalte + 1).Value = _
Quellmappe.Sheets(Tabellen(intc)).Cells(lngZeileLetzterTagVormonat, QuellSpalte).Value
Next
On Error GoTo 0
End Sub


Gruß Gerd

Anzeige
AW: Letzter Wert des Vormonats ermitteln .....
05.10.2007 21:03:00
Daniel
Hi
du hast in der der Bedingung zu deiner DO-Schleife WHILE und UNTIL verwechselt.
Tausch das mal aus, dann funktionierts.
Besser ist aber dieser Code hier, weil ehr ohne die Suchschleife auskommt, sondern die Excel-funtkon MATCH (in Deutsch: VERGLEICH) nutzt, um die entsprechende Zeilen-Nr zu ermitteln.
Das ist in der Regel schneller als eine Schleife.

Public Sub GetPrevValuesM(Zieltabelle As Worksheet, ZielZeile As Long, ZielSpalte As Integer, _
QuellSpalte As Integer, Quellmappe As Workbook, ParamArray Tabellen() As Variant)
Dim intc As Integer
Dim DatumVormonat As Single
Dim lngZeileLetzterTagVormonat As Long
For intc = 0 To UBound(Tabellen)
DatumVormonat = Quellmappe.Sheets(Tabellen(intc)).Cells(65536, 1).End(xlUp).Value
DatumVormonat = CSng(DateSerial(Year(DatumVormonat), Month(DatumVormonat), 1) - 0.1)
lngZeileLetzterTagVormonat = WorksheetFunction.Match(DatumVormonat, Quellmappe.Sheets( _
Tabellen(intc)).Columns(1), 1)
Zieltabelle.Cells(ZielZeile + intc, ZielSpalte + 1).Value = _
Quellmappe.Sheets(Tabellen(intc)).Cells(lngZeileLetzterTagVormonat, QuellSpalte).Value
Next
End Sub


Gruß, Daniel
PS, nimm das ON ERROR GOTO raus.
der Code muss auch ohne das laufen.!!!

Anzeige
AW: Letzter Wert des Vormonats ermitteln .....
05.10.2007 22:17:20
proxima05
Daniel,
der Code funktioniert rasend schnell .... eine Frage habe ich da noch; wofür steht das "-0.1" in
Month(DatumVormonat), 1) - 0.1)
Besten Dank & Gruß
Ralph

AW: Letzter Wert des Vormonats ermitteln .....
05.10.2007 23:29:00
Daniel
Hi.
das hat mit folgende Ursachen:
- zum einen ist fur Excel ein Datum auch nur eine Zahl, ein Tag hat den Wert 1, dh. ein Datum ist ne Ganzzahl und Uhrzeiten sind die Nachkommastellen
- weiterhin spielt die Funktionsweise der MATCH funktion eine Rolle: (bei 3. Parameter = 1).
Die funkioniert eben so, daß in einer sortierten Liste entweder der genaue Wert gefunden wird, oder wenn der Suchwert nicht in der Liste vorhanden ist, wird der nächstkleinere gefunden.
Daher bilde ich als Suchwert zunhächst den 1. des aktuellen Monats.
Dieser könnte aber in der Liste vorkommen und würde dann gefunden, daher ziehe ich noch 0.1 vom Wert ab und habe somit als Suchwert den letzen Tag des Vormonats (30. /31) spät abends.
Mit diesem Suchwert wird dann auf jeden fall das letze vorhandene Datum des Vormonats gefunden.
Gruß, Daniel

Anzeige
Habe ich verstanden! .... Allerbesten Dank! (owT.)
06.10.2007 14:55:59
proxima05
..

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige