Excel Hilfe

  • Hallo,


    ich benötige mal eure Hilfe bei der Umrechnung von Julianischen Datum in "normal" ( Jahr, Monat, Tag, Stunde, Minute, Sekunde)


    Wer kann mir da eine Excel Formel geben?
    Ich habe zur zeit nur die in Datum.
    Also =A3+DATUM(2000;1;1)-2451544,5
    A3 ist die Zelle mit dem JD Zahlen.


    Wie muss die Formel aussehen, damit ich bis zur Sekunde anzeigen kann?


    Gruß Dietmar

  • Hallo Dietmar,


    Datumswerte werden in Office immer in Tagen seit dem 30.12.1899 geführt.
    0 = 30.12.1899
    0,5 = 30.12.1899 12:00:00
    So gesehen gibt es eigentlich keinen wirklichen Unterschied zwischen irgendeiner Gleitkommazahl und einem Datum.
    Die Darstellung des Wertes als Datum ist nur eine Frage der Formatierung der Zelle. Man muss Excel also nur "mitteilen" dass der Wert ein Datum darstellt und als solches angezeigt werden soll.


    Das "benutzerdefinierte Zellformat"
    TT.MM.JJJJ hh:mm:ss
    sollte das von dir gewünschte Ergebnis liefern.


    CS
    Harold

  • Hallo Harold,


    danke für den Tipp.
    Das funktioniert nicht. Da kommt raus der 10.07. 8629 0:00.
    In meiner Formel oben fehlt meiner Meinung nach die Berechnung für die Uhrzeit.


    Gruß Dietmar

  • Hallo Dietmar,


    wie Harold es beschrieben hat, sollte es eigentlich gehen. Siehe mein Bildschirmfoto. Spalte A als Zahl mit 4 Dezimalen formatieren, Spalte B wie zu sehen. Auf Punkte und Kommata bei der Eingabe achten!


  • Hallo Dietmar,


    um dein Problem zu verstehen und dir helfen zu können, würde es vermutlich sehr helfen, wenn du einige Beispiele von Werten in deiner Eingabezelle "A3" mit ihrer ursprünglichen Bedeutung bzw. Interpretation und das von dir erwartete Ausgabeergebnis nennen köntest.


    Die von dir Eingangs angegebene Formel ändert ja nichts an der Art des Wertes. Letztlich ist es nur eine Verschiebung des Wertes von Zelle A3 auf der Zeitachse:


    Ausgabewert = A3 + DATUM(2000;1;1) - 2451544,5
    <=>
    Ausgabewert = A3 + 36526 - 2451544,5


    Damit das funktionieren kann, muss in jedem Fall dein Eingangswert in Zelle A3 so "gebaut" sein, dass 1 = ein Tag ist. Ist das nicht der Fall, muss der Wert aus A3 zuerst in dieses Schema umgerechnet werden.
    Auch muss das Ergebnis nach dem 30.12.1899 liegen. Für "negative", also frühere Zeiten ist der Kalender meines Wissens nicht implementiert. Da müsste man sich tatsächlich die Kalenderlogik selber nachbauen.


    CS
    Harold

  • Hallo Hans, Hallo Harold,


    Ich habe nun ein richtiges Ergebnis.
    Die Formel war richtig. Mein Zahlenformat in Zelle A3 ist der Fehler.
    Ich lasse mir per VBA das CSV File vom Muniwin in Text in Spalten formatieren.
    Da liegt der Fehler drin.
    Ich kann, warum weiß ich noch nicht, das Format der Zelle A3 nicht in das Format 1234567,1234567 ändern.
    Wenn ich Zelle A3 einstelle auf--Zahl--kein 1000er Trennzeichen--Dezimalstellen 7, dann kommt eben meine 14 Stellige Zahl mit 7 Nullen hinten dran raus. Also 21 Stellen.
    DA stehe ich noch auf dem Schlauch.
    Ich mache mal einen Screen Shot und stelle den rein.


    Vielen Dank nochmal für eure Unterstützung!


    Gruß Dietmar

  • Hallo Dietmar,


    deine lezte Info klingt mir sehr nach einer falschen Übernahme der Daten aus dem CSV bzw. einem formatierten CSV in deutscher Zahlennotation.


    VBA "denkt" englisch. Das Dezimaltrennzeichen ist hier der Punkt. Tausendertrennzeichen sind in VBA bei der Interpretation von Zeichenfolgen unzulässig und müssen vorher entfernt werden.
    Val("1.234.567,123) liefert - nicht wie man vielleicht nach deutscher Notation erwarten würde 1234567,123 sondern 1,234.
    Val("1,234,567.123") liefert lediglich 1, da ein Komma in VBA kein Bestandteil eine Zahl ist .


    val(replace(replace("1.234.567,123", ".", ""),",",".")) liefert 1234567,123


    CS
    Harold

  • Dietmar,
    was Harold sagt ist noch nicht alles. Eine Zelle, die, weil das Zahlenformat durch unbrauchbare Zeichen (z.B. Punkt anstelle von Komma) nicht als Zahl erkannt wird, wird zu einer Zelle, die Excel beim CSV-Import als Text 'formatiert'. Das hat ungeahnte Seiteneffekte:


    Beispiel: "0815" als Text behält die führende Null, als Zahl steht da 815, es sei denn, man formatiert die Zelle als Zahl mit "0000" (man zwingt ihr eine vierstellige Darstellung auf). Beim Sortieren der Zellen werden aber Texte und Zahlen getrennt. Aus
    814
    "0815"
    816


    wird dann


    "0815"
    814
    816 ... und keine Sau weiß dann warum.


    Konkret in Deinem, Fall: Zellen mit 0:00h als Zeit haben keine Nachkommawerte und könnten richtig als Zahl reinkommen. Zellen mit anderen Uhrzeiten kommen als Text rein.


    Nur zur Abgrenzung:
    Postleitzahlen sollten besser als Text eingelesen werden, mit denen soll keiner "rechnen". Spätestens, wenn jemand ein "D-" im Adressfeld davor hat, gibt es sonst Probleme, dito IBAN, ISBN, Sternkatalognummern etc.

  • Hallo,


    ja ihr habt völlig recht mit dem Punkt Komma Dilemma in Excel deutsch.
    Ich musste meinen Rechner in der Warte umstellen, weil Programme wie TheSky X und MAxim nicht zusammen kommuniziert haben mit CCD Commander.


    Nun zur Frage wie muss mein VBA aussehen um die Zellen in Spalte A3 richtig zu formatieren?
    Ich stelle mal das zur Zeit verwendete ein.
    Nach dem Text in Spalten VBA habe ich noch Werte begrenzt und Hochkomma weg. Weil ja das Format immernoch Text (Hochkomma) enthält.
    Ich bastel um das Problem rum, anstatt es zu beheben.
    Habe 3 Screen Shots hochgeladen, sobald die frei sind stelle ich sie rein.


    Ich brauche "nur" ein VBA das Text in Spalten macht ohne das Hochkomma und die Formatierung des Zahlenformats (#######,#######) richtig in Spalte Ab A3 schreibt.
    Wenn es hilft kann ich mal das csv File mit den Daten senden, oder mein Excel Programm.


    Werde jetzt noch etwas "basteln" im Excel.


    Gruß Dietmar

  • Hallo Dietmar,


    ja, es hilft, wenn Eingangsdaten und Programm im aktuellen Zustand bekannt sind. :)
    Es handelt sich ja in beiden Fällen um einfachen Text. Insofern kannst Du vielleicht die ersten z.B. 10 Zeilen des CSV und den Programmabschnitt, über den du die Daten einliest, direkt hier posten.


    Der Hinweis von Kalle ist bei Excel auch immer wichtig. Merkwürdige Effekte der beschriebenen Art kann man ggf vermeiden, indem man Excel davon abhält selber zu bestimmen, was für ein Format denn wohl passt.
    Im Kalkulationsblatt hilft oft, die Zellen VOR einfügen der Daten im gewünschten Format zu formatieren. Nachträgliches formatieren funktioniert nicht immer. Gelegentlich werden die enthaltenen Werte trotz nun scheinbar passend eingestelltem Format immer noch falsch behandelt. In meinen Augen ein sehr unschönes Verhalten (Fehler?) in Excel, da ggf. schlecht zu erkennen.
    Bei Programmen hilft das explizite casten in einen bestimmten Typ bzw. Aufnahme des auszugebenden Wertes in eine typisierte Variable, die dann in die Zelle ausgegeben wird. Implizit definierte Variablen ohne klaren Typ können ein Fallstrick sein.


    option explicit am Beginn des VBA-Moduls erzwingt die Deklaration der Variablen und vermeidet so auch Fehler durch Tippfehler in Variablennamen.
    Variant Tyen nur verwenden, wenn nötig! Deklaration von Variablen immer typisiert also z.B. dim MeineZahl# für eine Gleitkommazahl. (grob) falsche bzw. unpassende Werte führen dann ggf. zu Laufzeitfehlern und sind so leichter zu finden.


    CS
    Harold

  • Hallo,


    nun ein paar Bilder.


    Text in Spalten


    Punkt durch Komma


    Hochkomma weg


    Was ich da gemacht habe ist wohl sehr umständlich, habe es nach meinen Möglichkeiten versucht.


    Ich bin mir sicher, dass das alles einfacher geht.
    Die einzelnen Makros lasse ich mit einem anderen Makro hintereinander ablaufen.


    PS: kann ich hier ein csv File einstellen?


    Gruß Dietmar

  • Hallo Dietmar,


    um den Inhalt vom CSV "im Original" zu sehen und kopieren zu können, die CSV-Datei über den Explorer über "Öffnen mit" aufrufen und hierfür den Editor wählen.


    Sehe ich es richtig, dass du das CSV einfach mit Excel aufrufst und dann mit den enthaltenen Daten weiterarbeitest?


    Was ist bei Aufruf des Makros "Text_in_Spalten" markiert? Kannst Du diesen markierten Inhalt hier bitte auch einmal einfügen?


    Kannst du bitte auch noch einmal alle Makros als einfachen Text einfügen. (Ich bin ein wenig zu faul das abzutippen.) Dann kann ich das einmal "live" testen und ggf anpassen. (Ich programmiere sehr wenig mit Excel und auch mehr "zu Fuß". So gesehen bin ich mit den Excel-spezifischen Worksheet-Funktionen nicht unbedingt "per Du".


    CS
    Harold


    PS:
    ich ergänze mal einen mini-Programmschnipsel, der eine CSV Zeichenfolge aus Zelle A3 zerlegt und ausgibt:


    Reihe 1: "as is"
    Reihe 2: "geputzt" als Zahlen
    Reihe 3: Zahl in ein Datum "konvertiert" (implizite Formatierung)
    Reihe 4: Das Datum als manuell formatierter Text


    Vielleicht kannst du hiermit ja schon etwas anfangen. Deine Berechnung mit der Verschiebung des Wretes lässt sich auf die Zellenwerte in den Reihen 2 und 3 anwenden.



    Sub TextToCol()
    Dim CSV_Datumswerte As String
    Dim Datumswert
    Dim i As Integer
    i = 0
    CSV_Datumswerte = Cells(3, 1).Value
    For Each Datumswert In Split(CSV_Datumswerte, ";")
    i = i + 1
    Cells(4, i).Value = CStr(Datumswert)
    Cells(5, i).Value = Val(Replace(Replace(Replace(Datumswert, """", ""), ".", ""), ",", "."))
    Cells(6, i).Value = CDate(Val(Replace(Replace(Replace(Datumswert, """", ""), ".", ""), ",", ".")))
    Cells(7, i).Value = Format$(CDate(Val(Replace(Replace(Replace(Datumswert, """", ""), ".", ""), ",", "."))), "dd.mm.yyyy hh:nn:ss")
    Next
    End Sub

  • Ich möchte die Schäden, die das Beharren auf das schwachsinnige Dezimalkomma im Deutschen verursacht, nicht ermessen. Bei CSV ist das Spaltentrennszeichen in Deutschland ein ";", weil man ja nicht das anderswo normale "," nehmen kann. Bei wie vielen Windows-Rechnern habe ich die Datumseinstellungen auf Dezimalpunkt umgestellt? Wie viele Studis kamen mit scheinbar erratischen Ergebnissen dieser Art zu mir. Wann wird das mal endlich reformiert?


    Hartwig

  • Hallo Kollegen,


    zuerst mal das CSV im Editor kopiert und eingefügt.
    Ich hoffe das klappt.


    JD,V-C,s1
    2457909.3707176,-0.22331,0.00579
    2457909.3712037,-0.22545,0.00582
    2457909.3716898,-0.23886,0.00585
    2457909.3721759,-0.21956,0.00581
    2457909.3744560,-0.22515,0.00547
    2457909.3749537,-0.22440,0.00537
    2457909.3754282,-0.21573,0.00526
    2457909.3759028,-0.21679,0.00530
    2457909.3763889,-0.23060,0.00512
    2457909.3768634,-0.22846,0.00528
    2457909.3773495,-0.23202,0.00518
    2457909.3778241,-0.22192,0.00519
    2457909.3782986,-0.22454,0.00523
    2457909.3787847,-0.22333,0.00521
    2457909.3792593,-0.20636,0.00563
    2457909.3797338,-0.21723,0.00621
    2457909.3802199,-0.23514,0.00575
    2457909.3806944,-0.22636,0.00560
    2457909.3811806,-0.22865,0.00565
    2457909.3816551,-0.22528,0.00536
    2457909.3821296,-0.23922,0.00518
    2457909.3826157,-0.24122,0.00501
    2457909.3830903,-0.24654,0.00496
    2457909.3840394,-0.26659,0.00484
    2457909.3845255,-0.25642,0.00481
    2457909.3859491,-0.28891,0.00465
    2457909.3864236,-0.29555,0.00457
    2457909.3964005,-0.53626,0.01615
    2457909.3968866,-0.54948,0.01769
    2457909.3973611,-0.61177,0.01267
    2457909.3978356,-0.64907,0.01230
    2457909.3983218,-0.66622,0.01278
    2457909.3987963,-0.70219,0.01280
    2457909.3992824,-0.72281,0.01162
    2457909.3997569,-0.78161,0.00679
    2457909.4002315,-0.83957,0.00780
    2457909.4007176,-0.83541,0.01046
    2457909.4011921,-0.87835,0.00745
    2457909.4016782,-0.91081,0.00826
    2457909.4021528,-0.92031,0.00893
    2457909.4026273,-0.94643,0.00714
    2457909.4031134,-0.98582,0.00619
    2457909.4035880,-0.99713,0.00534
    2457909.4069444,-1.01748,0.00574
    2457909.4074306,-1.03259,0.00363
    2457909.4103009,-1.00721,0.00443
    2457909.4107870,-1.00441,0.00421
    2457909.4131829,-0.99444,0.00368
    2457909.4141435,-0.98985,0.00361
    2457909.4146181,-0.96575,0.00346
    2457909.4150926,-0.96239,0.00342
    2457909.4155787,-0.96306,0.00338
    2457909.4160532,-0.95421,0.00333
    2457909.4179745,-0.92034,0.00353
    2457909.4184491,-0.91997,0.00371
    2457909.4189352,-0.90954,0.00388
    2457909.4194097,-0.91561,0.00385
    2457909.4198843,-0.90199,0.00358
    2457909.4203704,-0.89300,0.00348
    2457909.4208449,-0.88030,0.00336
    2457909.4213194,-0.87937,0.00330
    2457909.4218056,-0.86385,0.00334
    2457909.4222801,-0.85244,0.00331
    2457909.4227662,-0.85589,0.00326
    2457909.4232407,-0.84465,0.00324
    2457909.4237269,-0.82840,0.00324
    2457909.4242014,-0.84728,0.00342
    2457909.4246875,-0.81838,0.00348
    2457909.4251620,-0.81011,0.00351
    2457909.4256366,-0.80815,0.00357
    2457909.4261227,-0.74439,0.00785
    2457909.4270833,-0.55538,0.03474
    2457909.4275579,-0.85733,0.00650
    2457909.4280440,-0.75818,0.00405
    2457909.4285185,-0.79400,0.00436
    2457909.4289931,-0.77536,0.00603
    2457909.4294792,-0.70399,0.00569
    2457909.4299537,-0.74244,0.00407
    2457909.4304398,-0.76520,0.00435
    2457909.4309144,-0.70963,0.00468
    2457909.4313889,-0.66747,0.00617
    2457909.4318750,-0.70395,0.00371
    2457909.4323495,-0.69028,0.00371
    2457909.4328356,-0.71142,0.00444
    2457909.4333102,-0.64014,0.00491
    2457909.4337847,-0.68366,0.00429
    2457909.4342708,-0.67372,0.00384
    2457909.4347454,-0.67987,0.00379
    2457909.4352315,-0.66193,0.00360
    2457909.4357060,-0.64766,0.00366
    2457909.4361806,-0.64662,0.00359
    2457909.4366667,-0.64323,0.00353
    2457909.4371412,-0.63060,0.00372
    2457909.4376273,-0.64439,0.00365
    2457909.4381019,-0.63308,0.00366
    2457909.4385764,-0.62362,0.00355
    2457909.4390625,-0.61143,0.00363
    2457909.4395370,-0.61218,0.00349
    2457909.4400231,-0.60860,0.00358
    2457909.4404977,-0.60172,0.00348
    2457909.4409838,-0.60355,0.00351
    2457909.4414583,-0.60022,0.00355
    2457909.4419329,-0.57976,0.00361
    2457909.4424190,-0.58659,0.00361
    2457909.4428935,-0.59029,0.00357
    2457909.4433796,-0.58827,0.00369
    2457909.4438542,-0.56216,0.00378
    2457909.4443287,-0.55811,0.00377
    2457909.4448148,-0.56023,0.00384
    2457909.4452894,-0.56200,0.00375
    2457909.4457639,-0.54729,0.00392
    2457909.4462500,-0.55332,0.00376
    2457909.4467245,-0.56123,0.00382
    2457909.4472106,-0.54130,0.00368
    2457909.4476852,-0.54914,0.00362
    2457909.4481713,-0.53141,0.00390
    2457909.4486458,-0.52954,0.00410
    2457909.4491319,-0.52450,0.00370
    2457909.4496065,-0.52345,0.00362
    2457909.4500926,-0.51079,0.00371
    2457909.4505671,-0.51860,0.00395
    2457909.4510417,-0.51050,0.00384
    2457909.4515278,-0.49785,0.00387
    2457909.4520023,-0.49225,0.00388
    2457909.4524884,-0.48905,0.00386
    2457909.4529630,-0.48937,0.00396
    2457909.4534491,-0.47596,0.00409
    2457909.4539236,-0.47975,0.00411
    2457909.4558449,-0.46639,0.00401
    2457909.4563194,-0.46206,0.00399
    2457909.4568056,-0.46118,0.00386
    2457909.4572801,-0.45155,0.00385
    2457909.4577662,-0.45569,0.00393
    2457909.4582407,-0.44323,0.00397
    2457909.4587269,-0.42806,0.00409
    2457909.4592014,-0.44264,0.00404
    2457909.4596759,-0.43517,0.00407
    2457909.4601620,-0.40727,0.00447
    2457909.4606366,-0.43126,0.00539
    2457909.4611111,-0.42117,0.00628
    2457909.4615972,-0.44519,0.00645
    2457909.4620718,-0.40553,0.00488
    2457909.4625463,-0.42416,0.00457
    2457909.4630324,-0.41262,0.00431
    2457909.4635069,-0.41196,0.00402
    2457909.4639815,-0.41067,0.00413
    2457909.4644676,-0.40974,0.00405
    2457909.4649421,-0.39614,0.00401
    2457909.4654282,-0.40508,0.00385
    2457909.4659028,-0.38977,0.00390
    2457909.4663773,-0.39370,0.00389
    2457909.4668634,-0.39062,0.00389
    2457909.4673380,-0.38311,0.00396
    2457909.4678241,-0.38218,0.00386
    2457909.4682986,-0.38338,0.00391
    2457909.4687731,-0.37861,0.00414
    2457909.4692593,-0.37343,0.00399
    2457909.4697454,-0.37246,0.00409
    2457909.4702199,-0.36562,0.00435


    dann kommen die Makros


    1. Text in Spalten


    Sub Text_in_Spalten()
    '
    ' Text_in_Spalten Makro


    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("A3"), DataType:=xlDelimited, _
    TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True

    End Sub


    2. Punkt durch Komma ersetzen


    Sub PunktErsetzen()


    Dim rngZelle As Range, rngBereich As Range
    Set rngBereich = ActiveSheet.Range("A3:C500") 'Bereich hier ändern
    For Each rngZelle In rngBereich
    rngZelle.Value = Application.WorksheetFunction.Substitute(rngZelle, ".", ",") 'Suchen und Ersetzen
    Next
    End Sub



    3. Hochkomma weg


    Sub Delete_HochKomma()
    Dim rngCell As Range
    For Each rngCell In ActiveSheet.UsedRange
    rngCell.FormulaLocal = rngCell.FormulaLocal
    Next rngCell
    End Sub


    4. Werte begrenzen


    Sub Wertebegrenzung()
    Dim rng As Range
    For Each rng In Range("B3:C500")
    If rng.Value > 1 Then rng.ClearContents
    If rng.Value < -1 Then rng.ClearContents
    Next
    End Sub



    Das CSV zerlegen Tool bringt eine Fehlermeldung. "Laufzeitfehler 6 Überlauf"


    Soweit erst mal der Stand.
    Werde jetzt noch etwas weiter machen.


    Viele Grüße
    Dietmar

  • Hallo Harold,


    ich hoffe es hilft bei der Analyse meines Dilemmas.
    Ich markiere im CSV die erste Spalte also A und kopiere sie in meine Mappe.
    Die (A) bleibt angewählt und wird anschließend mit Text in Spalten zerlegt.


    So ich hoffe alles beantwortet zu haben.
    Wenn noch Bilder fehlen, sagt bescheid.


    Gruß Dietmar

  • Hallo Dietmar,


    so wird die Sache klarer.


    Ich habe mal eine VBA-Rotine zusammengestrickt, die die Daten aus einer CSV-Datei entsprechend dem Beispielformat extrahiert und passend**(?) formatiert in Excel einfügt.


    Es muss nichts in Excel eingefügt werden. Die Prozedur enthält den Dialog zur Dateiauswahl.


    **: Ich lese Die Daten als ein julianisches Datum, jeweils gefolgt von zwei Zahlen.


    Der Import liefert in den ersten Zeilen:
    04.06.2017 20:53:50 -0,223310 0,005790
    04.06.2017 20:54:32 -0,225450 0,005820
    04.06.2017 20:55:14 -0,238860 0,005850
    04.06.2017 20:55:56 -0,219560 0,005810
    04.06.2017 20:59:13 -0,225150 0,005470


    CS
    Harold



    Hier die Routine (etwas "roh"):


    Sub muniwinImport()
    Dim lngCount As Long
    Dim MuniWinFile As String
    Dim CSV_Zeile$

    Dim CSV_Feldwert As Variant
    Dim CSV_Zahl As Double
    Dim Datumswert As Double
    Dim Spalten_Nr As Integer
    Dim Zeilen_Nr As Integer
    Dim Selection As Excel.Range

    On Error GoTo FB

    With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .InitialFileName = "C:\Users\HTRAP\Documents\MUNITST.CSV"
    .Show
    If .SelectedItems.Count = 1 Then
    MuniWinFile = .SelectedItems(1)
    Else
    'Keine gültige Dateiauswahl
    End If
    End With


    Open MuniWinFile For Input As #1

    Zeilen_Nr = 0 'Die Ausgabe beginnt bei Zeilen_Nr + 1 - also in Zeile 1
    While Not EOF(1)
    Zeilen_Nr = Zeilen_Nr + 1

    Spalten_Nr = 0 'Die Ausgabe beginnt bei Spalten_Nr + 1 - also in Zeile 1

    Line Input #1, CSV_Zeile

    If Zeilen_Nr >= 2 Then
    'Datenzeilen! Zeile 1 auslassen, da sie keine auszuwertenden Werte transportiert

    'Felder separieren und in Zielbereich ausgeben
    'Problem: Wie sieht die Eingabe aus?
    'Ohne Kenntnis der Ziel-Datenformate kann hier nur stumpf übetragen
    'und auf die richtigenFormate gehofft werden
    'Zielbaerich?
    'Transponierte Ausgabe?
    'Feldformate zu den Spaltenindizes der CSV-Eingangsdaten


    For Each CSV_Feldwert In Split(CSV_Zeile, ",")
    Spalten_Nr = Spalten_Nr + 1

    Set Selection = Cells(Zeilen_Nr, Spalten_Nr)

    CSV_Zahl = CDbl(Replace(CSV_Feldwert, ".", ",")) 'Dezimalpunkt durch Komma ersetzen
    Select Case Spalten_Nr
    Case 1: 'Die Spalte enthält offenbar das julianische Datum
    '=> Zelle passend formatieren
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"

    Datumswert = CSV_Zahl + 36526# - 2451544.5
    Cells(Zeilen_Nr, Spalten_Nr).Value = CDate(Datumswert)
    Case Else: 'Die Spalte enthält eine Gleitkommazahl
    Selection.NumberFormat = "0.000000"
    Cells(Zeilen_Nr, Spalten_Nr).Value = CSV_Zahl
    End Select
    Next
    End If

    Wend
    Close #1


    Exit Sub
    FB:
    MsgBox "Fehler beim CSV-Import: " & Error, vbExclamation

    On Error Resume Next
    Close #1
    End Sub


    (edit: Nachkommastellen in der Formatierung erweitert)

  • Hallo Harold,


    ich werde verrückt! Das läuft!
    Absoluten Respekt und vielen Dank!!
    Sowas hätte ich nie hinbekommen. Jetzt kann ich Diagramme zusammenstellen wie ich mag.
    Vorallen anhand der Helligkeit des Vergleichsterns die reale Helligkeit in Mag anzeigen lassen.


    Werde mal hier im Forum stöbern und mir Inspirationen holen zum Thema Aussehen von Diagrammen.


    PS: machst du sowas (Excel) beruflich?


    Viele Grüße Dietmar

  • Hallo Dietmar,


    schön dass es Dir weiterhilft.



    Zum stöbern bezüglich Datenaufbereitung:
    Bei der Suche nach muniwin-csv-Dateien bin ich hierüber gestolpert:
    https://www.bav-astro.eu/rb/rb2015-1/1.pdf
    Vielleicht ist das etwas?


    zum PS:
    Ja, programmiererei füllt einen nicht unerheblichen Teil meiner Arbeitszeit. Da VBA in unserem Warenwirtschaftssystem, Office und auch den Autodesk-Produkten die aktuelle Skripting-Sprache ist, komme ich damit (nach einigen 100000 Zeilen Programmcode) recht gut zurecht. Programmiert wird, was gebraucht wird bzw. die Arbeit erleichtert.
    Excel selbst ist meistens nicht das Werkzeug der Wahl, geht aber auch wenn es sein muss.


    CS
    Harold

  • Hallo Harold,


    habe ich mir schon gedacht, dass du damit professionell arbeitest.


    Ich habe einen kleinen Schönheitsfehler entdeckt.
    In den Zeilen 45 bis 48 steigen die Werte über -1,000 hinaus. Die Zahl wird aber als -01,000 ausgegeben.
    Das haut auch die Diagramme (Achsenskala) durcheinander.
    Wenn du nochmal nachschauen könntest.....


    Habe einen Screenshot gemacht, ist aber noch nicht verfügbar.


    Gruß Dietmar

  • Hallo Dietmar,


    in den genannten Zeilen steht jetzt:
    04.06.2017 21:46:00 -1,017480 0,005740
    04.06.2017 21:46:42 -1,032590 0,003630
    04.06.2017 21:50:50 -1,007210 0,004430
    04.06.2017 21:51:32 -1,004410 0,004210


    Was soll mit den Zeilen passieren?
    - löschen?
    - den Zahlenwert verändern (wie)?
    - ...


    Wenn klar ist, was du möchtest, kann ich dir das kurz anpassen.


    (edit: Die Daten sollen wohl komplett weg, wenn ich deine Makros richtig interpretiere. Modifizierte Prozedur s.u.


    edit2: nur Zahlenwerte < -1 weg. Code angepasst)


    CS
    Harold





    Sub muniwinImport()
    Dim MuniWinFile As String
    Dim CSV_Zeile$
    Dim CSV_Feldwert As Variant
    Dim CSV_Zahl As Double
    Dim Datumswert As Double
    Dim Spalten_Nr As Integer
    Dim Zeilen_Nr As Integer
    Dim Selection As Excel.Range

    On Error GoTo FB

    With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .InitialFileName = "C:\Users\HTRAP\Documents\MUNITEST.CSV"
    .Show
    If .SelectedItems.Count = 1 Then
    MuniWinFile = .SelectedItems(1)
    Else
    'Keine gültige Dateiauswahl
    MsgBox "Keine gültige Dateiauswahl! Funktion wird abgebrochen", vbExclamation
    Exit Sub
    End If
    End With


    Open MuniWinFile For Input As #1

    Zeilen_Nr = 0 'Die Ausgabe beginnt bei Zeilen_Nr + 1 - also in Zeile 1
    While Not EOF(1)
    Zeilen_Nr = Zeilen_Nr + 1
    Spalten_Nr = 0 'Die Ausgabe beginnt bei Spalten_Nr + 1 - also in Zeile 1
    Line Input #1, CSV_Zeile
    If Zeilen_Nr >= 2 Then
    'Datenzeilen! Zeile 1 auslassen, da sie keine auszuwertenden Werte transportiert
    'Felder separieren und in Zielbereich ausgeben
    For Each CSV_Feldwert In Split(CSV_Zeile, ",")
    Spalten_Nr = Spalten_Nr + 1

    Set Selection = Cells(Zeilen_Nr, Spalten_Nr)

    CSV_Zahl = CDbl(Replace(CSV_Feldwert, ".", ",")) 'Dezimalpunkt durch Komma ersetzen
    Select Case Spalten_Nr
    Case 1: 'Die Spalte enthält offenbar das julianische Datum
    '=> Zelle passend formatieren
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"

    Datumswert = CSV_Zahl + 36526# - 2451544.5
    Cells(Zeilen_Nr, Spalten_Nr).Value = CDate(Datumswert)
    Case Else: 'Die Spalte enthält eine Gleitkommazahl
    Selection.NumberFormat = "0.000000"
    Cells(Zeilen_Nr, Spalten_Nr).Value = CSV_Zahl
    End Select
    Next

    CSV_Zahl = Cells(Zeilen_Nr, 2).Value
    If (CSV_Zahl < -1#) Then
    Cells(Zeilen_Nr, 1).ClearContents
    Cells(Zeilen_Nr, 2).ClearContents
    Cells(Zeilen_Nr, 3).ClearContents
    'Zeile verwerfen bzw. mit folgenden Daten überschreiben
    Zeilen_Nr = Zeilen_Nr - 1
    End If

    End If
    Wend

    'Alte Daten am Ende der Liste verwerfen
    Set Selection = Range(Cells(Zeilen_Nr + 1, 1), Cells(Zeilen_Nr + 1000, 3))
    Selection.Clear


    Close #1


    Exit Sub
    FB:
    MsgBox "Fehler beim CSV-Import: " & Error, vbExclamation

    On Error Resume Next
    Close #1
    End Sub

  • Hallo Dietmar,


    Ich habe dein Diagramm-Problem mal grob nachgestellt. (Standard-Punktdiagramm)
    Danach ist das beschneiden der Feldwerte, wie zuletzt im Programm ergänzt, der falsche Weg. Dieser Programmabschnitt sollte nach meiner Meinung für deine Auswertungen wieder entfernt werden.


    Die Daten sind ja offenbar i.O. und werden unnötigerweise beschnitten. Das Kernproblem ist, dass Excel die Achsformatierung per Automatik nicht besonders glücklich einstellt. Mit ein klein wenig manueller "Nachhilfe" bei den Achs- und Datenreihenformaten wird es dann doch deutlich besser.
    (Datumsachse mauell als Datum formatieren, Wertachse manuell mit z.B. 0,000 formatieren.)
    Auch die Achsintervalle würde ich manuell setzen, damit sich die Beschriftung auf glatten Zeiten - z.B. Stunden-Haupt- und 5-Minuten-Hilfsraster - bewegt (Hauptintervall 0,041666666666; Hilfsintervall 0,003472222222).
    Gitternetzlinien für Haupt und Hilfsintervall. Linien für Hilfsintervall dünn, gestrichelt und mit geringer Farbdeckung, ...
    Datenpunktmarkierungen kleiner und ggf. mit teil-transparenter Farbe.



    (edit: Diagrammbeispiel eingefügt)
    Bsp.:



    CS
    Harold

  • Moin,
    wenn ich regelmäßig Daten in CSV oder einfachen Textformat importiere, richte ich ein extra Importblatt dafür ein, um dort den Import "aufzubereiten", bevor er in meiner Auswertung landet.
    Mittels Kontrollsummen in der Kopfzeile kann man auch Ausreißer sofort erkennen. Z.B. indem man eine Spalte einfügt, die nur die Formel
    "=isttext(Quelle)+0 enthält (bzw. istzahl()). Oben in die Kopfzeile dann einfach
    =Wenn(Summe(kontrollzellen)=Anzahl(Importzellen);"OK";"Fehler")
    Das geht mit jeder anderen Prüfung natürlich auch und man sieht sofort, wenn was falsch läuft. Ich habe keine Ahnung, wie die Importdaten bei Dir aufgebaut sind, aber kannst Du ausschließen, dass nicht irgendwo, ab und zu mal ein NV-Wert enthalten ist?

  • Hallo Kalle,


    sprichst Du hier Dietmar an?


    Nach dem bisherigen Verlauf denke ich, dass Dietmars Erfahrungen mit Excel noch relativ gering sind. Ich weiß nicht, ob er Deine Info so zum jetzigen Zeitpunkt einordnen und verwerten kann.



    Direktere Hinweise auf Abweichungen vom Zielformat sind in meinen Augen intuitiver über bedingte Formatierungen aufzuzeigen.


    Wenn eine Zahl erwartet wird, die Zelle aber keine Zahl enthält ist
    <font color="orange">
    =(ISTZAHL(INDIREKT(ADRESSE(ZEILE();SPALTE())) )=falsch)
    </font id="orange">
    eine geeignete Bedingungsformel für z.B. einen roten Zellhintergrund.


    für komplexere Bedingungen können ggf auch eigene VBA-Funktionen erstellt werden, ....


    Ich denke aber, dass das hier im Moment zu weit führt.




    --------------
    Der gepostete Import-Code hat eine rudimentäre Fehlerbehandlung, die den beim casten unpassender CSV-Feldinhalte in das gewünschte Zielformat auftretenden Laufzeitfehler "abfängt" und die Datenübernahme abbricht.


    Das programmtechnisch so aufzubohren, dass fehlerhafte Eingabezeilen erkannt, separiert und erkannte Abweichungen als Klartext gemeldet werden ist einfach - wenn man bereits ein wenig Programmiererfahrung hat.
    Ggf. werde ich das nachher noch ergänzen. Das mag Dietmar oder anderen interressierten Mitlesern helfen, eigene, ähnlich gelagerte Probleme zu lösen.



    CS
    Harold

  • Harold,
    gerade, wenn keine größeren Erfahrungen im Umgang mit Excel bestehen, lohnt es sich, den Workflow in Excel auf separate Blätter abzubilden.
    Z.B. ein Blatt für Import, ein weiteres für Auswertung, ein drittes für die Ausgabe/Grafik.


    Bei kleinen Datenmengen (die komplett auf den Bildschirm passen), ist die bedingte Formatierung sicher eine gute Wahl. Aber wenn es mehr werden, so meine Erfahrung, nutze ich eine Kopfzeile für - ich nenne es mal - summarische Kontrollangaben. Die fixiere ich durch Fensterteilung/Fixierung. Die eigentlichen Eingaben landen dann erst ab Zeile 3. So sieht man anhand Zeile 2, ob man auch tatsächlich nach oben gescrollt hat, wenn man große Bereiche markiert.


    Leider lehrt mir meine Berufserfahrung, dass händisches Arbeiten mit Excel mehrere Fehler je Stunde Arbeit erzeugt. Entweder man hat eine zweite Instanz, die kontrolliert oder man baut so viel wie möglich Kontrollbedingungen in seinen Workflow ein, um den Großteil sofort zu erkennen. Mein Vorschlag oben kommt zudem ohne VBA-Programmierung aus und lässt sich auch 4 Wochen später noch nachvollziehen. Die bedingten Formatierungen haben den Nachteil, dass man der Zelle nicht gleich ansieht, ob sie formatiert ist oder nicht, es sei denn, man formatiert gleich den Komplementärfall mit z.B. Rot bei Fehler, grün bei OK, gelb wenn Zelle nicht befüllt, aber bedingt formatiert ist. Ist sie dann ohne Farbe, fehlt die Formatierung, aus welchem Grund auch immer.


    Der Nachteil von VBA/Makros ist regelmäßig, dass sie nicht dokumentiert sind und man später kaum noch weiß, was alles gemacht wird. Deshalb bevorzuge ich klassische Formeln in Extra-Kontrollspalten sowie die Kommentarfunktion zu Zellen.


    Das alles hört sich vielleicht anfangs etwas umständlich an, aber die vielen Fallstricke in Excel haben es nunmal in sich. So Projekte wachsen ja auch über die Zeit und man erspart sich viel Ärger, wenn man so viel wie möglich in Excel selbst dokumentiert.



    Gruß
    ... muss jetzt wieder zurück an so eine Excel-Daten-Tapete ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!