Comportamento Excel "strano"

di il
17 risposte

Comportamento Excel "strano"

Buongiorno.

“Pasticciando” un po con un codice VBA ho riscontrato questa anomalia sintetizzata sul file di esempio.

In parole povere con gli stessi dati, gli stessi formati celle, lo stesso codice, il risultato è diverso a seconda se la colonna (C) è visibile o nascosta.

Se si preme il pulsante il codice copierà la colonna C in F con un ciclo For Next.

Se si nasconde la colonna C il risultato darà zero o nullo.

La colonna C è formattata numero e la F come testo.

Trovo strano che se cambia l'interfaccia utente e si nasconde una colonna, Excel vari il risultato non avendo nulla di cambiato in memoria.

Solo curiosità.

Bello non trovo come allegare il file excel…..

Il codice. 

Sub Pulsante1_Click()

For ciclo = 1 To 3
Range("F" & ciclo).Value = ""
Range("F" & ciclo).Value = Range("C" & ciclo).Text
Next ciclo

End Sub

Al di là del codice che usa Text assegnato con Value, Excel si comporta in modo differente se la colonna è nascosta.

Colonna C valori 10,50 - 20,50 - 30,50

17 Risposte

  • Re: Comportamento Excel "strano"

    Ciao,… ma non è strano, è normale ;-)

    in questo caso devi accedere alla colonna nascosta attraverso il suo indice e non attraverso il suo riferimento

    Esempio:

    Sub MyCopy()
    
    ' define variables
    Dim i As Integer
    Dim ws As Worksheet
    
    ' set sheets
    Set ws = ThisWorkbook.Sheets("CopiaColonnaNascosta")
    
    ' copy
    For i = 1 To 3
        ws.Cells(i, "F").Value = ws.Cells(i, "C").Value
    Next i
    
    End Sub

    Se utilizzi l'indice per accedere alla cella invece del suo riferimento diretto, allora avrai accesso alle sue informazioni e le puoi trattare anche se la colonna è nascosta.

    Ciao… ;-)

  • Re: Comportamento Excel "strano"

    Sempre utilizzando l'indice di riferimento alle celle puoi anche copiare in questo modo sia che la colonna risulta nascosta oppure no:

    Esempio:

    Range("C1:C3").Select
    Selection.Copy
    Range("F1:F3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    In questo caso sarebbe un semplice Copia/Incolla

  • Re: Comportamento Excel "strano"

    Grazie per la risposta By65Franco.

    No, non è così.

    Lei ha sostituito 

    ws.Cells(i, "F").Value = ws.Cells(i, "C").Text
    
    ' con
    
    ws.Cells(i, "F").Value = ws.Cells(i, "C").Value
  • Re: Comportamento Excel "strano"

    L'esempio del copia incolla funziona ma a me serviva estrapolare dei valori non adiacenti.

    Mi serviva il numero in formato testo per poi inviarlo via web. 

    Ho risolto con l'istruzione Format ma, per curiosità, volevo capire il perchè di tale differenza….

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    per curiosità, volevo capire il perchè di tale differenza….

    Perchè cercando la cella con l'indice ti riferisci alla posizione in cui si trova la cella all'interno del foglio e queste coordinate sono sempre valide anche se la cella è nascosta. Pertanto puoi accedere ai dati. Esempio : cella(riga 1, colonna 3)

    Invece se il foglio nella sua visualizzazione ha delle celle nascoste, esse non saranno raggiungibili tramite il riferimento diretto. Esempio cella/range("C1") . Altrimenti che senso avrebbe nascondere qualcosa e poterlo comunque leggere ? 

    ;-)

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    Grazie per la risposta By65Franco.

    No, non è così.

    Lei ha sostituito 

    ws.Cells(i, "F").Value = ws.Cells(i, "C").Text
    
    ' con
    
    ws.Cells(i, "F").Value = ws.Cells(i, "C").Value

    C'è un po' di confuzione?   ;-)

    09/04/2024 - Premuroso ha scritto:


    Mi serviva il numero in formato testo per poi inviarlo via web. 

    Quindi a questo punto si converte il valore ricercato con la semplice function Cstr

    Esempio:

    Sub MyCopy()
    
    ' define variables
    Dim i As Integer
    Dim ws As Worksheet
    
    ' set sheets
    Set ws = ThisWorkbook.Sheets("CopiaColonnaNascosta")
    
    ' copy
    For i = 1 To 3
        ws.Cells(i, "F").Value = CStr(ws.Cells(i, "C").Value)
    Next i
    
    End Sub
    

    (Non usare mai il valore Text quando si vuole prendere il valore di una cella per valorizzare un altra cella … )

    Pertanto si prenderà il “valore” ricercato (con .value è come prendere il contenuto della cella ti tipo Variant)
    e per esempio con la function Cstr  si converte in stringa ponendolo sempre come “valore” sulla cella di destinazione.
    …molto semplice.

    Capito adesso ? 

    Ciao… ;-)

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    L'esempio del copia incolla funziona ma a me serviva estrapolare dei valori non adiacenti.

    Mi serviva il numero in formato testo per poi inviarlo via web. 

    Ti ho solo fatto degli esempi per farti capire che quando le celle sono nascoste si può prelevare il valore utilizzando l'indice, con le coordinate delle celle. 
    Invece fare riferimento diretto ad una cella che non è visibile, non è l'approccio corretto.

    Poi una volta avuto accesso alle informazioni da copiare, le puoi incollare come meglio credi… come da esempi sopra riportati. Questo dipende da te e da quello che ne devi fare.

    Ho solo risposto come accedere a celle nascoste.

    ;-)

  • Re: Comportamento Excel "strano"

    In ultimo e per completezza…

    Qui trovi le differenze e le risposte a cui si accennva tra cell.Text e cell.Value 

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.text

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.value

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.value2

    ecc.ecc…

    Ciao e buon lavoro… ;-)

  • Re: Comportamento Excel "strano"

    Grazie a tutti per la disponibilità.

    Come ho già detto ho risolto il problema.

    Grazie per le spiegazioni. Anch'io avevo risolto con una trasformazione del numero in testo.

    Forse non mi spiego. Ammesso che ci sia un problema di forma nel codice, Excel dovrebbe dare sempre lo stesso risultato al di là della colonna nascosta o no.

    Il codice postato dal gentilissimo By65Franco non funziona se si sostituisce Value con text anche con le coordinate delle celle così impostate.

    Ovvero funziona solo con la colonna visibile. Ho provato anche con l'istruzione Cells.

    Il problema si presenta con "text" ma solo con la colonna nascosta.

    Probabilmente non capisco io e non vorrei “rompere” più di tanto. Era solo una curiosità…

    Vi ringrazio per la pazienza.

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    Forse non mi spiego. Ammesso che ci sia un problema di forma nel codice, Excel dovrebbe dare sempre lo stesso risultato al di là della colonna nascosta o no.

    No, non è così. Il comportamento standard (non anomalo) di Excel è il seguente

    • se usi la proprietà .Text ottieni “quello che vedi”. Se vedi 1234 ottieni 1234, se vedi ### ottieni ###, se non vedi nulla perché nascosta, non ottiene nulla
    • se usi la proprietà .Value ottieni “il valore memorizzato” nella cella (quello che sta in memoria non quello visualizzato), quindi se contiene un valore 123456 e nella cella visualizzi ###, ottieni il valore 123456. Come eccezioni, per una data o un valore currency, ottieni il valore formattato, quindi non il valore reale ma quello ottenuto in seguito a formattazione (es. per un currency con due decimali, qualsiasi sia il valore in memoria ottieni il valore corrispondente con due decimali)
    • se usi la proprietà .Value2 ottieni sempre “il valore memorizzato”, anche nel caso delle Date o dei Currency formattati

    Spero che sia più chiaro.

  • Re: Comportamento Excel "strano"

    09/04/2024 - oregon ha scritto:


    No, non è così. Il comportamento standard (non anomalo) di Excel è il seguente

    Ciao Oregon… 

    siamo alle solite… non si studia e non si leggono i post che spiegano e consigliano come approcciare certe situazioni.

    Ma da lì a dire che non funziona… oppure non aver capito ancora la differenza tra Text e Value , oppure non capire perchè prendere sempre in considerazione il valore vero e proprio e non quello che appare, oppure non capire che con Text si legge cioò che appare e non ciò che è nascosto… e poi poi poi e poi…
    non ho parole ;-) 

    Vabbè, c'ho pure perso il tempo a reperire i link della documentazione ufficiale… che chiaramente non è stata ne letta ne considerata 

    09/04/2024 - By65Franco ha scritto:


    In ultimo e per completezza…

    Qui trovi le differenze e le risposte a cui si accennva tra cell.Text e cell.Value 

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.text

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.value

    https://learn.microsoft.com/en-us/office/vba/api/excel.range.value2

    ecc.ecc…

    Sono contento per il tuo intervento che ha ribadito come stanno effettivamente le cose… 
    non si può far passare un messaggio totalmente errato come quello dell'autore del thread che non prendendo in esame le soluzioni possibili indicate e lo studio e l'approfondimento dai link forniti, insiste per una sua e sola convinzione di come deve funzionare excel …. mah, bah…. boh.

    09/04/2024 - Premuroso ha scritto:


    Excel dovrebbe dare sempre lo stesso risultato al di là della colonna nascosta o no.


    In questi casi dalle mie parti usano dire… “ma sei più duro del sasso a spicco della Verna”  ;-))


    Un salutone e buona giornata Oregon. 

    P.S.
    ma poi venire a dire a me che il codice che propongo non funziona ???? ma daiii, non se pò sentì !!!  ;-) 
    (scherzoooo… insomma, mica tanto però… ahahahahahah)  

  • Re: Comportamento Excel "strano"

    09/04/2024 - oregon ha scritto:


    09/04/2024 - Premuroso ha scritto:


    Forse non mi spiego. Ammesso che ci sia un problema di forma nel codice, Excel dovrebbe dare sempre lo stesso risultato al di là della colonna nascosta o no.

    No, non è così. Il comportamento standard (non anomalo) di Excel è il seguente

    • se usi la proprietà .Text ottieni “quello che vedi”. Se vedi 1234 ottieni 1234, se vedi ### ottieni ###, se non vedi nulla perché nascosta, non ottiene nulla
    • se usi la proprietà .Value ottieni “il valore memorizzato” nella cella (quello che sta in memoria non quello visualizzato), quindi se contiene un valore 123456 e nella cella visualizzi ###, ottieni il valore 123456. Come eccezioni, per una data o un valore currency, ottieni il valore formattato, quindi non il valore reale ma quello ottenuto in seguito a formattazione (es. per un currency con due decimali, qualsiasi sia il valore in memoria ottieni il valore corrispondente con due decimali)
    • se usi la proprietà .Value2 ottieni sempre “il valore memorizzato”, anche nel caso delle Date o dei Currency formattati

    Spero che sia più chiaro.

    Detta così è chiara. Excel memorizza solo ciò che si vede con l'istruzione text.

    Ho visionato i link che mi sono stati suggeriti ma, secondo me non spiegavano bene o meglio di come a fatto ora Oragon.

    By65Franco Si confermo sono di coccio, come dicono da noi, ma questo  molte volte mi ha 

    spinto a non arrendermi davanti ad ostacoli vari   :=)

    Ringrazio tutti per la gentilezza e pazienza. 

    Buona serata.

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    Excel memorizza solo ciò che si vede con l'istruzione text.

    No, detta così non ha senso.

    Intanto Text è una proprietà dell'dell'oggetto Cella non un'un'istruziond, ma non è questo il punto. 

    Excel memorizza in ogni Cella un valore e la proprietà Text restituisce quello che Excel mostra di quella Cella, non il valore effettiveffettivo del suo contenuto,  cosa  che fa con le altre due proprietà 

    Meglio di così non posso spiegartelo. Spero tu comprenda comunque che Excel si comporta correttamente per come è stato progettato. Basta studiarlo e conoscerlo

  • Re: Comportamento Excel "strano"

    09/04/2024 - Premuroso ha scritto:


    “Pasticciando” un po con un codice VBA

    dai dai … già da qui si capisce tutto ;-)   scherzo !

    Non si nasce imparati… bisogna studià, applicarsi e seguire scrupolosamente quanto riportato nella documentazione ufficiale di microsoft. 

    Almeno le basi sono necessarie, ma non sempre possono bastare. Bisogna darsi da fare.

    ;-))

Devi accedere o registrarti per scrivere nel forum
17 risposte