Numeri in lettere



  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Salve ho un problema per quanto riguarda la conversione da numeri in lettere. all'apertura di un foglio di excel dovrebbe partire una macro che trovando su un range di celle dei numeri(tipo 1, 3, 10 21 etc etc)me li dovrebbe convertire in:
    trovato numero 1? trasformalo in data1
    trovato numero 3? trasformalo in data3
    trovato numero 25? trasformalo in data25
    io ho provato con :
    selection.replace what:="1", replacement:="data1", lookat:=xlpart, _
    searchorder:=xlbyrows, matchcase:=false, searchformat:=false, _
    replaceformat:=false
    va tutto bene fino al numero 9, poi con il numero 10 mi scrive:
    data1data0 e non data10.
    cosa sbaglio? forse non mi riconosce il formato numero? aiutatemi grazie



  • di Enzo (utente non iscritto) data: 19/01/2010

    Ipotizzo che tu abbia utilizzato il registratore di macro e abbia ""memorizzato"" la macro utilizzando il cerca e sostituisci
    un consiglio - fa sempre dei gran casini in quanto si e' comportata in questo modo
    dove ha 10 trova il numero 1 e sostituisce poi trova lo zero e sostituisce
    utilizza questa istruzione inserendola in una macro adattandola alle celle dove hai i numeri
    in questo caso esposto qui sotto lui analizza le cella dalla a1 alla a10 se trova un numero aggiunge alla cella "data" piu' il numero
    fai sapere se va bene

     
    For i = 1 To 10
    X = IsNumeric(Range("A" & i))
    If X = "Vero" And X <> "" Then
    Range("a" & i) = "data" & Range("a" & i)
    End If
    Next i


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    grazie la macro funziona benissimo, ma non riesco a farla funzionare in un range di celle.


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Mi ero dimenticato di dirti che scrive "data" anche se nella cella non trova un numero, questo non lo dovrebbe fare



  • di Enzo (utente non iscritto) data: 19/01/2010

    Ho utilizzato l'istruzione in un foglio excel e funziona
    sotto ti riporto i dati inseriti fino ai trattini come erano in origine e dopo i trattini come li ha cambiati
    per farli funzionare in un range di celle dovresti adattarla o essere piu chiaro
    ad ogni modo allega un file di esempio cambiando i dati e magari mantenendo le celle originali e vediamo che se po' fa'.
    ciao

     
    1
    2
    3
    4
    PIPPO
    PLUTO
    TOPOLINO
    A
    S
    V
    A
    1
    2
    -----------------------------------
    data1
    data2
    data3
    data4
    PIPPO
    PLUTO
    TOPOLINO
    A
    S
    V
    


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Scusami se non sono chiaro ora ti posto un esempio.
    prima e dopo i trattini se non cè nulla significa che la cella è vuota.
     
    A - B
    10-22
    112-44
       -22
    25-	
      -33
      -2
    45-4
      -5
    24-	
    55-110
    Range A1:B10	
    valori iniziali	
    
    data10-data22
    data112-data44
           -data22
    data25-	
          -data33
          -data2
    data45-data4
          -data5
    DATA24-
    data55-data110
    dopo la macro	
    	
    



  • di Enzo (utente non iscritto) data: 19/01/2010

    Domanda - i valori riguardano solo la colonna a e la colonna b e partono sempre da 1
    ossia a1 b1 etc?



  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Si nel foglio dove mi serve la macro il range è sempre lo stesso, cioè se apro il foglio la macro dovrà funzionare su quel range tipo f10:h10 oppure g45:p45.


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    No, nel foglio dove mi serve la macro ,il range è tipo f10:h10 oppure g45:p45.



  • di Enzo (utente non iscritto) data: 19/01/2010

    Scusa ma non capisco
    i dati per il primo range li hai fissi in f10 g10 e h10 (quello che chiami range f10:h10)
    e g45 h45 i45 j45 etc.. fino a p45 (quello che chiami range (g45:p45)
    quindi ti muovi per righe non per colonne?



  • di Enzo (utente non iscritto) data: 19/01/2010

    Se e' come ti avevo detto prova questa istruzione
    qui sotto

     
    Application.ScreenUpdating = False
    Range("e10").Select
    For i = 1 To 3
    ActiveCell.Offset(0, 1).Select
    valore = ActiveCell.Value
    valore2 = IsNumeric(valore)
    If valore2 = True Then
    ActiveCell.Value = "data" & valore
    If ActiveCell.Value = "data" Then
    ActiveCell.Value = ""
    End If
    End If
    Next i
    Range("f45").Select
    For i = 1 To 10
    ActiveCell.Offset(0, 1).Select
    valore = ActiveCell.Value
    valore2 = IsNumeric(valore)
    If valore2 = True Then
    ActiveCell.Value = "data" & valore
    If ActiveCell.Value = "data" Then
    ActiveCell.Value = ""
    End If
    End If
    Next i
    Application.ScreenUpdating = True


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Allora, il range di celle che devo modificare potrebbe essere tipo:
    a1:d10
    quindi la macro dovrà funzionare su questo range di celle omettendo le celle vuote(non deve scrivere nulla sulle celle vuote)
    poi negli altri fogli se il range cambia ci penso io a modificare la macro.


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Comunque guarda che la prima macro andava bene(a parte che scriveva "data" anche se non trovava i numeri)soltanto che quella funziona solo sulla colonna da a1 a a10. a me serviva non sulla colonna ma in un dato range , e non sono riuscito a modificarla.



  • di Enzo (utente non iscritto) data: 19/01/2010

    Prova ora
     
    Application.ScreenUpdating = False
    For i = 1 To 10
    VALORE = IsNumeric(Range("A" & i))
    If VALORE = True Then
    Range("A" & i) = "data" & Range("a" & i)
    End If
    valore2 = Range("a" & i)
    If valore2 = "data" Then
    Range("a" & i) = ""
    End If
    VALORE = IsNumeric(Range("b" & i))
    If VALORE = True Then
    Range("b" & i) = "data" & Range("b" & i)
    End If
    valore2 = Range("b" & i)
    If valore2 = "data" Then
    Range("b" & i) = ""
    End If
    VALORE = IsNumeric(Range("c" & i))
    If VALORE = True Then
    Range("c" & i) = "data" & Range("c" & i)
    End If
    valore2 = Range("c" & i)
    If valore2 = "data" Then
    Range("c" & i) = ""
    End If
    VALORE = IsNumeric(Range("d" & i))
    If VALORE = True Then
    Range("d" & i) = "data" & Range("d" & i)
    End If
    valore2 = Range("d" & i)
    If valore2 = "data" Then
    Range("d" & i) = ""
    End If
    Next i
    Application.ScreenUpdating = True
    



  • di Enzo (utente non iscritto) data: 19/01/2010

    Questa va da a1 a a10
    da b1 a b10
    da c1 a c10
    da d1 a d10
    quindi range a1:d10



  • di Enzo (utente non iscritto) data: 19/01/2010

    Ti ripeto che se hai delle esigenze di celle particolari dovresti postare un file di esempio
    bye


  • Numeri in lettere
    di Franco (utente non iscritto) data: 19/01/2010

    Sei un grande , macro perfetta, scrive dove deve scrivere e basta. ora la posso modificare come voglio, ti ringrazio tantissimo mi hai tolto un dente con l'anestesia totale.
    alla prossima



  • di Enzo (utente non iscritto) data: 20/01/2010

    Ci pensavo ieri sera, troppi cicli for next non vanno bene
    utilizza questa sotto, molto piu' snella
    cambi l'area che vuoi all'inizio poi ci pensa lui
     
    Dim valore As Object
    Set Area = Range("A1:d10")
    For Each valore In Area
    x = IsNumeric(valore)
    If x = True Then
    valore = "data" & valore
    End If
    If valore = "data" Then
    valore = ""
    End If
    Next


  • Numeri in lettere
    di Franco (utente non iscritto) data: 20/01/2010

    Perfetta direi anzi perfettissima ora mi manca solo di colorare in rosso il testo data1, data2 dat3 etc etc)


  • Numeri in lettere
    di Franco (utente non iscritto) data: 20/01/2010

    He ne dici di questa macro per colorare dati1 dati2 dati3 etc etc?
    però mi piacerebbe fare una macro un po piu snella, senza tutti quei elseif. si può fare secondo te?
    intanto tutte le scritte :
    data1, data2 data3 etcetc le dovrò colorare di rosso.
     
    Dim CL As Object
    For Each CL In Range("A1:B10")    
    If CL.Value = "data1" Then
    CL.Font.ColorIndex = 3       
    ElseIf CL.Value = "data2" Then
    CL.Font.ColorIndex = 3
    ElseIf CL.Value = "data3" Then   
    CL.Font.ColorIndex = 3
    End If
    Next
    



  • di Mabolsie h. 21.06 (utente non iscritto) data: 20/01/2010

    Ciao
    prova con

    select case
    case 1
    case 2
    case n..
    end select

    ciao max


  • Numeri in lettere
    di Franco (utente non iscritto) data: 20/01/2010

    Sono riuscito a fare di meglio, penso, ho modificato la tua macro, guarda un po?
    con questa istruzione mi colora di rosso tutte le parole che iniziano con "dat". ed è quello che volevo.
    ho provato con l'istruzione select case ma venivano lo stesso tanti case e select case.

     
    Dim CL As Object
    For Each CL In Range("A1:B10")
    If CL.Value >= "dat*" Then
    CL.Font.ColorIndex = 3
    End If
    Next
    



  • di Enzo (utente non iscritto) data: 21/01/2010

    Hai risolto meglio cosi'


  • Numeri in lettere
    di Franco (utente non iscritto) data: 21/01/2010

    Avolo troppo ottimista sono, avevo provato la macro inserendo solo i nomi data1, data2, data3 etc etc.
    mi colora anche le parole che iniziano diversamente da data.
    ppure spulciando sul manuale avevo letto che la sintassi:
    if cl.value = ("dat*") then
    prendeva solo le parole che iniziavano con dat.
    non funziona....uhmmm



  • di Enzo (utente non iscritto) data: 21/01/2010

    Perche' utilizzi for ...each



  • di Enzo (utente non iscritto) data: 21/01/2010

    Prova questa sotto
    inseriscila dopo l'istruzione che ti avevo mandato l'ultima volta

     
    For i = 1 To 10
    X = Mid(Range("A" & i), 1, 4)
    y = Mid(Range("b" & i), 1, 4)
    XX = Mid(Range("c" & i), 1, 4)
    yy = Mid(Range("d" & i), 1, 4)
    If X = "data" Then
    Range("A" & i).Font.ColorIndex = 3
    End If
    If y = "data" Then
    Range("b" & i).Font.ColorIndex = 3
    End If
    If XX = "data" Then
    Range("c" & i).Font.ColorIndex = 3
    End If
    If yy = "data" Then
    Range("d" & i).Font.ColorIndex = 3
    End If
    Next i
    


  • Numeri in lettere
    di Franco (utente non iscritto) data: 21/01/2010

    Funziona il tutto solo con i valori data1 data2 data3, se trova data11 non lo colora


  • Numeri in lettere
    di Franco (utente non iscritto) data: 21/01/2010

    Tutto a posto ho risolto finalmente, ho capito ora che le lettere dentro alle parentesi erano le colonne, quindi a me serviva di controllare dalla 4 colonna (quindi lettera d)alla 7 colonna(g).
    modificando la macro funziona tutto benissimo. n grazie a te enzo per la tua pazienza e cortesia. a presto. dimenticavo qui sotto riporto l'intera macro.
     
    Application.ScreenUpdating = False
    Dim valore As Object
    Set Area = Range("D5:g28")
    For Each valore In Area
    X = IsNumeric(valore)
    If X = True Then
    valore = "data" & valore
    End If
    If valore = "data" Then
    valore = ""
    End If
    Next
    
    For i = 1 To 30
    yy = Mid(Range("d" & i), 1, 4)
    zz = Mid(Range("e" & i), 1, 4)
    zx = Mid(Range("f" & i), 1, 4)
    zy = Mid(Range("g" & i), 1, 4)
    If yy = "data" Then
    Range("d" & i).Font.ColorIndex = 3
    End If
    If zz = "data" Then
    Range("e" & i).Font.ColorIndex = 3
    End If
    If zx = "data" Then
    Range("f" & i).Font.ColorIndex = 3
    End If
    If zy = "data" Then
    Range("g" & i).Font.ColorIndex = 3
    End If
    Next i
    Application.ScreenUpdating = True
    


  • Numeri in lettere
    di Franco (utente non iscritto) data: 28/01/2010

    Sono sempre io a rompervi le scatole, dovendo sostituire gli zeri non piu con la scritta data0 ma bensi con pippo , modificando la macro non mi funziona. cioe va tutto bene con la sostituzione degli zeri con il testo pippo, ma quando trova un numero del tipo 10,20,30 etcetc la macro converte in questo modo:
    data1pippo,data2pippo etcetc. come posso fare?
    grazie



  • di Enzo (utente non iscritto) data: 28/01/2010

    Se non ho capito male
    se trova un valore numerico diverso da "0" deve scrivere data e il numero
    se trova un valore non numerico lascia il contenuto della cella invariato
    se trova "0" deve scrivere pippo e "o"
    immagino che tu utilizzi la macro che ti avevo postato l'ultima volta
    se cosi' dopo for each ....
    inserisci l'istruzione qui sotto

     
    
    If valore = "0" Then
    valore = "PIPPO" & valore
    End If
    


  • Numeri in lettere
    di Franco (utente non iscritto) data: 28/01/2010

    Madonna enzo sei un fulmine...tutto giusto quello che dici meno che quando trova 0 deve scrivere pippo e basta, ma purtroppo si incasina quando trova 10,20 etc etc mi scrive data1pippo data2pippo etc etc



  • di Enzo (utente non iscritto) data: 28/01/2010

    Prova l'istruzione qui sotto
    dovrebbe fare quello che dici
    ho utilizzato il range che avevi postato l'ultima volta
    ossia da d5 a g28
    prova e fa sapere
     
    Application.ScreenUpdating = False
    Dim valore As Object
    Set Area = Range("D5:g28")
    For Each valore In Area
    If valore = "0" Then
    valore = "PIPPO"
    End If
    X = IsNumeric(valore)
    If X = True Then
    valore = "data" & valore
    End If
    If valore = "data" Then
    valore = ""
    End If
    Next
    For i = 5 To 28
    yy = Mid(Range("d" & i), 1, 4)
    zz = Mid(Range("e" & i), 1, 4)
    zx = Mid(Range("f" & i), 1, 4)
    zy = Mid(Range("g" & i), 1, 4)
    If yy = "data" Then
    Range("d" & i).Font.ColorIndex = 3
    End If
    If zz = "data" Then
    Range("e" & i).Font.ColorIndex = 3
    End If
    If zx = "data" Then
    Range("f" & i).Font.ColorIndex = 3
    End If
    If zy = "data" Then
    Range("g" & i).Font.ColorIndex = 3
    End If
    Next i
    Application.ScreenUpdating = True
    



  • di Enzo (utente non iscritto) data: 28/01/2010

    Se poi hai utilizzato qualcosa d'altro posta la tua macro e vediamo


  • Numeri in lettere
    di Franco (utente non iscritto) data: 28/01/2010

    Sei un mostro....ora sostituisce bene anche i numeri 10 20 30, con data10 data20 data30 etc etc, qualè l'istruzione che hai usato per fare questo?



  • di Enzo (utente non iscritto) data: 28/01/2010

    Ho solo inserito nell'istruzione che gia' avevi, dopo for each questa qui sotto
    bye
     
    If valore = "0" Then
    valore = "PIPPO"
    End If
    


  • Numeri in lettere
    di Franco (utente non iscritto) data: 28/01/2010

    Mille grazie