Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB/EXCEL] Conversione da data gregoriana a giuliana

    Salve a tutti, nella conversione da data gregoriana a giuliana ho un strano fenomeno che non riesco a capire. Mi spiego meglio:
    La mia data è nel formato: DD/MM/AAAA HH:MM
    vorrei convertirla in: AA GGG HH, considerando che
    AA sono le ultime due cifre dell'anno, GGG è il numero di giorni trascorsi dall'inizio dell'anno in corso e HH è l 'ora (tanto sono tutte intere non mi interessano i minuti).
    Ecco cosa ho prodotto finora:
    Codice PHP:
    Sub GregToGiul()

        
    Dim fI As Worksheet
        Set fI 
    ThisWorkbook.Worksheets("Input")
        
    Dim rigaInput As Integer
        Dim Julian 
    As String
        Dim day 
    As String
        Dim hours 
    As String
        
    For rigaInput 2 To fI.Cells(fI.Rows.Count1).End(xlUp).Row

    years 
    Format(fI.Cells(rigaInput1), "yyyy")
    hours Format(fI.Cells(rigaInput1), "hh:mm")
    Date Format(fI.Cells(rigaInput1), "dd/mm/yyyy")
    dateTo "01/01/" years
    Julian 
    DateDiff("d"dateToDate)

    fI.Cells(rigaInput1) = Format(years"yy") & Format(Julian"d") & Format(hours"hh")

    Debug.Print "data: " fI.Cells(rigaInput1)

    Next rigaInput

    End Sub 
    es output:
    dai valori iniziali
    01/01/2008 0.00
    01/01/2008 1.00
    01/01/2008 2.00
    01/01/2008 3.00
    01/01/2008 4.00
    01/01/2008 5.00
    01/01/2008 6.00
    a
    07/02/2045 0.00
    08/02/2045 0.00
    09/02/2045 0.00
    10/02/2045 0.00
    11/02/2045 0.00
    12/02/2045 0.00
    13/02/2045 0.00
    rilanciato di nuovo
    21/01/1915 0.00
    01/05/1915 0.00
    09/08/1915 0.00
    17/11/1915 0.00
    25/02/1916 0.00
    18/08/2039 0.00
    26/11/2039 0.00

    I valori delle singole variabili prima del salvataggio qui
    Codice PHP:
    fI.Cells(rigaInput1) = Format(years"yy") & Format(Julian"d") & Format(hours"hh"
    sono corretti, ma non riesco a capire il comportamento molto random di questa assegnazione..
    Qualcuno ha qualche idea?..

  2. #2
    Fai un po' di "casino" (scusa il termine ma non trovo altre parole ) con le conversioni.

    Tieni conto che il comando "format" converte un valore di input restituendo il valore di output nel formato richiesto.

    Estrapolando dal tuo esempio un paio di istruzioni si può notare l'anomalia:
    codice:
    years = Format(fI.Cells(rigaInput, 1), "yyyy") 
    ... Format(years, "yy") ...


    Noti l'anomalia??? Prima estrai da una data l'anno di 4 cifre. Poi il risultato chiedi di convertirlo in un anno a due cifre. Ma l'input di questa ultima conversione non è una data. Il risultato è: VVoVe:

    Inoltre un altro errore è utilizzare nomi di variabili uguali a nomi di funzioni:
    codice:
    Date = Format(fI.Cells(rigaInput, 1), "dd/mm/yyyy")
    Date è una funzione!!! Cambia nome.

    Quindi ti segnalo un metodo per calcolare quello che ti serve (forse non il migliore, ma funzionale!).

    1) Dalla data di input estrai l'anno di due cifre.
    2) Dalla data di input estrai l'ora di due cifre.
    3) Il calcolo del numero di giorni dall'inizio dell'anno lo fai correttamente; continua ad usare quel metodo (okkio però: adesso l'anno che estrai precedentemente è di due cifre!!!)
    4) Concatena tutto in una stringa trattando tutti i dati per quello che sono, ovvero numerici!!!

    Piccolo aiuto in più:
    codice:
    Format(unNumero, "00000")
    Questa funzione restituisce qualsiasi numero passato nel primo argomento con tante cifre quante indicate dagli "zero" del secondo argomento (anteponendo gli zero non significativi davanti).

    codice:
    "Alfa" && "Bravo" && "Charlie" ...
    L'operatore "&&" concatena le stringhe.

    A te tradurre tutto in codice.



    P.S. Scusa se la mia risposta è un po' confusa e prolissa; ma stanotte ho dormito 1ora e mezza (ed ora comincio a sentirne gli effetti)....
    A tutti i COBOL-isti/CICS-isti/DB2-isti come me: l'adunanza è iniziata; ne resterà soltanto uno.
    È meglio bruciare subito, che spegnersi lentamente.

    Per fare un fumetto di successo ci voglio le tre "A": Azione - Avventura - Atette
    Ratman

  3. #3
    risposta chiarissima come sempre...
    l'unica cosa che non mi torna è la && nel concatenare le stringhe, mi funziona solo se ne metto una sola..
    Il codice funzionante è questo:
    Codice PHP:
    For rigaInput 2 To fI.Cells(fI.Rows.Count1).End(xlUp).Row  
    years4 
    Format(fI.Cells(rigaInput1), "yyyy"
    years2 Format(fI.Cells(rigaInput1), "yy")
    hours Format(fI.Cells(rigaInput1), "hh"
    gregorian Format(fI.Cells(rigaInput1), "dd/mm/yyyy"
    dateTo "01/01/" years4 
    julian 
    DateDiff("d"dateTogregorian)  
    fI.Cells(rigaInput1) = years2 " " julian " " hours  
    Next rigaInput 
    non è certo alta programmazione ma fa quello che serve..
    grazie dell'aiuto...

  4. #4
    Originariamente inviato da mainframe
    l'unica cosa che non mi torna è la && nel concatenare le stringhe, mi funziona solo se ne metto una sola..
    Originariamente inviato da Pippolik
    ...stanotte ho dormito 1ora e mezza (ed ora comincio a sentirne gli effetti)....
    Per l'appunto
    Come hai detto tu, basta una sola "&".
    A tutti i COBOL-isti/CICS-isti/DB2-isti come me: l'adunanza è iniziata; ne resterà soltanto uno.
    È meglio bruciare subito, che spegnersi lentamente.

    Per fare un fumetto di successo ci voglio le tre "A": Azione - Avventura - Atette
    Ratman

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.