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

Mini-VBA-Befel für Datumsvergleich

Mini-VBA-Befel für Datumsvergleich
01.09.2005 10:25:03
Danikah
Hallo liebe Leute,
ich habe folgendes Problem:
In einer Datei habe ich in einem Tabellenblatt "Daten" in Spalte A je ein Datum stehen.
Genau die gleichen Daten haben auch die Dateireiter der restlichen Tabellenblätter als Name. Also in Blatt "Daten", Spalte A steht z.B.
2004-01
2004-02 usw.
Genauso sind auch die Sheets ( Tabellenblätter ) bezeichnet. Wie bekomme ich nun die zum Datum 2004-01 gehörenden Spalten A-K des Blattes "Daten" in das sheet 2004-01 kopiert? Die Monate wechseln selbstverständlich dauernd. das macht es noch interessanter.
Kann mir jemand dazu helfen, ich würde mich sehr freuen.
Vielen Dank schon im Voraus und viele Grüße,
von Danikah!

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 11:02:17
IngGi
Hallo Danikah,
meintest du so?

Sub kopieren()
Dim rng As Range
For Each rng In Sheets("Daten").Range("A1:A" & Sheets("Daten") _
.Range("A65536").End(xlUp).Row)
If Not IsEmpty(rng) Then
Range(rng, rng.Offset(0, 10)).Copy Destination:=Sheets(rng).Range("A1")
End If
Next 'rng
End Sub
Gruß Ingolf
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 11:45:35
Danikah
Hallo lieber Ingolf,
das sieht grundsätzlich sehr gut aus. Aber er hängt sich immer an dieser Zeile auf:
Range(rng, rng.Offset(0, 10)).Copy Destination:=Sheets(rng).Range("A1")
Warum er das tut- keine Ahnung. Weißt Du weiter?
Danikah
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 12:27:51
IngGi
Hallo Danikah,
versuch's mal so:
Range(rng, rng.Offset(0, 10)).Copy Destination:=Sheets(rng.Value).Range("A1")
Gruß Ingolf
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 13:51:30
Danikah
Hallo Ingolf,
das ist ja echt der Kracher. So wenig Zeilen und es funktioniert! Du hättest mal mein Script sehen sollen...Ich sehe Du kennst Dich aus auf diesem Gebiet. Ich habe da noch ein zweites ( und letztes Problem )
Ich habe im Sheet "Daten" folgendes Muster:
Datum Stück Volumen
2004-01 56 768 Tonne
2004-01 34 789 Tonne
2004-01 87 565 Fass
2004-02 45 567 Tonne
2004-02 45 657 Eimer
Nun wollte ich im Sheet "Gesamt" je nach Monat die einzelnen Kategorien ( Tonne, Faß, Eimer ) je in einer Tabelle für Stück und je in einer Tabelle für Volumen die Werte darstellen. Nur summiert er mir nicht z.B. die Tonnen in 2004-01, sondern stellt alle Werte einzeln dar. Und er sucht nicht Datum und Kategorie ab, sondern nur Datum.Wie kommt das denn? Wie würdest Du das machen? Das wäre ja so ähnlich nur mit Summe und Ziel-Zelle.
Viele Grüße,
Danikah
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:06:33
IngGi
Hallo Danikah,
das würde ich nicht mit einem Makro lösen, sondern mit Matrixformeln. Angenommen deine Beispieltabelle beginnt in Zelle A1. Dann steht z. B. in Zelle B7 für die Stückzahl die Formel
{=SUMME((A1:A5="2004-01")*(D1:D5="Tonne")*(B1:B5))}
und rechts daneben für das Volumen die Formel
{=SUMME((A1:A5="2004-01")*(D1:D5="Tonne")*(C1:C5))}
Und darunter dann die entsprechenden Formeln für die anderen Monate.
Achtung: Matrixformeln – d.h. geschweifte Klammern weglassen und dafür Eingabe abschließen mit Strg+Shift+Eingabe.
Gruß Ingolf
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:57:40
Danikah
Hallo Ingolf,
das mit der Matrix ist eine gute Idee, aber das Datum 2004-01 wird variieren. Er muß also jedes Datum in "Daten" auslesen und zusammenfassen. Das gleiche gilt für Faß & Tonne. Es könnte auch mal zu Flasche&Eimer werden. Deshalb dachte ich an etwas im VBA um es allgemeiner zu haben.
Viele Grüße,
Danikah
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:00:33
Danikah
Hallo Ingolf,
mir fällt gerade zum ersten Problem auf, dass ich immer nur den letzten Wert eines Monats aus Blatt "Daten" in das jeweilige Sheet bekomme. Wenn ein MOnat 100 Werte hat, dann fehlen 99 und nur der letzte wird in das sheet übertragen.
Ich finde den Fehler nicht, denn es heißt ja each range& es müßte doch klappen?
Wenn die Tabelle fertig ist, macvh ich drei Kreuze...
Gruß, Danikah
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:18:51
IngGi
Hallo Danikah,
es werden zwar alle übertragen, aber der Eintrag wird immer überschrieben, so dass am Ende nur der letzte Eintrag stehen bleibt. Da du in deiner Frage als Kopierziel explizit die Zelle A1 für alle Monatsblätter angegeben hast, bin ich davon ausgegangen, dass es nur 1 Eintrag pro Monat gibt. Mehrere Einträge pro Monat werden mit folgendem Makro untereinander geschrieben.

Sub kopieren()
Dim rng As Range
For Each rng In Sheets("Daten").Range("A1:A" & Sheets("Daten") _
.Range("A65536").End(xlUp).Row)
If Not IsEmpty(rng) Then
Range(rng, rng.Offset(0, 10)).Copy
If Sheets(rng).Range("A1") = "" Then
Sheets(rng).Range("A1").PasteSpecial Paste:=xlPasteAll
ElseIf Sheets(rng).Range("A2") = "" Then
Sheets(rng).Range("A2").PasteSpecial Paste:=xlPasteAll
Else
Sheets(rng).Range("A1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
End If
End If
Next 'rng
End Sub
Gruß Ingolf
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:36:43
Danikah
Hallo Ingolf,
es will nicht recht, jetzt bleibt alles bei
If Sheets(rng).Range("A1") = "" Then
hängen.
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 16:02:42
IngGi
Hallo Danikah,
ersetz mal überall "Sheets(rng)" durch "Sheets(rng.Value)".
Gruß Ingolf
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 16:16:23
Danikah
Hallo Ingolf,
jetzt klappt es mit dem Befüllen der Sheets. Ich bin echt begeistert. Ich kenne die Kniffe immer nicht so richtig.Da wär ich wahrscheinlich nie drauf gekommen...
Aber so geht es fehlerfrei und in jeder Lage.
Ich dank Dir auf alle Fälle wie verrückt für die Hilfe.
Wenn Du Lust hast, kannst Du mir für die zweite Sache Tipps geben, will Dich aber nicht überstrapazieren.
Viele Grüße,
Danikah
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
02.09.2005 10:31:13
IngGi
Hallo Danikah,
es hat ein bisschen länger gedauert, war aber auch deutlich komplizierter als die erste Geschichte. Das Makro schreibt dir die Summen pro Monat und Kategorie in eine kleine Tabelle auf dem Tabellenblatt Gesamt, ab Zelle A2.

Option Explicit
Option Base 1
Sub Summieren()
Dim rng As Range
Dim a As Long, i As Long, s As Long, z As Long
Dim Dat() As Long, Zeile As Long
Dim b As Byte
Dim Daten() As String, tmp(4) As String
'Tabelle in Datenfeld einlesen
ReDim Daten(Sheets("Daten").Range("A65536").End(xlUp).Row + 1, 4)
For Each rng In Sheets("Daten").Range("A1:A" & Sheets("Daten") _
.Range("A65536").End(xlUp).Row)
Zeile = Zeile + 1
Daten(Zeile, 1) = rng.Value
Daten(Zeile, 2) = CStr(rng.Offset(0, 1).Value)
Daten(Zeile, 3) = CStr(rng.Offset(0, 2).Value)
Daten(Zeile, 4) = rng.Offset(0, 3).Value
Next 'rng
'Datenfeld mit Bubblesort nach Monaten sortieren
For a = 1 To UBound(Daten, 1) - 1
For i = 1 To UBound(Daten, 1) - 2
If Daten(i + 1, 1) < Daten(i, 1) Then
For b = 1 To 4
tmp(b) = Daten(i, b)
Daten(i, b) = Daten(i + 1, b)
Daten(i + 1, b) = tmp(b)
Next 'b
End If
Next 'i
Next 'a
'Positionen des jeweils ersten Elementes eines Datums in Daten() in Dat() schreiben
z = 1
ReDim Dat(1)
Dat(1) = 1
For s = 1 To UBound(Daten, 1) - 2
If Daten(s, 1) <> Daten(s + 1, 1) Then
z = z + 1
ReDim Preserve Dat(z)
Dat(z) = s + 1
End If
Next 's
ReDim Preserve Dat(z + 1)
Dat(z + 1) = UBound(Daten, 1)
'Datenfeld mit Bubblesort innerhalb der Monate nach Kategorien sortieren
For s = 1 To z
For a = Dat(s) To Dat(s + 1) - 1
For i = Dat(s) To Dat(s + 1) - 2
If Daten(i + 1, 4) < Daten(i, 4) Then
For b = 1 To 4
tmp(b) = Daten(i, b)
Daten(i, b) = Daten(i + 1, b)
Daten(i + 1, b) = tmp(b)
Next 'b
End If
Next 'i
Next 'a
Next 's
'Daten aus Datenfeld aufsummieren und Daten ausgeben
Set rng = Sheets("Gesamt").Range("A2")
s = 1
Do
s = s + 1
If Daten(s, 1) <> Daten(s - 1, 1) Or Daten(s, 4) <> Daten(s - 1, 4) Then
If rng.Offset(0, 1) = "" Then
rng = Daten(s - 1, 1)
rng.Offset(0, 1) = Val(Daten(s - 1, 2))
rng.Offset(0, 2) = Val(Daten(s - 1, 3))
rng.Offset(0, 3) = Daten(s - 1, 4)
Set rng = rng.Offset(1, 0)
Else
rng = Daten(s - 1, 1)
rng.Offset(0, 1) = rng.Offset(0, 1) + Val(Daten(s - 1, 2))
rng.Offset(0, 2) = rng.Offset(0, 2) + Val(Daten(s - 1, 3))
rng.Offset(0, 3) = Daten(s - 1, 4)
Set rng = rng.Offset(1, 0)
End If
Else
rng.Offset(0, 1) = rng.Offset(0, 1) + Val(Daten(s - 1, 2))
rng.Offset(0, 2) = rng.Offset(0, 2) + Val(Daten(s - 1, 3))
End If
Loop Until s = UBound(Daten, 1)
End Sub
Gruß Ingolf
Anzeige
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:36:51
Danikah
Hallo Ingolf,
es will nicht recht, jetzt bleibt alles bei
If Sheets(rng).Range("A1") = "" Then
hängen.
AW: Mini-VBA-Befel für Datumsvergleich
01.09.2005 15:36:58
Danikah
Hallo Ingolf,
es will nicht recht, jetzt bleibt alles bei
If Sheets(rng).Range("A1") = "" Then
hängen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige