Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Until Loop

VBA Until Loop
16.01.2019 08:30:57
Karoline
Hey in die Runde,
Ich habe ein sehr einfaches Problem (glaube ich) finde aber einfach keine Lösung, darum versuche ich es jetzt hier. Bisher habe ich mich immer durchgeschlagen, aber jetzt ist es vorbei.
Mein Ziel ist es Werte aus einer Tabelle in eine andere zu kopieren, wenn sie das gleiche Datum und Zeit haben. Das Datum und Zeit steht in Spalte A, die Werte in B. Bei Datum & Zeit handelt es sich um halbstüundliche Werte über ein halbes bzw. ganzes Jahr auf zwei Tabellen aufgeteilt.
Die zwei Tabellen befinden sich auf verschieden Sheets. Ich habe versucht eine Until Schleife zu starten und hätte dann versucht den gefundenen Wert zu kopieren.
Bei der Until Schleife bekomme ich einen Runtimeerror und für die Kopiervariante habe ich keine Idee, da es sich ja auf die vorher gefundene Zelle beziehen muss.
Ich hoffe mein Anliegen ist zumindest etwas verständlich, ich versuche gern eine genauere Beschreibung bei Bedarf. Ein anhängen der kompletten Datei war leider auch nicht möglich.
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Until Loop
16.01.2019 08:38:03
Werner
Hallo Karoline,
Ein anhängen der kompletten Datei war leider auch nicht möglich.
Und warum nicht?
Voraussetzungen für den Upload:
-max 300kb
-keine Sonderzeichen, Umlaute im Namen, benenne die Datei z.B. in Test um
-nicht zu tief in Verzeichnissen "versteckt", leg dir die Datei auf den Desktop
-Datschutzrichtlinien bestätigen
Gruß Werner
Anzeige
unklar
16.01.2019 09:00:01
UweD
Hallo

&GT&GT Mein Ziel ist es Werte aus einer Tabelle in eine andere zu kopieren, wenn sie das gleiche Datum und Zeit haben.

Ich finde im 1. Blatt keine Einzige Zeit, die gleich ist.
Auch ist kein Dateninhalt gleich einem Anderen.
Also was genau soll in einer neuen Tabelle stehen?
Zeige doch auch mal dein bisheriges Makro
LG UweD
Anzeige
AW: unklar
16.01.2019 09:09:28
Karoline
Aus der Tabelle 01 Jan-Jun soll der Wert der z.B. bei dem Datum 01.04.2018 00:00 steht in die Data-Spalte der Tabelle April-Sep übertragen werden, die auch dem Datum 01.04.2018 00:00 zugeordnet ist
Mein Versuch sieht so aus:
Sub try2()
Dim i As Long
Dim ApSe As Worksheet: Set ApSe = Sheets("April-Sep")
Dim pv1 As Worksheet: Set pv1 = Sheets("01 Jan-Jun")
Dim t As Double
t = 43191
Do Until Cells(i, 1).Value = t
'copy paste ?
t = t + 2.08333333333333E-02
Loop
End Sub

Anzeige
AW: unklar
16.01.2019 09:11:59
Karoline
Das i fehlte
der error kommt weiterhin.
Sub try2()
Dim i As Long
Dim ApSe As Worksheet: Set ApSe = Sheets("April-Sep")
Dim pv1 As Worksheet: Set pv1 = Sheets("01 Jan-Jun")
Dim t As Double
t = 43191
i = 1
Do Until Cells(i, 1).Value = t
'copy paste ?
t = t + 2.08333333333333E-02
i = i + 1
Loop
End Sub

Anzeige
ohne Schleife
16.01.2019 09:45:46
UweD
Hallo nochmal
Es ginge sogar nur mit Formel ohne VBA
=WENNFEHLER(SVERWEIS([@Date];'01 Jan-Jun'!$A:$B;2;0);"")


Wenn mit VBA, dann wird genau diese Formel benutzt und später das Ergebnis gegen Werte ersetzt.
Modul1
Option Explicit 
 
Sub try2() 
 
    Dim LR As Long, Z1 As Integer 
    Dim ApSe As Worksheet: Set ApSe = Sheets("April-Sep") 
    Dim pv1 As Worksheet: Set pv1 = Sheets("01 Jan-Jun") 
     
    Z1 = 3 'Erste Zeile mit Daten 
     
    With ApSe 
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte 
         
        With .Cells(Z1, 2).Resize(LR - Z1 + 1, 1) 
            .FormulaR1C1 = "=IFERROR(VLOOKUP([@Date],'" & pv1.Name & "'!C1:C2,2,0),"""")" 
            .Value = .Value 
        End With 
    End With 
 
End Sub 
LG UweD
Anzeige
AW: ohne Schleife
16.01.2019 11:32:49
Karoline
Vielen Dank!
Jetzt kann ich versuchen es auch auf die anderen zwei Tabellenblätter anzuwenden :)
mit Schleife
16.01.2019 09:58:04
Nepumuk
Hallo,
teste mal:
Public Sub Copy_Values()
Dim avntValues As Variant
Dim ialngIndex As Long
Dim objCell As Range
With Worksheets("01 Jan-Jun")
avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
For ialngIndex = LBound(avntValues, 1) To UBound(avntValues, 1)
Set objCell = Worksheets("April-Sep").Columns(1).Find(What:= _
avntValues(ialngIndex, 1), LookIn:=xlFormulas, _
LookAt:=xlPart, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.Offset(0, 1).Value = avntValues(ialngIndex, 2)
Set objCell = Nothing
End If
Next
End Sub

Gruß
Nepumuk
Anzeige
AW: mit Schleife
16.01.2019 10:15:43
Torsten
oder so:
Sub kopieren()
Dim WS1 As Worksheet: Set WS1 = Sheets("01 Jan-Jun")
Dim WS2 As Worksheet: Set WS2 = Sheets("April-Sep")
Dim lngRow As Long
For lngRow = 2 To WS1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIfs(WS2.Columns(1), WS1.Cells(lngRow, 1))  0 Then
WS1.Range("B" & lngRow).Copy WS2.Range("B" & WorksheetFunction.CountA(WS2.Columns(2)) +  _
1)
End If
Next lngRow
End Sub
Gruss Torsten
Anzeige
AW: mit Schleife
16.01.2019 11:33:49
Karoline
Danke!
Jetzt schau ich mal mit welchem ich mich leiter tue :)
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Werte mit VBA zwischen Tabellen mit einer Until Schleife kopieren


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und wechsle zu dem Blatt, in dem deine Ausgangsdaten (z.B. "01 Jan-Jun") stehen.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke auf "Einfügen" > "Modul".
  4. Kopiere den folgenden VBA-Code in das Modul:

    Sub WerteKopieren()
       Dim i As Long
       Dim ApSe As Worksheet: Set ApSe = Sheets("April-Sep")
       Dim pv1 As Worksheet: Set pv1 = Sheets("01 Jan-Jun")
       Dim t As Double
       t = 43191 ' Ersetze dies mit dem entsprechenden Datum
       i = 1
    
       Do Until Cells(i, 1).Value = ""
           If Cells(i, 1).Value = t Then
               ApSe.Cells(i, 2).Value = Cells(i, 2).Value ' Wert kopieren
           End If
           i = i + 1
       Loop
    End Sub
  5. Passe die Variable t an, um das gewünschte Datum und die Uhrzeit zu setzen.

  6. Führe das Makro aus, indem du auf F5 drückst oder das Makro über das Excel-Menü startest.


Häufige Fehler und Lösungen

  • Runtime-Fehler beim Ausführen der Schleife:

    • Ursache: Diese können auftreten, wenn die Schleife außerhalb der Datenbereichsgrenzen läuft.
    • Lösung: Stelle sicher, dass i nicht über die Anzahl der Zeilen in deiner Tabelle hinausgeht. Füge eine Bedingung hinzu, die die Schleife stoppt, wenn i die maximale Zeilenanzahl erreicht hat.
  • Falsche Werte werden kopiert:

    • Ursache: Überprüfe, ob die Bedingungen in der Schleife korrekt sind.
    • Lösung: Stelle sicher, dass die Vergleiche der Werte in der Schleife richtig sind.

Alternative Methoden

Falls du keine VBA-Programmierung nutzen möchtest, kannst du auch die SVERWEIS-Funktion in Excel verwenden:

=WENNFEHLER(SVERWEIS(A2; '01 Jan-Jun'!$A:$B; 2; FALSCH); "")

Diese Formel sucht den Wert in A2 der aktuellen Tabelle und gibt den entsprechenden Wert aus der Tabelle "01 Jan-Jun" zurück. Dies ist eine einfache Methode, um Daten zu übertragen, ohne VBA zu verwenden.


Praktische Beispiele

Hier ist ein Beispiel für eine VBA Until Schleife:

Sub BeispielUntilLoop()
    Dim i As Long
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("01 Jan-Jun")

    i = 1
    Do Until ws.Cells(i, 1).Value = ""
        If ws.Cells(i, 1).Value = "01.04.2018 00:00" Then
            Debug.Print ws.Cells(i, 2).Value ' Gibt den Wert in der Konsole aus
        End If
        i = i + 1
    Loop
End Sub

Dieses Beispiel zeigt, wie du die Werte für ein bestimmtes Datum aus einer Tabelle extrahierst.


Tipps für Profis

  • Nutze die Option Explicit Anweisung am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Verwende Fehlerbehandlungsroutinen, um mit unvorhergesehenen Fehlern umzugehen.
  • Teste dein Makro immer mit kleinen Datenmengen, bevor du es auf größere Tabellen anwendest.

FAQ: Häufige Fragen

1. Was ist eine Until Schleife in VBA?
Eine Until Schleife in VBA führt einen Block von Code aus, bis eine bestimmte Bedingung erfüllt ist. Sie wird häufig verwendet, um durch Daten zu iterieren.

2. Wie kann ich sicherstellen, dass mein Makro nicht abstürzt?
Stelle sicher, dass alle Schleifenbedingungen korrekt sind und verwende die Fehlerbehandlung, um unerwartete Fehler zu managen.

3. Gibt es Alternativen zu VBA für das Kopieren von Werten in Excel?
Ja, du kannst Funktionen wie SVERWEIS oder INDEX und VERGLEICH verwenden, um Werte ohne VBA zu kopieren.

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