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

Nach heutigem Datum suchen

Nach heutigem Datum suchen
Daniel
Hallo,
ich suche nach einem Makro, dass mir in verschiedenen Tabellen (Tabelle1 bis Tabelle4) jeweils in Spalte A nach dem heutigen datum sucht und sich jeweils die Zeilenzahl merkt, damit ich auf diese in einem weiteren Schritt zugreifen kann.
danke für Hilfe,
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
Sub FindeDaten() Dim i As Integer Dim c As Range Dim Zeile(1 To 4) As Long For i = 1 To 4 With Sheets("Tabelle" & i) Set c = .Range("A:A").Find(What:=Date) If c Is Nothing Then Zeile(i) = 0 Else Zeile(i) = c.Row End If End With Next i 'Zur Demo: For i = 1 To 4 Debug.Print Zeile(i) Next i End Sub
Gruß Matthias
AW: Nach heutigem Datum suchen
benjamin
Hi,
oder mit suchen:
Sub Makro3() Dim inttest As Integer Columns("A:A").Select inttest = Selection.Find(What:=Date).Row End Sub
Gruß Benjamin
AW: Nach heutigem Datum suchen
Daniel
Hallo Matthias,
danke für die schnelle Hilfe.
Wie mache ich das ohne eine For... Schleife, da meine Blätter bestimmte Namen haben?
Die Zeile brauche ich deshalb, weil ich im Anschluss Summen über die Zellen dieser Zeilen (z.B. B10 des 1. Blattes + B23 des 2. Blattes) berechnen möchte.
Kann ich dann darauf zurückgreifen?
Danke,
Daniel
Anzeige
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
das ginge auch mit Formeln:
 
 A
1182
253
30
4100
5335
Formeln der Tabelle
A1 : =WENN(ISTNV(SVERWEIS(HEUTE();Tabelle1!A:B;2;FALSCH));0;SVERWEIS(HEUTE();Tabelle1!A:B;2;FALSCH))
A2 : =WENN(ISTNV(SVERWEIS(HEUTE();Tabelle2!A:B;2;FALSCH));0;SVERWEIS(HEUTE();Tabelle2!A:B;2;FALSCH))
A3 : =WENN(ISTNV(SVERWEIS(HEUTE();Tabelle3!A:B;2;FALSCH));0;SVERWEIS(HEUTE();Tabelle3!A:B;2;FALSCH))
A4 : =WENN(ISTNV(SVERWEIS(HEUTE();Tabelle4!A:B;2;FALSCH));0;SVERWEIS(HEUTE();Tabelle4!A:B;2;FALSCH))
A5 : =SUMME(A1:A4)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
ansonsten kannst du das Blatt auch über den Index ansprechen:

With Sheets(i)

Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
Hi,
das Problem ist, dass ich das für Spalten von B- K machen möchte und dann überall Formeln stehen zu haben finde ich nicht gerade "sauber". V.a. weil - wenn du dich an letzte Woche- erinnerst, die Daten ständig aktualisiert werden.
Grüße,
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
Wenn nicht nach dem Blattindex, dann evtl. noch so:

Sub FindeDaten()
Dim i As Integer
Dim c As Range
Dim Zeile(0 To 3) As Long
Dim Blatt()
'Blattnamen:
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4")
For i = 0 To 3
With Sheets(Blatt(i))
Set c = .Range("A:A").Find(What:=Date)
If c Is Nothing Then
Zeile(i) = 0
Else
Zeile(i) = c.Row
End If
End With
Next i
'Zur Demo:
For i = 0 To 3
Debug.Print Zeile(i)
Next i
End Sub

Kommt halt darauf an, wie die Blätter zu benennen sind.
Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
Ok,
und WIE greife ich nun im weiteren Schritt auf diese Zeilen zu?
Wenn ich sagen will: X = B(Zeile Blatt1) + B(Zeile Blatt2) usw.
Gruß
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
in der gleichen Prozedur:

'Summe:
Dim Summe
Summe = 0
For i = 0 To 3
Debug.Print Zeile(i)
If Zeile(i) > 0 Then Summe = Summe + Sheets(Blatt(i)).Cells(Zeile(i), 2)
Next i
MsgBox Summe

ODER:
du merkst schreibst direkt die Zellen als Range in das Array:

Sub FindeDaten()
Dim i As Integer
Dim c As Range
Dim Zelle(0 To 3) As Range
Dim Blatt()
Dim Summe As Double
'Blattnamen:
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4")
For i = 0 To 3
With Sheets(Blatt(i))
Set Zelle(i) = .Range("A:A").Find(What:=Date)
End With
Next i
'Summe:
Summe = 0
For i = 0 To 3
If Not Zelle(i) Is Nothing Then
Summe = Summe + Zelle(i).Offset(0, 1).Value 'Spalte B
End If
Next i
MsgBox Summe
End Sub

Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
Und mit diesem Bereich
If Not Zelle(i) Is Nothing Then
Summe = Summe + Zelle(i).Offset(0, 1).Value 'Spalte B
wird die Summe über all die Zellen der Blätter berechnet?
Und wenn ich die Zahl der Blätter erhöhen will ändere ich einfach auf i = 0 to 10, oder?
Wenn ich nun den Wert von Summe in das Blatt "Gesamtauswertung", Spalte B schreiben will. Wie mache ich das, wenn ich das Ergebnis dabein in die nächste freie Zeile schreiben will. Sorry, bin echt ein Anfänder in vba.
Aber danke für die abermals nette Hilfe,
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,

Sub FindeDaten()
Dim i As Integer
Dim Blatt()
Dim Zelle() As Range
Dim Summe As Double
'Blattnamen (kann erweitert werden):
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")
'ZellenArray redimensionieren, je nach Anzahl der Blätter:
ReDim Zelle(0 To UBound(Blatt)) As Range
'Array Zellen() füllen:
For i = 0 To UBound(Blatt)
With Sheets(Blatt(i))
Set Zelle(i) = .Range("A:A").Find(What:=Date)
End With
Next i
'Summe ermitteln:
Summe = 0
For i = 0 To UBound(Blatt)
If Not Zelle(i) Is Nothing Then
Summe = Summe + Zelle(i).Offset(0, 1).Value 'Spalte B: von A aus 1 nach rechts
End If
Next i
'Summe in Tabelle eintragen:
Dim lz As Long
With Sheets("Gesamtauswertung")
lz = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(lz, 2) = Summe
End With
End Sub

Man kann eigentlich die Summe gleich in der ersten Schleife aufaddieren, nur dein anfänglicher Wunsch war ja, erstmal die Zeilennummern beisammen zu haben.
Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Matthias
Hallo nochmal,
Man kann eigentlich die Summe gleich in der ersten Schleife aufaddieren...
also praktisch so:

Sub FindeDaten()
Dim Blatt()
Dim Summe As Double
Dim bl
Dim z As Range
'Blattnamen (kann erweitert werden):
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")
'Spalte A aller Blätter durchsuchen und in B liegende Werte addieren
For Each bl In Blatt
Debug.Print bl
Set z = Sheets(bl).Range("A:A").Find(What:=Date)
If Not z Is Nothing Then Summe = Summe + z.Offset(0, 1).Value
Next bl
'Summe in Tabelle eintragen:
Dim lz As Long
With Sheets("Gesamtauswertung")
lz = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(lz, 2) = Summe
End With
End Sub

Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
ok, verstehe.
Kann man das mit dem Summe in Tabelle eintragen auch gleich nach der Summenermittlung machen?
Wenn ich nun das Ganze von B-K machen will wird das ja ziemlich unübersichtlich.
Ich würde nun den unteren Teil x macl kopieren und alles manuell abändern, aber ich denke es gibt bessere Lösungen.
Oh man....tut mir Leid, dass ich immer mit was Neuem komme. Ende des jahres will ich dann auch endlich VBA selbst lernen.
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
ich hoffen, du lernst jetzt auch was ;-)
OK, also jetzt ändere ich die Prozedur und verwende Argumente, um die relevanten Daten zu übergeben:

