Riga più lunga



  • Riga più lunga
    di Andra (utente non iscritto) data: 13/11/2013 18:15:13

    Salve.
    Ho le celle della colonna A il cui testo(numeri) non è sempre uguale e non sempre le celle sono piene.
    Dovrei trovare partendo dalla cella A2 quella con il testo più lungo e aggiungere nelle altre celle tanti zeri quanti ne mancano facendo la differenza.

    prima...............................................................dopo
    riga più lunga =5000,00.....................................5000,00
    riga corta = 10,00(prima).................................. 0010,00
    riga corta = 150,00(prima)..................................0150,00


  • Riga più lunga
    di Santuberto (utente non iscritto) data: 13/11/2013 18:20:24

    Tasto destro del mouse: formato celle; numero; personalizzato. Imposti il numero come vuoi. Cordiali saluti, Santuberto.



  • di Mister_x (utente non iscritto) data: 13/11/2013 18:59:37

    ciao

    ammettiamo i tuoi dati in A:A da A1:A10
    in B1 formula matriciale da confermare con ctrl+maiusc+invio
    B1==RIPETI("0";MAX(LUNGHEZZA(TESTO($A$1:$A$10;"#,00")))-LUNGHEZZA(TESTO(A1;"#,00")))&TESTO(A1;"#,00")

    risultato vedi sotto esempio di calcolo

    ciao Mister_x
     
    B1=RIPETI("0";MAX(LUNGHEZZA(TESTO($A$1:$A$10;"#,00")))-LUNGHEZZA(TESTO(A1;"#,00")))&TESTO(A1;"#,00")
    
    100,00			00100,00
    10,00			00010,00
    1,00			00001,00
    1000,00			01000,00
    10000,00			10000,00
    0,10			00000,10
    11,00			00011,00
    0,02			00000,02
    150,00			00150,00
    151,21			00151,21
    






  • di Andra (utente non iscritto) data: 13/11/2013 19:16:04

    Ciao.
    Devo farlo con codice VBA.



  • di Mister_x (utente non iscritto) data: 13/11/2013 20:12:27

    ciao

    perche' lo devi fare con codice VBA?????

    prova a spiegare come secondo il tuo pensiero deve essere fatto il tutto, dando dei riferimenti per impostare la sub()

    ciao





  • di Vecchio Frac data: 13/11/2013 20:19:38

    Curioso, di solito si vuole evitare VBA perchè sembra inavvicinabile ^_^
    Prova a tradurre la formula di Mister_x in codice:
    - cerca con Max la cella col testo più lungo
    - per ogni cella del range:
    - contenuto della cella = (tanti zeri pari al valore max meno la lunghezza del contenuto della cella) & il contenuto della cella
    - ripeti il ciclo





  • di Mister_x (utente non iscritto) data: 13/11/2013 23:12:34

    ciao andra

    forse tu alludi al VBA perche' con la formula che ti ho passato dove in A non hai nulla o hai una parola ti vengono riportati 0 a vista, se e' questo che dici per utilizzare VBA non serve basta aggiungere alla funzione che ti ho passato alcuni controlli alla celle, in questo caso la formula diventa
    sempre da confermare come matriciale ctrl+maiusc+invio
    B1=SE(O(A1="";VAL.TESTO(A1));"";RIPETI("0";MAX(LUNGHEZZA(TESTO($A$1:$A$10;"#,00")))-LUNGHEZZA(TESTO(A1;"#,00")))&TESTO(A1;"#,00"))

    ciao Mister_x
     
    =SE(O(A1="";VAL.TESTO(A1));"";RIPETI("0";MAX(LUNGHEZZA(TESTO($A$1:$A$10;"#,00")))-LUNGHEZZA(TESTO(A1;"#,00")))&TESTO(A1;"#,00"))
    
    risultato
    100	00100,00
    Pippo	
    1	00001,00
    1000	01000,00
    10000	10000,00
    0,1	00000,10
    Pluto	
    0,02	00000,02
    	
    151,21	00151,21
    





  • Riga più lunga
    di Andra (utente non iscritto) data: 14/11/2013 08:12:17

    Ciao.
    Questo il codice solo che mi si ferma al valore della prima riga piena.

     
    Private Sub Label21_Click()
    
    Dim CL As Object
     cont = 0
    Set X = Range(Cells(2, 8), Cells(2, 8).End(xlDown))
     For Each CL In X
     If CL <> "" Then
     valore = Len(CL)
     If valore > cont Then
     cont = valore
     riga = CL.Row
     End If
     End If
     Next
    End Sub
    


  • Riga più lunga
    di Andra (utente non iscritto) data: 14/11/2013 09:04:27

    Ciao,
    modificato riga
    Set X = Range(Cells(2, 8), Cells(2, 8).End(xlDown))
    con




     
    Set X = Range(Cells(2, 8), Cells(Rows.Count, 8).End(xlUp))
    



  • di Mister_x (utente non iscritto) data: 14/11/2013 10:54:07

    ciao andra

    visto che stai passando la funzione da me proposta in codice VBA . da come ti ha suggerito V.F., che saluto, da come penso a questo punto la cosa si e' arenata li perche' si tu trovi la lunghezza massima della stringa ma in effetti non e' giusta, ti faccio un esempio pratico con due valori
    1000 Len() riporta 4
    12,05 len() riporta 5
    ma nel tuo esempio proposto
    1000 deve ritornare 1000,00 ma se fai la conversione a 5 ti ritorna 01000,00 perche tu hai un valore di len() a 5, mentre il valore vero di len() senza conversione sarebbe di 4 essendo 1000 il valore Max()

    quindi ti passo una sub() da studiare e utilizzare nel tuo caso
    adesso prende i valori da colonna H e li posizione in colonna J per farti capire ma e' abbastanza che tu al posto del 10 metti 8 e te li sovrascrive nella stessa cella

    ciao Mister_x

     
    Sub Len__cella()
    Dim Len_cella As Long
    Dim Val_cella As Variant
    Dim U_riga As Long
    U_riga = Cells(Rows.Count, 8).End(xlUp).Row
    Set MioRange = Range("H2:H" & U_riga)
    Val_cella = Application.Max(MioRange)
    Len_cella = Len(Format(Val_cella, "#.00"))
    For Each cella In MioRange
     If cella = "" Or Application.IsText(cella) Then
       Cells(cella.Row, 10) = ""  ''cella  ''se bisogna lasciare invariata la cella
     Else
      Cells(cella.Row, 10) = Application.Rept("0", Len_cella - Len(Format(cella, "#.00"))) & Format(cella, "#.00")
     End If
    Next
    Set MioRange = Nothing
    End Sub
    
    Risultato
    0,02		00000,02
    1		00001,00
    250,21		00250,21
    ciao		
    10000		10000,00
    		
    0,12		00000,12
    50,15		00050,15
    5,15		00005,15
    





  • Riga più lunga
    di Andra (utente non iscritto) data: 14/11/2013 17:08:23

    Ciao
    ottima soluzione, si può sostituire lo zero con " "