Copiare in una cella sotto forma di formula in contenuti di altre

di il
4 risposte

Copiare in una cella sotto forma di formula in contenuti di altre

Ciao a tutti

ho bisogno di copiare in una cella il contenuto di altre già selezionate, ma sotto forma di una formula.

Per esempio, seleziono tre celle contenenti i valori numerici (non formule) 100, 200 e 300.

nella cella obiettivo vorrei introdurre la seguente formula: "=100+200+300" in modo che la cella mostri il totale (600) e la barra della formula mostri appunto "=100+200+300".

Ho scritto il seguente codice per mettere nel clipboard la stringa finale, che poi incollo a mano.

Sub accoda()
   Dim x As Integer, num As Integer, str As String
   num = Selection.Count
   If num > 1 Then
       str = "="
       For x = 1 To num
           If Selection(x).Value <> 0 Then
               str = str & Selection(x).Value & "+"
           End If
       Next x
       str = Left(str, Len(str) - 1)
       Dim clipboard As New MSForms.DataObject
       clipboard.SetText str
       clipboard.PutInClipboard
   Else
       MsgBox "Devi selezionare almeno DUE celle!", vbExclamation, "errore"
   End If
End Sub

ma funziona solo se seleziono celle contigue.Se seleziono (in una serie di celle in colonna, p.es. da A1 a A5) la prima (A1) e la quarta (A4) mi rende la prima (A1) e la seconda (A2).

Dove sbaglio, nella mia crassa ignoranza di excel.?

Grazie

Maurizio

4 Risposte

  • Re: Copiare in una cella sotto forma di formula in contenuti di altre

    Aggiustala così:

    Sub Accoda()
    Dim Str As String
    Dim c As Range
    
    If Selection.Count > 1 Then
        Str = "="
        For Each c In Selection
            If c <> "" Then Str = Str & CStr(c.Value) & "+"
        Next
        
        Str = Left(Str, Len(Str) - 1)
        
        Dim clipboard As Object
        Set clipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        clipboard.SetText Str
        clipboard.PutInClipboard
        Set clipboard = Nothing
    Else
        MsgBox "Devi selezionare almeno DUE celle!", vbExclamation, "errore"
    End If
    End Sub
    

    Il problema che riscontri è nel Selection(1). In realtà equivale a scrivere Selection.Item(1,1) ed emtrambi gli "1" sono un riferimenti relativo alla cella in esame.

    Scritto come te l'ho suggerito invece, cicliamo tutte le celle effettivamente selezionate e quindi il problema non si pone.

  • Re: Copiare in una cella sotto forma di formula in contenuti di altre

    Grazie mille, perfetto!

    Buon fine settimana

    Maurizio

  • Re: Copiare in una cella sotto forma di formula in contenuti di altre

    Ciao Sgrubak

    scusa l'ignoranza, ma da dove esce fuori il comando

    CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    e dove hai preso quella stringa esadecimale?

    Grazie

  • Re: Copiare in una cella sotto forma di formula in contenuti di altre

    09/02/2026 - bruma ha scritto:

    da dove esce fuori il comando

    La CreateObject serve per sfruttare il Late Binding . Un pochetto più lento a  runtime, ma più robusto in caso di codice "version dependent" (anche se non è questo il caso, vista la libreria adoperata).

    09/02/2026 - bruma ha scritto:

    dove hai preso quella stringa esadecimale?

    Onestamente, ho copiaincollato uno stralcio di codice dal web e l'ho sistemato. quella stringa è semplicemente il CLSID che trovi nel registro di sistema. Se la cerchi li in mezzo, dovrebbe portarti alla chiave 

    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Classes\CLSID\{1C3B4210-F441-11CE-B9EA-00AA006B1A69} 

    o qualcosa di simile. Credo dipenda come l'ha registrata l'installazione di Office (non sono un esperto di registro di sistema).

    Queste righe di codice

    Dim clipboard As New MSForms.DataObject
    
    'oppure
    
    Dim clipboard As Object
    Set clipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    svolgono all'atto pratico la stessa identica cosa, solo in due modi differenti.

Devi accedere o registrarti per scrivere nel forum
4 risposte