Dimensione vba



  • Dimensione vba
    di Fra21 (utente non iscritto) data: 06/03/2010

    Ciao a tutti.
    la mia situazione è la seguente: ho una colonna di dati scritta come
    1.234e+04
    0.982e+02
    0.827e+01
    ma ho un problema di "dim" in quanto io, dopo alcuni tentativi di differenti "dim", ho messo d come single (quindi in teoria dovrebbe fare la somma considerando l'esponenziale) ma riesco a fare la somma solo delle cifre antecedenti l'esponenziale.
    nel caso citato in precedenza il risultato è
    1235,809
    che invece dovrebbe essere
    12446,47 o 1,2446e+04
    inoltre nel file txt il "." identifica la virgola ma in excel lo prende come operatore delle migliaia; quindi 1.234 nel txt diventa 1234 in excel.
    tolti questi problemi il codice fa quello che voglio.
    grazie in anticipo.
     
    Sub importa()
    close number1
    Open "C:UsersfraDesktopfradiana94worksmetri_modifica 03031050310.tb" For Input As number1
    Dim b, c As String
    Dim d, Nnodi, somma_sxx As Single 
    Nnodi = 2
    b = 0
    c = "SZZ"
    Do Until b = c               'vai fino alla riga di cui mi interessa il valore
        Line Input number1, a
        b = Mid(a, 42, 3)
    Loop
    somma_sxx = 0
    For i = 1 To Nnodi
        Line Input number1, a   'input di stringa
        c = Mid(a, 26, 10)      'prendi un certo valore nella stringa
        d = CSng(c)             'converti da stringa a valore numerico
        somma_sxx = somma_sxx + d
    Next i
    Worksheets(1).Cells(4, 10) = somma_sxx
    Close number1
    End Sub
    



  • di Mabolsie (utente non iscritto) data: 06/03/2010

    Ciao, prova a non dichiarare le variabili lasciandole "variant" ti ruba un pò più di spazio alla memeoria ma dvrebbe funzionare

    caio max



  • di Fra21 (utente non iscritto) data: 06/03/2010

    Ciao mabolsie,
    grazie per il consiglio ma purtroppo non ha sortito l'effetto desiderato. ho impostato i dati come variant ma nulla è variato. altri consigli?



  • di Fra21 (utente non iscritto) data: 06/03/2010

    Ho riportato il programma completato.
    ovviamente sempre tutto ok a parte la questione esplicata precedentemente.
    per mabolsie:
    quello che mi hai detto in effetti funziona per un programma fatto in precedenza. in teoria mettendo i valori variant dovrebbe funzionare anche qui ma purtroppo non è cosi. magari la conversione?
     
    Sub importa()
    '
    ' importa Macro
    '
    Close number1
    Open "C:UsersfraDesktopfradiana94worksmetri_modifica 03031050310.tb" For Input As number1
    Dim b, c, sigmaxx, sigmayy, sigmazz As String
    Dim d, e, f, Nnodi_elemento, Nnodi_base, Nnodi_altre_sup, somma_sxx, somma_syy, somma_szz, sigmaxx_media, sigmayy_media, sigmazz_media As Single
    Nnodi_elemento = 20                           'fisso i valori dei contatori per i cicli
    Nnodi_base = 8
    Nnodi_altre_sup = Nnodi_elemento - Nnodi_base
    Nelementi = 33
    b = 0
    c = "SZZ"
    Do Until b = c                 'arrivo alla tabella numerica che mi interessa nel file .txt
        Line Input number1, a
        b = Mid(a, 42, 3)
    Loop
    For k = 1 To Nelementi
        For j = 1 To Nnodi_altre_sup  'salto i valori numerici che non mi interessano
            Line Input number1, a
        Next j
        somma_sxx = 0
        somma_syy = 0
        somma_szz = 0
        For i = 1 To Nnodi_base
            Line Input number1, a
            sigmaxx = Mid(a, 15, 10)      'valori numerici che mi interessa riportare
            sigmayy = Mid(a, 26, 10)
            sigmazz = Mid(a, 37, 10)
            d = CSng(sigmaxx)          'converto da stringa a single
            e = CSng(sigmayy)
            f = CSng(sigmazz)
            somma_sxx = somma_sxx + d
            somma_syy = somma_syy + e
            somma_szz = somma_szz + f
        Next i
        sigmaxx_media = somma_sxx / Nnodi_base
        Worksheets(1).Cells(4 + k, 5) = sigmaxx_media   'riporto il valore finale su excel
        sigmayy_media = somma_syy / Nnodi_base
        Worksheets(1).Cells(4 + k, 6) = sigmayy_media
        sigmazz_media = somma_szz / Nnodi_base
        Worksheets(1).Cells(4 + k, 7) = sigmazz_media
    Next k
    Close number1
    End Sub



  • di Mabolsie (utente non iscritto) data: 06/03/2010

    Scusa sarò un pò "gnucco" però potresti dirmi con precisione cosa non funziona ed in quale passo del programma ??
    ciao



  • di Fra21 (utente non iscritto) data: 07/03/2010

    Il problema non è in alcun passo ma penso che riguardi la dimensione che uso, o inizializzazione dei dati.
    se nel file di input .txt ho un valore scritto come:
    1.342e+04 in excel la macro me lo riporta come
    1342,00 mentre invece dovrebbe essere
    13420
    se facessi la somma di due numeri che si trovano nel .txt:
    1.231e+05
    0.986e+02
    il risultato mi viene 2217,00 (cioè 1231+986)
    mentre in realtà deve venire 123198,6 (123100+98,6)
    in pratica non mi considera l'esponenziale e la virgola la considera come separatore della migliaia a quanto ho capito.
    spero di essere riuscito a farmi capire.
     
    Sub importa()
    '
    ' importa Macro
    '
    Close number1
    Open "C:UsersfraDesktopfradiana94worksmetri_modifica 03031050310.tb" For Input As number1  'in questo file ci sono i numeri tipo 1.543e+04
    Dim b, c, sigmaxx, sigmayy, sigmazz As String   'penso che il problema sia qui anche perchè non ho errori di codice
    Dim d, e, f, Nnodi_elemento, Nnodi_base, Nnodi_altre_sup, somma_sxx, somma_syy, somma_szz, sigmaxx_media, sigmayy_media, sigmazz_media As Single 'oppure il problema è qui
    Nnodi_elemento = 20
    Nnodi_base = 8
    Nnodi_altre_sup = Nnodi_elemento - Nnodi_base
    Nelementi = 33
    b = 0
    c = "SZZ"
    Do Until b = c
        Line Input number1, a
        b = Mid(a, 42, 3)
    Loop
    ''''''da qui in poi il programma è quello postato in precedenza



  • di Fra21 (utente non iscritto) data: 08/03/2010

    Ciao a tutti, nel frattempo ho scoperto un'altra cosa curiosa.
    il valore in excel viene riportato giusto (a parte che non prende l'esponenziale) ma non sostituisce la virgola con il migliaia.
    la sostituzione però la fa in 2 occasioni:
    quando converto il file
    quando faccio la somma
    consigli?
     
    d = CSng(sigmaxx)
    
    somma_sxx = somma_sxx + d
    
    'in questi due casi il numero scritto in excel giusto 1,234 magicamente diventa 1234!
    Problema dell'esponenziale a parte, perchè non sono ancora riuscito a risolverlo
     



  • di Mabolsie (utente non iscritto) data: 08/03/2010

    Ciao fra21
    forse ti dirò una cosa ovvia ma come dichiari le variabili non è corretto infatti anche io facevo come te ma un nostro collega di forum mi ha corretto la modalità giusta è:


     
    dim a as integer,b as string,c as single,ecc...
    'oppure
    dim a as integer
    dim b as sring
    dim c as single
    ecc...
    'come fai tu
    dim a,b,c as integer
    'solo c è integer le altre a  b sono variant
    ' Ciao Max



  • di Fra21 (utente non iscritto) data: 09/03/2010

    Grazie per la dritta,
    sinceramente non lo sapevo! vediamo ora che succederà! alla prossima



  • di Ricky53 (utente non iscritto) data: 09/03/2010

    Ciao,
    attento anche a come dichiari i valori numerici

    integer ---> numero intero (ossia senza decimali)
    single ----> numero a singola precisione con decimali
    double ----> numero a doppia precisione con decimali

    approfondisci nella guida.

    ciao da ricky53