Microsoft Excel

Herbers Excel/VBA-Archiv

Datum aus Oracle-Abfrage als Datum formatieren


Betrifft: Datum aus Oracle-Abfrage als Datum formatieren von: Klexy
Geschrieben am: 11.09.2019 17:57:46

Vor ein paar Tagen habe ich dieselbe Anfrage schon mal gestellt:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1710709#1710709
Zuerst dachte ich, das war die Lösung, war sie aber nicht.

Das Problem: manche Sachen, die manuell funktionieren, funktionieren nicht, wenn sie per VBA durchgeführt werden.
In der angehängten Beispieldatei (mit Recovery-Blatt, wenn man die Beispielspalten kaputtgenudelt hat) habe ich ein originalgetreues Muster und insgesamt 5 Makro-Lösungen:
1. Alle Zellen in den Datumsspalten einzeln durchgehen und Datentyp ändern. Das dauert ewig bei 8 Datumsspalten mit über 100.000 Einträgen) - meine ursprüngliche Lösung.
2. Spalte mit Werte einfügen und multiplizieren (Idee von Sigi aus dem vorigen Thread). Das funktioniert manuell, aber nicht per Makro.
3. Spalte als Datum formatieren und den Inhalt per Suchen und Ersetzen manipulieren (Punkt durch § ersetzen und § durch Punkt ersetzen. Das funktioniert (manchmal, aber nicht hier) manuell, aber nicht per Makro.
4. Leerspalte einfügen, Originalspalte per "Werte einfügen" transferieren und Originalspalte löschen. Das funktioniert manuell, aber nicht per Makro.
5. Leerspalte einfügen, Originalspalte über Formel auslesen und Originalspalte löschen. Das funktioniert recht flott, ist aber aweng a Hausfrauenlösung.

https://www.herber.de/bbs/user/131994.xlsm
Die Datei entspricht in Struktur und Aufbau dem Original, das so ist, wie es ist. Die Makros beziehen sich auch auf diesen speziellen Aufbau.

Weiß einer eine echte VBA-Lösung für mein Problem?

  

Betrifft: AW: Datum aus Oracle-Abfrage als Datum formatieren von: 1712533.html
Geschrieben am: 11.09.2019 18:56:43

Hallo,

schon mal mit Text in Spalten versucht?

Option Explicit
   
   Sub Makro1()
   Dim loLetzte As Long, loSpalte As Long, i As Long
   
   Application.ScreenUpdating = False
   
   With Worksheets("Export")
       loSpalte = .Cells(5, .Columns.Count).End(xlToLeft).Column
       For i = 3 To loSpalte
           loLetzte = .Cells(.Rows.Count, i).End(xlUp).Row
           .Range(.Cells(6, i), .Cells(loLetzte, i)).TextToColumns Destination:=.Cells(6, i), _
           DataType:=xlFixedWidth, FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
       Next i
   End With
   End Sub

Gruß Werner
  

Betrifft: AW: Datum aus Oracle-Abfrage als Datum formatieren von: 1712557.html
Geschrieben am: 11.09.2019 20:55:39

Hallo Klexy,

dieses Verhalten ist ein sehr altes Kriegsleiden von Excel. Ab Excel 2010 überlasse ich das Holen und Formatieren von Massendaten dem kostenlosen M$-AddIn PowerQuery.
Das ist zwar für den Neueinsteiger auch gerade keine Diätkost, aber man kann die ganze Sache in Schritten viel besser nachvollziehen und eingreifen.
Ab Excel 2016 ist dieses AddIn fest eingebaut und muß es nicht nachträglich installieren.

Gruß von Luschi
aus klein-Paris

  

Betrifft: AW: Datum aus Oracle-Abfrage als Datum formatieren von: 1712613.html
Geschrieben am: 12.09.2019 09:38:30

Hallo

Lass doch die ganzen Selects weg!

Sub Datumsspalten_umformatieren_6()

    Dim KopfAnfang As Range
    Dim Hier As Range
    Dim GanzeSpalte As Range
    Dim GanzUnten As Long
    Dim Zelle As Range
    
    Application.ScreenUpdating = False
    GanzUnten = Cells(Rows.Count, 1).End(xlUp).Row

    ' Erste Zelle des Tabellenkopfs finden, weil es nicht A1 ist 
    Set KopfAnfang = Cells.Find(What:="LOBID", After:=ActiveCell, LookIn:=xlValues, _
                                LookAt:=xlWhole, SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)
    Set Hier = KopfAnfang
    Do While Hier <> ""                    ' alle Zellen des Spaltenkopfs durchlaufen 
        If Right(Hier, 4) = "DATE" Then    ' wenn Spaltenkopf mit "DATE" aufhört 
            Set GanzeSpalte = Range(Hier.Offset(1, 0), Cells(GanzUnten, Hier.Column))
            For Each Zelle In GanzeSpalte
                If Zelle <> "" Then
                    Zelle.Value = CDate(Zelle.Value)
                End If
            Next Zelle
        End If
        Set Hier = Hier.Offset(0, 1)    ' nächste Spalte 
    Loop
    Application.ScreenUpdating = True
    KopfAnfang.Select
End Sub

  

Betrifft: AW: Datum aus Oracle-Abfrage als Datum formatieren von: 1712985.html
Geschrieben am: 13.09.2019 17:51:01

Die Selects habe ich in der Entwicklungsphase drin, um den Fortschritt zu sehen wenn es durchläuft.
Ich weiß, dass es ohne schneller geht und messe solche Sachen immer auch sicherheitshalber (in der Entwicklungsphase):
"Dauer: 55 Sekunden
für 22.267 Zellen in 2 Spalten
Datumsspalten_umformatieren_1"

"Dauer: 10 Sekunden
für 22.267 Zellen in 2 Spalten
Makro: Datumsspalten_umformatieren_1_ohne_Select"

  

Betrifft: Danke. Das war's! von: 1712987.html
Geschrieben am: 13.09.2019 17:56:10

Das war der Volltreffer, Werner. Danke.
Das dauert bei 22 Spalten mit 143.000 Zeilen nur 15 Sekunden.

  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: 1712999.html
Geschrieben am: 13.09.2019 20:08:30


Beiträge aus dem Excel-Forum zum Thema "Datum aus Oracle-Abfrage als Datum formatieren"