Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum suchen in anderem Blatt

Forumthread: Datum suchen in anderem Blatt

Datum suchen in anderem Blatt
Nico
Hallöchen,
da mein letzter Beitrag wohl zu schwer war, hier eine Teilfrage:
Ich habe im Blatt 1 ein Datum in Zeile F6 (z.B. 10_2010).
In Blatt 2 habe ich eine Datumsreihe
01_2010
02_2010
...
02_2011 in Spalte A, Zeile 8-19.
Nun möchte ich, das die Zelle in Blatt 2, Spalte A, die das gleich Datum erhält wie in Zeile F6, Blatt1, markiert wird.
Danke für die Mühe.
Nico
Anzeige
AW: Datum suchen in anderem Blatt
26.10.2010 16:51:28
selli
hallo nico,
nimm die bedingte formatierung.
sie funktioniert allerdings nicht blattübergreifend, so dass eine zelle im 2.blatt eine verknüpfung zu blatt1 f6 haben sollte auf die sich die bedingte formatierung deiner datumszellen in blatt 2 bezieht.
gruß selli
AW: Datum suchen in anderem Blatt
26.10.2010 16:59:02
Nico
geht leider nicht, da ich dann noch weitermachen muss. Was ich genau brauche:
Wenn die Zeile in Blatt 2 erkannt ist, in der das gleiche Datum steht, dann soll in DIESER Zeile in
Spalte D, H, L, P, T die dort enthaltene Formel in Werte umgewandelt werden. Wollte ich dann ungefähr so machen:
Datum.Value = Datum.Value
Datum.Offset(0, 4) = Datum.Offset(0, 4)
Datum.Offset(0, 8) = Datum.Offset(0, 8)
Datum.Offset(0, 12) = Datum.Offset(0, 12)
Datum.Offset(0, 16) = Datum.Offset(0, 16)
und das für 9 Tabellenblätter. Mir fehlt irgendwie aber der Anfang oder die genaue Definition der Variable.
Wenn hier jemand eine Idee hat - gern :-)).
Anzeige
AW: evtl mit find ?
26.10.2010 17:27:31
hary
Hallo Nico
teste mal.

Sub n()
Dim zelle As Range
With Worksheets("Tabelle2").Range("A:A")
Set zelle = .Find(Sheets("Tabelle1").Range("F6").Value, LookIn:=xlValues, lookat:=xlWhole)
If Not zelle Is Nothing Then
zelle.Interior.ColorIndex = 3
End If
End With
End Sub

gruss hary
Anzeige
AW: evtl mit find ?
26.10.2010 17:54:54
Nico
super. Mit Harys code hat es geklappt. Ich habe jetzt nur "mache rot" durch ersetze Formel durch Wert geändert:
Dim zelle As Range
With Worksheets("Blatt2").Range("A8:A19")
Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:=xlWhole)
If Not zelle Is Nothing Then
zelle.Offset(0, 3) = zelle.Offset(0, 3)
zelle.Offset(0, 7) = zelle.Offset(0, 7)
zelle.Offset(0, 11) = zelle.Offset(0, 11)
zelle.Offset(0, 15) = zelle.Offset(0, 15)
zelle.Offset(0, 19) = zelle.Offset(0, 19)
End If
End With
Das i-Tüpfelchen wäre es jetzt noch, wenn ich alle 9 Blätter mit einem Code durchlaufen könnte, so ungefähr:
With Worksheets("Blatt2").Range("A8:A19") AND (&) Worksheets("Blatt4") AND .....
Ist das irgendwie machbar?
Anzeige
AW: evtl mit find ?
26.10.2010 18:08:09
hary
Hallo Nico
Teste mal in einer Kopie deiner Mappe.
Code ungetestet!

Sub test()
Dim Sh As Worksheet
Dim zelle As Range
Application.ScreenUpdating = False
For Each Sh In Worksheets
If Sh.Name  "Start" Then
With Sh.Range("A8:A19")
Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not zelle Is Nothing Then
zelle.Offset(0, 3) = zelle.Offset(0, 3)
zelle.Offset(0, 7) = zelle.Offset(0, 7)
zelle.Offset(0, 11) = zelle.Offset(0, 11)
zelle.Offset(0, 15) = zelle.Offset(0, 15)
zelle.Offset(0, 19) = zelle.Offset(0, 19)
End If
End With
End If
Next
Set zelle = Nothing
Application.ScreenUpdating = True
End Sub

