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

di il
2 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

2 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

Devi accedere o registrarti per scrivere nel forum
2 risposte