Shiftare le celle



  • Shiftare le celle
    di Gian (utente non iscritto) data: 12/09/2013 09:26:34

    Buongiorno a tutti, in Excel dovrei shiftare in basso di una riga il range di celle B1:C8. Devo realizzare un loop che parta dall'ultima riga e vada a salire. Il valore della riga 8 non deve finire nella 9 ma scomparire. Grazie in anticipo per l'aiuto



  • di Vecchio Frac data: 12/09/2013 10:16:25

    Bè, direi che hai illustrato a sufficienza il problema e realizzato anche l'algoritmo.
    Ora ti basta tradurre tutto in istruzioni VBA.
    Parti da zero o hai qualche base?





  • di Gian (utente non iscritto) data: 12/09/2013 12:17:49

    Purtroppo parto da 0.. Ho provato a realizzare lo script come puoi vedere qua sotto. E' rimasto un po macchinoso ma funziona. L'unico problema è che non riesco a farlo looppare a partire dall'ultima riga. Ho provato come vedi a invetire il range (Range("B2:B8") --> Range("B8:B2")) ma non funziona. Hai qualche soluzione??
     
    Sub SHIFT()
    Dim x As Variant, y As Variant
        For Each x In Range("B8:B2")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each y In Range("C8:C2")
            y.Value = y.Offset(-1, 0).Value
        Next y
    End Sub
    



  • di Gian (utente non iscritto) data: 12/09/2013 14:00:01

    Ho trovato una soluzione.. non è delle migliori, ma funziona perfettamente!!
     
    Sub SHIFT_1()
    Dim x As Variant, y As Variant
        For Each x In Range("B8:C8")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B7:C7")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B6:C6")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B5:C5")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B4:C4")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B3:C3")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B2:C2")
            x.Value = x.Offset(-1, 0).Value
        Next x
        For Each x In Range("B1:C1")
            x.Value = ""
        Next x
        Range("B9:C9").Clear
    End Sub



  • di totygno71 (utente non iscritto) data: 12/09/2013 14:02:29

    prova col registratore di macro.



  • di totygno71 (utente non iscritto) data: 12/09/2013 14:06:08

    A me il registratore suggerisce questo...
     
    Sub scivola()
        
        [B1:C1].Insert Shift:=xlDown
        [B9:C9].ClearContents
        
    End Sub



  • di totygno71 (utente non iscritto) data: 12/09/2013 14:17:35

    Se in B9:C) ci sono dei valori che vuoi conservare intatti invece:
     
    Sub scivola()
        
        [B1:C1].Insert Shift:=xlDown
        [B9:C9].Delete
        
    End Sub



  • di Gian (utente non iscritto) data: 12/09/2013 14:43:36

    Vista la mia poca esperienza, non conoscevo neanche l'esistenza del registratore... Ti ringrazio per l'aiuto!!!



  • di totygno71 (utente non iscritto) data: 12/09/2013 14:59:29

    Prego!