gruss hary
Anzeige
AW: evtl mit find ?
26.10.2010 18:11:00
Nico
Hey Hary,
ist leider nicht jedes Worksheet. Nur 9 von 16. Oder kann ich diese so anordnen, dass man sagen kann:
for worksheet (1) bis worksheet (9)?
AW: evtl mit find ?
26.10.2010 18:19:35
hary
Hallo
Mit sheet(1) spricht man die Stelle der Tabelle an. Wenn die nicht an erster Stelle(ganz links) sitzt geht es nicht.
Wie heissen die Tabellen, Du schreibst was von Blatt2 Blatt4, wie gehts weiter?
gruss hary
Anzeige
AW: evtl mit find ?
26.10.2010 18:28:04
Nico
Die Blätter heißen:
932V, 933V, 923V, 954V,
932P, 933P, 923P, 954P, 959P
Und wenn ich alle 9 als erste Blätter setze?
AW: evtl mit find ?
26.10.2010 18:32:36
hary
Hallo
wenn Du die aan den Anfang setzt, versuchs mal so. Ungeteste.

Sub n()
Dim i As Long
Dim zelle As Range
Application.ScreenUpdating = False
For i = 1 To 9 Step 2
With Sheets(i).Range("A8:A19")
Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not zelle Is Nothing Then
zelle.Offset(0, 3) = zelle.Offset(0, 3)
zelle.Offset(0, 7) = zelle.Offset(0, 7)
zelle.Offset(0, 11) = zelle.Offset(0, 11)
zelle.Offset(0, 15) = zelle.Offset(0, 15)
zelle.Offset(0, 19) = zelle.Offset(0, 19)
End If
End With
Next
Set zelle = Nothing
Application.ScreenUpdating = True
End Sub

gruss hary
muss ertmal weg.
Anzeige
AW: evtl mit find ?
26.10.2010 18:48:52
Nico
Super, hat geklappt!! Habe sogar noch meine START-Tabelle und eine CHECK-Tab vorweg gestellt.
Danke für deine Mühe und dir noch einen schönen Abend
Nico
Dim i As Long
Dim zelle As Range
Application.ScreenUpdating = False
For i = 3 To 11 Step 1
With Sheets(i).Range("A8:A19")
Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not zelle Is Nothing Then
zelle.Offset(0, 3) = zelle.Offset(0, 3)
zelle.Offset(0, 7) = zelle.Offset(0, 7)
zelle.Offset(0, 11) = zelle.Offset(0, 11)
zelle.Offset(0, 15) = zelle.Offset(0, 15)
zelle.Offset(0, 19) = zelle.Offset(0, 19)
End If
End With
Next
Set zelle = Nothing
Application.ScreenUpdating = True
Anzeige
AW: mit Array
26.10.2010 20:32:10
hary
Hallo Nico
so koennen die betr. Tabelle stehen wo sie wollen.

Sub n()
Dim blaetter, wks As Worksheet, n As Integer
Dim ZELLE As Range
Application.ScreenUpdating = False
blaetter = Array("932V", "933V", "923V", "954V", "932P", "933P", "923P", "954P", "959P")
For Each wks In Worksheets
For n = 0 To UBound(blaetter)
If blaetter(n) = wks.Name Then
With wks.Range("A8:A19")
Set ZELLE = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not ZELLE Is Nothing Then
ZELLE.Offset(0, 3) = ZELLE.Offset(0, 3)
ZELLE.Offset(0, 7) = ZELLE.Offset(0, 7)
ZELLE.Offset(0, 11) = ZELLE.Offset(0, 11)
ZELLE.Offset(0, 15) = ZELLE.Offset(0, 15)
ZELLE.Offset(0, 19) = ZELLE.Offset(0, 19)
End If
End With
End If
Next n
Next wks
Set Zelle = nothing
Application.ScreenUpdating = True
End Sub

gruss hary
Anzeige
@Selli anderem Blatt
26.10.2010 17:08:44
hary
Hallo Selli
geht auch Blattuebergreifend mit indirekt.
Bsp.Tabelle2 A1Formel ist =A1=INDIREKT("Tabelle1!F6")
gruss hary
AW: @Selli anderem Blatt
26.10.2010 17:15:48
selli
hallo hary, nico (wer auch immer),
dann lass doch bei veränderung der zelle f6 in blatt 1 eine schleife von zelle a8 bis a19 in blatt2 laufen welche die werte vergleicht.
bei übereinstimmung überschreibst du die anschliessenden zellen in der jeweiligenspalte ganz einfach mit ihrem eigenen wert. bsp. cells(i,4).value=cells(i,4).value.
dann ist aber die formel weg.
ein beispiel kann ich dir jetzt leider nicht basteln, weil ich keine zeit mehr habe. morgen evtl.
gruß selli
Anzeige
@ nic AW: @Selli anderem Blatt
26.10.2010 17:17:11
selli
hallo hary,
hab da wohl die personen durcheinander gebracht.
danke für den tipp.
gruß selli
;
Anzeige
Anzeige

Infobox / Tutorial

Datum suchen in anderem Blatt


Schritt-für-Schritt-Anleitung

Um ein Datum in einem anderen Blatt zu suchen und bestimmte Zellen zu ändern, kannst du den folgenden VBA-Code verwenden. Dieser Code sucht nach einem Datum in Blatt 2, das in Blatt 1 (F6) angegeben ist, und ersetzt Formeln in bestimmten Zellen durch ihre Werte.

  1. Öffne dein Excel-Arbeitsblatt.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (dein Dokument)" > Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:
Sub DatumSuchenUndErsetzen()
    Dim zelle As Range
    With Worksheets("Blatt2").Range("A8:A19")
        Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not zelle Is Nothing Then
            zelle.Offset(0, 3) = zelle.Offset(0, 3)
            zelle.Offset(0, 7) = zelle.Offset(0, 7)
            zelle.Offset(0, 11) = zelle.Offset(0, 11)
            zelle.Offset(0, 15) = zelle.Offset(0, 15)
            zelle.Offset(0, 19) = zelle.Offset(0, 19)
        End If
    End With
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: ALT + F8, wähle DatumSuchenUndErsetzen und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004"

    • Lösung: Stelle sicher, dass die Blattnamen korrekt sind und die Datumswerte in der richtigen Zelle stehen.
  • Fehler: Das Datum wird nicht gefunden

    • Lösung: Überprüfe, ob das Datum in der Zelle F6 exakt mit einem der Datumswerte in Blatt 2 übereinstimmt (z.B. Formatierung).

Alternative Methoden

Eine alternative Methode, um über mehrere Blätter zu suchen, ist die Verwendung eines Arrays, das die Namen der Blätter enthält. Hier ein Beispiel:

Sub SucheInMehrerenBlättern()
    Dim blaetter As Variant
    Dim wks As Worksheet
    Dim zelle As Range
    blaetter = Array("932V", "933V", "923V", "954V", "932P", "933P", "923P", "954P", "959P")

    Application.ScreenUpdating = False
    For Each wks In Worksheets
        For n = LBound(blaetter) To UBound(blaetter)
            If wks.Name = blaetter(n) Then
                With wks.Range("A8:A19")
                    Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:=xlWhole)
                    If Not zelle Is Nothing Then
                        zelle.Offset(0, 3) = zelle.Offset(0, 3)
                    End If
                End With
            End If
        Next n
    Next wks
    Application.ScreenUpdating = True
End Sub

Praktische Beispiele

Wenn du den Code für 9 spezifische Blätter verwenden möchtest, kannst du die Blätter einfach in eine Schleife packen. Hier ist ein Beispiel, das funktioniert, wenn die Blätter in einer bestimmten Reihenfolge angeordnet sind:

Sub DurchlaufeBlätter()
    Dim i As Long
    Dim zelle As Range
    Application.ScreenUpdating = False
    For i = 3 To 11 ' Annahme: Blätter 3 bis 11 sind die relevanten Blätter
        With Sheets(i).Range("A8:A19")
            Set zelle = .Find(Sheets("START").Range("F6").Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not zelle Is Nothing Then
                zelle.Offset(0, 3) = zelle.Offset(0, 3)
            End If
        End With
    Next i
    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Nutze die INDIREKT-Funktion: Mit =INDIREKT("Tabelle1!F6") kannst du eine Zelle in einem anderen Blatt referenzieren, ohne VBA verwenden zu müssen.
  • Makros optimieren: Schalte Application.ScreenUpdating auf False, um die Ausführungsgeschwindigkeit zu erhöhen, und aktiviere es am Ende wieder.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Datum im richtigen Format vorliegt? Überprüfe die Formatierung der Zelle in Blatt 1 und stelle sicher, dass sie mit der Formatierung der Datumsreihe in Blatt 2 übereinstimmt.

2. Kann ich die Suche auf eine bestimmte Zelle beschränken? Ja, indem du den Bereich in .Find anpasst, kannst du die Suche auf spezifische Zellen oder Bereiche begrenzen.

3. Was passiert, wenn das Datum nicht gefunden wird? Der Code überspringt den Abschnitt, in dem Formeln ersetzt werden, wenn das Datum nicht gefunden wird. Es gibt keinen Fehler, aber es passiert auch nichts.

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