|
Login
  • Page:
  • 1

TOPIC: Numero memorizzato come testo

Numero memorizzato come testo 7 years 4 months ago #8979

  • jekko
  • jekko's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 5
  • Karma: 0
Ciao,
premetto che non conosco assolutamente VBA e le macro le ho fatte solo con il registratore di Excel.

Devo convertire (molto spesso) un CSV che ha sempre la stessa forma, generato da un home banking, in un file excel con un layout stabilito da me.

Il file in oggetto, uscito dal CSV, ha i numeri decimali separati dal PUNTO anzichè dalla virgola e non riesco ad operare aritmeticamente sui valori.



Sempre con le macro, riesco a sostituire nella colonna i "punti" con le "virgole" ma quando li vado a modificare Excel restituisce il messaggio di fianco ad ogni numero "numero memorizzato come testo" (triangolo verde) e non mi lascia operare aritmeticamente sui valori



Ora, mediante il registratore di macro, ho provato a dargli il comando "converti in numero", ma excel non riesce a registrare nella macro questo comando.

Come posso dire alla macro che quelli sono effettivamente numeri in modo da poi riuscire ad eseguirci calcoli sopra?

Grazie mille a chi mi vorrà aiutare.
Ciao

qualora possa servire, allego il codice VBA generato dal registratore di macro
' Scelta rapida da tastiera: CTRL+a
'
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Foglio2"
    Sheets("Foglio1").Select
    Cells.Select
    Cells.Copy
    Sheets("Foglio2").Select
    ActiveSheet.Paste
    Columns("A:B").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:C").Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Columns("D:D").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
The administrator has disabled public write access.

Numero memorizzato come testo 7 years 4 months ago #8980

  • lorenzo1957
  • lorenzo1957's Avatar
  • OFFLINE
  • Platinum Boarder
  • Posts: 849
  • Thank you received: 59
  • Karma: 51
Ciao Jekko,
io renderei i pseudo numeri veri numeri con questa:
Sub VeriNumeri()
range("c1:c100").select 'Columns("C:C").Select ' ridurrei il range anche perchè se c'è zero lo evidenzia
For Each cl In Selection
cl.Value = cl.Value * 1
Next
End Sub

oppure con CDbl:

Range("c1:c100").Select
For Each cl In Selection
cl.Value = CDbl(cl.Value)
Next

Entrambi i codici puoi accodarli al tuo codice
ciao, Lo
Last Edit: 7 years 4 months ago by lorenzo1957.
The administrator has disabled public write access.

Numero memorizzato come testo 7 years 4 months ago #8981

  • jekko
  • jekko's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 5
  • Karma: 0
Lorenzo,

intanto grazie per l'aiuto che mi hai dato.
Il sistema in sostanza funziona, solo che quando lancio la macro lui mi restituisce Errore runtime 13 - tipo non corrispondente.
Però se io faccio debug e vedo il foglio, lui mi ha reso i numeri veri.

Posso immaginare che la ragione dell'errore sia che quando lui trova la prima cella vuota non riesce a "convertirla".

Per cui ti chiederei l'enorme cortesia (davvero enorme) di modificare il codice che hai scritto da
"da c1 a c100"
a
"parti da c1 e ripeti fino a quando non trovi una cella vuota"

Credimi, non è mio costume chiedere del codice scritto di sana pianta. In genere scrivo del codice che magari non funziona e poi chiedo nei forum dov'è che sbaglio.
Purtroppo però siccome di VBA non so assolutamente nulla, in questo caso non saprei nemmeno da che parte cominciare :(

Grazie infinite per l'aiuto che mi hai dato fino adesso.
Ciao!
The administrator has disabled public write access.

Numero memorizzato come testo 7 years 4 months ago #8982

  • lorenzo1957
  • lorenzo1957's Avatar
  • OFFLINE
  • Platinum Boarder
  • Posts: 849
  • Thank you received: 59
  • Karma: 51
jekko wrote:
Posso immaginare che la ragione dell'errore sia che quando lui trova la prima cella vuota non riesce a "convertirla".
Per cui ti chiederei l'enorme cortesia (davvero enorme) di modificare il codice che hai scritto da: "da c1 a c100"
a: "parti da c1 e ripeti fino a quando non trovi una cella vuota"
Questa:
Sub macro1()
Range("c1").Select
Do Until ActiveCell.Value = "" 'esegui loop finchè la cella attiva non diventa vuota
ActiveCell.Value = CDbl(ActiveCell.Value)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Fa quanto desideri, a condizione che da C1 a Cn ci siano solo numeri e non celle vuote e/o valori alfabetici diversi da quelli trasformabili in cifre.
Da migliorare quindi!
ciao, Lo
Last Edit: 7 years 4 months ago by lorenzo1957.
The administrator has disabled public write access.

Numero memorizzato come testo 7 years 4 months ago #8983

  • lorenzo1957
  • lorenzo1957's Avatar
  • OFFLINE
  • Platinum Boarder
  • Posts: 849
  • Thank you received: 59
  • Karma: 51
Jekko,
ecco, in alternativa potresti usare questa:
Sub macro2()
Range("c1:c100").Select
For Each cl In Selection
If cl.Value <> "" Then
If cl.Value <> 0 Then
If Left(cl.Value, 1) < "a" Then
cl.Value = CDbl(cl.Value)
End If
End If
End If
Next
End Sub

che discrimina i vuoti, gli zeri, le stringhe che iniziano con valori superiori ad A

ciao, lo
The administrator has disabled public write access.

Numero memorizzato come testo 7 years 4 months ago #8984

  • jekko
  • jekko's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 5
  • Karma: 0
Infatti così funziona!

Ho visto che devo studiarmi un po' il VBA :P

Sai se in internet c'è qualche corso fatto in maniera discreta?

Grazie mille!
The administrator has disabled public write access.
  • Page:
  • 1
Time to create page: 0.379 seconds