'Prozedur Blattsumme:
'Argumente: dat             nach diesem Datum wird gesucht
'           Spalte:         Addiert die Werte der Blätter in dieser Spalte
'           Ergebnisspalte: in diese Spalte wird die Summe geschrieben
Sub Blattsumme(dat As Date, Spalte As Integer, Ergebnisspalte As Integer)
Dim Blatt()
Dim Summe As Double
Dim bl
Dim z As Range
'Blattnamen (kann erweitert werden):
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")
'Spalte A aller Blätter durchsuchen und in [Spalte] liegende Werte addieren
For Each bl In Blatt
Debug.Print bl
Set z = Sheets(bl).Range("A:A").Find(What:=dat)
If Not z Is Nothing Then Summe = Summe + z.Offset(0, Spalte - 1).Value
Next bl
'Summe in Tabelle eintragen:
Dim lz As Long
With Sheets("Gesamtauswertung")
lz = .Cells(Rows.Count, Ergebnisspalte).End(xlUp).Row + 1
.Cells(lz, Ergebnisspalte) = Summe
End With
End Sub
'Test: Summiert die Treffen der Spalten B-K
Sub test()
Dim i As Integer
For i = 2 To 11 'Spalte B-K
Blattsumme Date, i, i
Next i
End Sub

Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
Natürlich lerne ich dabei....aber es fehlt wohl einfach an den Grundlagen :-((
Also, wenn ich test starte, dann kommen überall Nullen und keine Summen.
Vielleicht reden wir aneinander vorbei?
Grüße
AW: Nach heutigem Datum suchen
Daniel
Oh.....
Da haben wir denke ich aneinander vorbeigeredet!
Oder was bedeuten die 25 genau? Worüber ist das nun die Summe, z.b. in Gesamtauswertung!B?
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel:
Tabelle1: 29.8. in Zelle A5, B5 hat den Wert 5
in allen anderen Blättern auch, also 5*5 = 25
Gruß Matthias
Anzeige
AW: Nach heutigem Datum suchen
Daniel
Bei dir passt es auch. macht genau was ich mir vorstelle.
Aber bei meiner eigenen Datei nicht.
Da kommen nur Nullen....Irgendwas passt da nicht.
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
ist die Spalte A auch als Datum formatiert?
Gruß Matthias
AW: Nach heutigem Datum suchen
Daniel
Jetzt ja.
Ich habe noch ein neues Blatt hinzugefügt. Er nimmt jetzt nur dessen Werte...komisch.
Grüße
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
und wenn du die Mappe abgespeckt/mit Dummy-Daten mal hochlädst?
Gruß Matthias
Hier mal die dummy Datei
Daniel
Hallo Matthias,
vielen Dank für Deine Mühe!
Die Spalten F+G müssen aus der Berechnung doch weggelassen werden.
Ich hoffe dazu muss das Makro nicht komplett geändert werden.
Ansonsten habe ich mal eine dumm Datei erstellt.
Wie du siehst stehen überall Nullen, es hat also nicht funktioniert.
https://www.herber.de/bbs/user/26170.xls
Beste Grüße und nochmals vielen Dank!
Daniel
Anzeige
AW: Hier mal die dummy Datei
Matthias
Hallo Daniel,
Die Spalten F+G müssen aus der Berechnung doch weggelassen werden.
Das Makro summiert sowieso immer nur eine Spalte.

'Test: Summiert die Treffen der Spalten B-K, ohne F und G
Sub test()
Dim i As Integer
For i = 2 To 5 'Spalte B-E
Blattsumme Date, i, i
Next i
For i = 8 To 11 'Spalte H-K
Blattsumme Date, i, i-2
Next i
End Sub

Wenn du =HEUTE() in Spalte A reinschreibst, funktioniert die .Find-Methode nicht... weiß nicht, warum.
Es funktioniert aber, wenn das Datum als Wert in Spalte A steht. Ich denke mal, das ist in deinen Mappen in der endgültigen Fassung dann auch so.
Gruß Matthias
AW: Hier mal die dummy Datei
Daniel
Klingt logisch...
dann werde ich das im Tagesverlauf mal nachprüfen.
Grüße,
Daniel
AW: Hier mal die dummy Datei
Daniel
So, habe es mir angesehen.
Hatte wieder etwas vergessen zu sagen bzw. nicht deutlich genug gemacht.
Es sollen nun zwar F+G nicht berechnet werden, aber:
Diese Spalten sollen in Gesamtauswertung frei bleiben, da ich dort Formeln stehen habe.
Es sollen also immer die Ergebnisse der B-Spalten nach B, die der H-Spalten nach H usw. kopiert werden.
Ansonsten funktioniert alles.
Was ich zusätzlich noch brauche ist, dass das Ergebnis aus B noch nach $B$3 kopiert wird.
Danke für die Unterstützung, du hilfst mir sehr.
Daniel
AW: Hier mal die dummy Datei
Matthias
Hallo Daniel,
dann lass im 2. Argument das "-2" im Code von Test() weg.
Gruß Matthias
Bin so blöd....
Daniel
....und habe wieder das wichtigste übersehen.
Langsam komme ich mir echt blöd vor, dich nochmal nach einer Änderung zu fragen.
Grüße,
Daniel
AW: Bin so blöd....
Matthias
Hallo Daniel,
Langsam komme ich mir echt blöd vor, dich nochmal nach einer Änderung zu fragen.
..die da wäre?
(kann evtl. sein, dass ich gleich weg bin, vielleicht auch nicht, ich muss heute mal was mit Frau und Kindern unternehmen...)
Gruß Matthias
AW: Bin so blöd....
Daniel
Na, das hört sich doch gut an....und das Wetter ist ja auch nicht sooo schlecht, zumindest bei mir hier.
Die Änderung ist folgende:
Jetzt wird einfach in die nächste freie Zeile kopiert.
Letztlich soll das Makro aber im Anschluß an das "Kopiermakro" laufen, dass ja alle paar Minuten läuft.
Und genau die liegt das Problem. Jetzt ist ja nicht jeder Tag ein neuer Tag. Deshalb soll für den Fall, dass die letzte Zeile vom gleichen Tag stammt, diese Zeile ersetzt werden.
Wenn aber ein neuer Tag ist, dann soll die nächste Zeile gefüllt werden.
Das Makro müsste das wohl beim ersten Mal testen, und dann das Datum in Gesamtauswertung Spalte A schreiben. Dann kann danach ein Vergleich druchgeführt werden.
Oh man. Das ist echt wieder das offensichlichste an den Makro. wahrscheinlich vergesse ich es deshalb beim erklären. Mist.
Geht das aber noch zu machen?
Hast du eigentlich Urlaub, oder arbeitest du von zu Hause aus?
Daniel
AW: Bin so blöd....
Matthias
Hallo Daniel,
kann es denn vorkommen, dass ein Datum mehrfach in Spalte A vorkommt?
Wenn ja, was dann?
Hast du eigentlich Urlaub, oder arbeitest du von zu Hause aus?
Schön wär's. Nein, ich hab Urlaub.
Gruß Matthias
AW: Bin so blöd....
Daniel
Ein Datum kommt immer nur 1 Mal vor, da das Datum ja erst durch das Makro hinzugefügt wird.
Beispiel:
Die Datei zieht sich die aktuellen Daten aus den einzelnen Dateien. In diesen Dateien stehen die Ergebnisse verschiedener Tage. Ein tag kommt immer nur 1x vor.
Nun sollen die Einzelergebnisse der Dateien zusammengeführt werden.
Hier macht alles das Makro. Daher kann immer nur ein neues Datum hinzukommen, nämlich das des heutigen Tages.
Ist das verständlich?
Daniel
AW: Bin so blöd....
Matthias
Hallo Daniel,
du musst nur das Ende des Makros verändern:

'Summe in Tabelle eintragen:
Dim lz As Long
With Sheets("Gesamtauswertung")
'Suche Datum in Spalte A von Gesamtauswertung
Set z = .Range("A:A").Find(What:=dat)
If z Is Nothing Then
'nicht gefunden, dann neue Zeile anlegen
lz = .Cells(Rows.Count, Ergebnisspalte).End(xlUp).Row + 1
.Cells(lz, 1) = dat
Else
'gefunden, dann diese Zeile verwenden
lz = z.Row
End If
.Cells(lz, Ergebnisspalte) = Summe
End With
End Sub

Gruß Matthias
AW: Bin so blöd....
Daniel
Juhuuu! Das sieht Top aus!
So, dann noch eine Frage:
Wie kann ich nun das Ergebnis der Spalte E nach B3 kopieren?
Grüße
AW: Bin so blöd....
Matthias
Hallo Daniel,
ein wenig gestöpselt:

.Cells(lz, Ergebnisspalte) = Summe
If Ergebnisspalte = 5 Then .Range("B3") = Summe
End With
End Sub

AW: Bin so blöd....
Daniel
Hi Matthias,
danke für die Hilfe. Jetzt ist auf den ersten Blick alles so wie ich mir das vorgestellt habe.
Grüße,
Daniel
AW: Nach heutigem Datum suchen
Matthias
Hallo Daniel,
in der gleichen Prozedur:

'Summe:
Dim Summe
Summe = 0
For i = 0 To 3
Debug.Print Zeile(i)
If Zeile(i) > 0 Then Summe = Summe + Sheets(Blatt(i)).Cells(Zeile(i), 2)
Next i
MsgBox Summe

ODER:
du merkst schreibst direkt die Zellen als Range in das Array:

Sub FindeDaten()
Dim i As Integer
Dim c As Range
Dim Zelle(0 To 3) As Range
Dim Blatt()
Dim Summe As Double
'Blattnamen:
Blatt = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4")
For i = 0 To 3
With Sheets(Blatt(i))
Set Zelle(i) = .Range("A:A").Find(What:=Date)
End With
Next i
'Summe:
Summe = 0
For i = 0 To 3
If Not Zelle(i) Is Nothing Then
Summe = Summe + Zelle(i).Offset(0, 1).Value 'Spalte B
End If
Next i
MsgBox Summe
End Sub

Gruß Matthias

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige