Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
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
Inhaltsverzeichnis

Kopieren wenn Spalte O Uhrzeit kleiner als enthält

Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 10:01:28
Johannes
Guten Morgen,
ich habe folgendes Problem. Ich führe mit VBA aus einer Intranetseite einen Datenabruf durch. Alle Informationenen werden in der Tabelle 'InventoryDaten' gespeichert.
In dieser Tabelle findet sich in Spalte O eine Uhrzeit.
Jetzt sollen diese Daten, also die gesamte Spalte davor und dahinter, auf zwei weitere leere Tabellen 'InventoryDaten früh' und 'InventoryDaten spät' kopiert werden und zwar abhängig davon ob die Uhrzeit in Spalte O vor 14:30 ('InventoryDaten früh') oder nach 14:30 ('InventoryDaten spät') liegt.
Beispieldatei: https://www.herber.de/bbs/user/86242.xlsx
Vielen dank schon mal vorab. Bisher konnte mir da niemand helfen ledier

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 10:21:28
Klaus
Hallo Johannes,
kann ich über Zeile 1 eine einfügen? Dann ist es einfach:
Autofilter nach kleiner 14:30, sichtbare kopieren,
Autofilter größer 14:30, sichtbare kopieren.
Das könntest du sogar mit dem Makrorekorder selber machen!
Grüße,
Klaus M.vdT.

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 10:30:04
Johannes
Ja klar da kann ruhig was eingefügt werden!

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 10:34:36
Johannes
Dann bekomme ich aber leider nur eine einzige Uhrzeit angezeigt und zwar 06:30 sonst keine. Komisch

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 11:05:05
Klaus
Hallo Johannes,
probier doch mal dieses Script in deiner Masterdatei.
Dass deine UsedRange jenseits von gut und böse ist weisst du uns hast du im Griff?
EDIT: Das Forum wirft mit grad das Pre-Tag durcheinander, darum unformatiert. Kopierst du ja eh :-)

Const SheetQuelle As String = "InventoryDaten"
Const SheetFrueh As String = "InventoryDaten früh"
Const SheetSpaet As String = "InventoryDaten spät"
Const TimeSeperate As String = "14:30"
Const ColTime As Long = 15                          'Zeiten in Spalte O (O=15, A=1, B=2 usw)
'Uhrzeit in Kommazahl umrechnen
Dim TimeReal As Double
TimeReal = Format(TimeSeperate, "0.00")
Dim lCol As Integer
Dim lRow As Long
'alte Einträge aus Früh/Spät löschen
Sheets(SheetFrueh).Cells.ClearContents
Sheets(SheetSpaet).Cells.ClearContents
With Sheets(SheetQuelle)
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
'letzte Zeile / Spalte feststellen
lCol = .UsedRange.Columns.Count + 1
lRow = .Cells(.Rows.Count, ColTime).End(xlUp).Row
'Hilfsspalte einfügen
.Rows(1).Insert
'Trenn-Zeit und Trenn-Zeit-Formel einfügen
.Cells(1, lCol).Value = TimeReal
.Cells(2, lCol).Resize(lRow - 1, 1).FormulaR1C1 = "=(TIME(HOUR(RC" & ColTime & "),MINUTE(RC" _
& ColTime & "),0))
Grüße,
Klaus M.vdT.

Anzeige
AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 11:11:20
Johannes
Meinst du mit der UsedRange jenseits von gut und böse das ich zu viele Daten verarbeite?

UsedRange
08.07.2013 11:17:14
Klaus
Hi,
nein. Damit meine ich, dass die Datein in deiner Liste eigentlich bei Spalte AG enden, die UsedRange (also die irgendwann mal benutzte Range) aber bis Spalte DE reicht. Du hast also rund 75 Spalten nutzlose Usedrange. Kann aber auch an deinem Masterfile liegen.
Beweis: im Direktfenster:
Cells(1, ActiveSheet.UsedRange.Columns.Count).Select
Wenn dich das nicht stört und du keine Performanceverluste spürst, ignoriere meinen Kommentar dazu einfach :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 10:58:33
Johannes
Häckchen vergessen sry

Datei anbei
08.07.2013 11:07:21
Klaus
Hi Johannes,
keine Ahnung warum das oben mit dem Code nicht ging. Hier einfach der Dateiupload mit meiner Musterlösung (Makro starten!):
https://www.herber.de/bbs/user/86247.xlsm
Grüße,
Klaus M.vdT.

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 11:48:53
fcs
Hallo Johannes,
hier zwei makros, die die Zeilen aus der Quelle Zeilen bzw. Blockweise in die Zieltabellen kopieren.
Den Vorschlag von Klaus (Hilfsspalte + Autofilter) solltest du wählen, wenn du sehr viele Zeilen in der Quelltabelle hast. Da dann die Zeilenselektion in einem Block erfolgt und kopiert werden kann.
Gruß
Franz
Sub DatenTeilen()
'Jede Zeile nach Prüfung einzeln kopieren
Dim wksData As Worksheet, wksFrueh As Worksheet, wksSpaet As Worksheet
Dim Zeile_D As Long, Zeile_F As Long, Zeile_S As Long
Dim datZeit As Date, datGrenzzeit As Date
Set wksData = ActiveWorkbook.Worksheets("InventoryDaten")
Set wksFrueh = ActiveWorkbook.Worksheets("InventoryDaten früh")
Set wksSpaet = ActiveWorkbook.Worksheets("InventoryDaten spät")
With wksFrueh
Zeile_F = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_F, 15)) Then
Zeile_F = Zeile_F + 1
End If
End With
With wksSpaet
Zeile_S = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_S, 15)) Then
Zeile_S = Zeile_S + 1
End If
End With
datGrenzzeit = TimeSerial(Hour:=14, Minute:=30, Second:=0)
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
With wksData
For Zeile_D = 1 To .Cells(.Rows.Count, 15).End(xlUp).Row
If IsDate(.Cells(Zeile_D, 15)) Then
datZeit = CDate(Format(.Cells(Zeile_D, 15), "hh:mm:ss"))
If datZeit > datGrenzzeit Then
.Rows(Zeile_D).Copy Destination:=wksSpaet.Cells(Zeile_S, 1)
Zeile_S = Zeile_S + 1
Else
.Rows(Zeile_D).Copy Destination:=wksFrueh.Cells(Zeile_F, 1)
Zeile_F = Zeile_F + 1
End If
End If
Next Zeile_D
End With
Fehler:
With Err
Select Case .Number
Case 0
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Sub DatenTeilen_Variante()
'Zeilenblöcke nach Prüfung blockweise kopieren - läuft etwas schneller als Zeilenweise
Dim wksData As Worksheet, wksFrueh As Worksheet, wksSpaet As Worksheet
Dim Zeile_D As Long, Zeile_F As Long, Zeile_S As Long, Zeile_1 As Long, Zeile_2 As Long
Dim Zeile_L As Long
Dim bolSpaet As Boolean
Dim datZeit As Date, datGrenzzeit As Date
Set wksData = ActiveWorkbook.Worksheets("InventoryDaten")
Set wksFrueh = ActiveWorkbook.Worksheets("InventoryDaten früh")
Set wksSpaet = ActiveWorkbook.Worksheets("InventoryDaten spät")
With wksFrueh
Zeile_F = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_F, 15)) Then
Zeile_F = Zeile_F + 1
End If
End With
With wksSpaet
Zeile_S = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_S, 15)) Then
Zeile_S = Zeile_S + 1
End If
End With
datGrenzzeit = TimeSerial(Hour:=14, Minute:=30, Second:=0)
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
With wksData
Zeile_L = .Cells(.Rows.Count, 15).End(xlUp).Row
For Zeile_D = 1 To Zeile_L
If IsDate(.Cells(Zeile_D, 15)) Then
datZeit = CDate(Format(.Cells(Zeile_D, 15), "hh:mm:ss"))
If Zeile_1 = 0 Then
bolSpaet = (datZeit > datGrenzzeit)
Zeile_1 = Zeile_D
Zeile_2 = Zeile_1
Else
If bolSpaet = (datZeit > datGrenzzeit) Then
Zeile_2 = Zeile_D
Else
If bolSpaet Then
.Range(.Rows(Zeile_1), .Rows(Zeile_2)).Copy Destination:=wksSpaet.Cells(Zeile_S, _
1)
Zeile_S = Zeile_S + Zeile_2 - Zeile_1 + 1
Else
.Range(.Rows(Zeile_1), .Rows(Zeile_2)).Copy Destination:=wksFrueh.Cells(Zeile_F, _
1)
Zeile_F = Zeile_F + Zeile_2 - Zeile_1 + 1
End If
bolSpaet = (datZeit > datGrenzzeit)
Zeile_1 = Zeile_D
Zeile_2 = Zeile_1
End If
End If
End If
Next Zeile_D
Zeile_2 = Zeile_L
If bolSpaet Then
.Range(.Rows(Zeile_1), .Rows(Zeile_2)).Copy Destination:=wksSpaet.Cells(Zeile_S, 1)
Zeile_F = Zeile_F + Zeile_2 - Zeile_1 + 1
Else
.Range(.Rows(Zeile_1), .Rows(Zeile_2)).Copy Destination:=wksSpaet.Cells(Zeile_S, 1)
Zeile_S = Zeile_S + Zeile_2 - Zeile_1 + 1
End If
End With
Fehler:
With Err
Select Case .Number
Case 0
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Anzeige
AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
08.07.2013 14:31:59
Johannes
Vielen Dank für eure Hilfe. Beide Lösungen haben prima funktioniert. Und das alles in so kurzer Zeit.

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
09.07.2013 17:01:11
Johannes
Ist es in deinem ersten Macro auch möglich das er die daten jeweils erst in die 2. Zeile des Zielblattes kopiert also in InventoryDaten früh und InventoryDaten spät die oberste Zeile unberührt lässt da dort Beschreibungen eingefügt werden sollen? Danke

AW: Kopieren wenn Spalte O Uhrzeit kleiner als enthält
09.07.2013 21:02:53
fcs
Hallo Johannes,
ändere den Abschnitt
  With wksFrueh
Zeile_F = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_F, 15)) Then
Zeile_F = Zeile_F + 1
End If
End With
With wksSpaet
Zeile_S = .Cells(.Rows.Count, 15).End(xlUp).Row
If Not IsEmpty(.Cells(Zeile_S, 15)) Then
Zeile_S = Zeile_S + 1
End If
End With
in
  With wksFrueh
Zeile_F = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
End With
With wksSpaet
Zeile_S = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
End With
Gruß
Franz
Anzeige

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige