You are here:---Rispondi a: [RISOLTO] Copia incolla dati e nomi saltando alcune righe
Rispondi a: [RISOLTO] Copia incolla dati e nomi saltando alcune righe 2018-11-24T09:21:41+00:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Copia incolla dati e nomi saltando alcune righe Rispondi a: [RISOLTO] Copia incolla dati e nomi saltando alcune righe

sidsid
Moderatore
    Post totali: 502

    Questo il codice adattato per 60 blocchi, fino alla colonna “AIU” (931)
    NB – La colonna “AIU” è la numero 59, ma copia i valori nella 60 (“AJK”)

    Sub copia()
    Dim ws As Worksheet
    Dim rngTocopy As Range, rngTo As Range, cellaRif As Range
    Dim nRiga As Long, nPrimaColonna As Long, nUltimaColonna As Long, nColonna As Long, j As Long
    Dim vScarto1 As Variant, vScarto2 As Variant
    Dim nTris As Integer, nStep As Integer, nIt As Integer, n As Integer
    Dim bUltimo As Boolean
    Dim t As Date
    
    Set ws = Sheets("stampa movimenti")
    t = Time
    vScarto1 = Array(0, 6, 10)
    vScarto2 = Array(0, 5, 3, 3)
    nStep = -16
    nTris = 3
    nPrimaColonna = 931 'colonna "AIU"
    nUltimaColonna = 1 'colonna "A"
    
    'Trovo il numero delle iterazioni
    For nColonna = nPrimaColonna To nUltimaColonna Step nStep '-16
        nIt = nIt + 1
    Next nColonna
    
    With ws
        'ciclo i blocchi dal penultimo al primo
        For nColonna = nPrimaColonna To nUltimaColonna Step nStep
            n = n + 1
            'vuoto il blocco successivo
            .Range(.Cells(3, nColonna + 16), .Cells(Rows.Count, nColonna + 29)).ClearContents
            
            ' Vedi postilla (2) in basso
            If bUltimo Then nColonna = 1
            'ciclo i 3 tris
            For nTris = 1 To 3
                'riferimento della prima cella del blocco
                Set cellaRif = .Cells(3, nColonna).Offset(0, vScarto1(nTris - 1))
                j = 1
                nRiga = 3 'prima riga della tabella
                
                If cellaRif.Value <> vbNullString Then
                    'trovo l'ultima riga utile del tris ciclato
                    Do While cellaRif.Offset(j, 0) <> vbNullString
                            j = j + 1
                            nRiga = nRiga + 1
                        Loop
                     'imposto il range da copiare
                     Set rngTocopy = .Range(cellaRif, Cells(nRiga, cellaRif.Offset(0, vScarto2(nTris)).Column))
                     'imposto il range di destinazione
                     Set rngTo = rngTocopy.Offset(0, nStep * -1)
                     
                     'copia valori
                     rngTo.Value = rngTocopy.Value
                End If
            Next nTris
         '(1) 'questo costrutto If è dedicato al solo primo blocco
            'in quanto è spostato di 2 colonne rispetto a tutti gli altri
            'Quindi per eseguirlo correttamente devo modifcare il valore di "nStep"
            If n = nIt - 1 Then
                nStep = -18
            '(2)
                bUltimo = True 'Questa booleana farà variare il valore di "nColonna"
            End If
        Next nColonna
    End With
    Set ws = Nothing
    MsgBox Format(Time - t, "HH:MM:SS"), vbInformation, "COPIA ESEGUITA IN....."
    
    End Sub
    • Questa risposta è stata modificata 2 settimane, 2 giorni fa da sid sid.

    Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

    Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

    Chiudi