Copia/incolla di gamma da un foglio di lavoro per il prossimo colonna disponibile in un altro foglio di lavoro

Sto cercando di copiare un intervallo di dati da un foglio di lavoro in un altro foglio di lavoro nella stessa cartella di lavoro.

Copia range(“A2:B10”) nel Foglio1 quindi incollare (“A2”) nel Foglio2.

Ogni volta che viene eseguita la macro, mi piacerebbe che i valori (“Foglio 1”).Range(“A2:B10”) per essere incollato in fila di colonne, in modo che nella seconda manche, in “B2” “C2” nel Foglio 2.

Ho la prima parte, ma alle prese con la 2 ° parte:

Sub sbCopyRangeToAnotherSheet()
'Set range
Sheets("Sheet1").Range("A2:B10").Copy  Destination:=Sheets("Sheet2").Range("A2")
'Copy the data
Sheets("Sheet1").Range("A2:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("A2").Select
'Paste in the target destination
ActiveSheet.Paste

Application.CutCopyMode = False
End Sub
  • Presumibilmente si intende A2 e quindi C2 (non B2) come intervallo è di due colonne di larghezza?
InformationsquelleAutor P. Saha | 2018-01-10

 

2 Replies
  1. 1

    Il codice è dispari

    Questa linea Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2") è copiare e incollare il tutto in una sola riga. Così le successive linee dove si .copy .activate .select e .paste sono ridondanti. La prima linea già fatto tutto questo.

    È necessario identificare l’ultima colonna nella Riga “A” del Foglio2. Per fare questo è possibile utilizzare il .End() metodo di un intervallo per trovare la prima cella occupata nella riga. Quindi utilizzare il cell come la tua copia Destination:

     Sub sbCopyRangeToAnotherSheet()
    
         'Declare a variable to hold the cell to which we will paste the data
         Dim pasteCell as Range
    
         'Set the variable to the first empty cell in Row 2
         Set pasteCell = Sheets("Sheet2").Range("IV2").end(xlToLeft).Offset(,1)
    
         'Copy and paste
         Sheets("Sheet1").Range("A2:B10").Copy  Destination:=pasteCell
    End Sub
    • Con questo spostamento si sarebbe mai compilare la colonna A.
    • Vuoi davvero utilizzare Excel 2003 (a giudicare dal IV colonna)? Ho paura di chiedere perché, perché potrei sapere il motivo…
    • Hai ragione su quella colonna di Un problema. Penso che il più grande da asporto è la .End() metodo, il ridondante copia e incolla, l’uso delle variabili per gestire in modo dinamico a determinate cose in VBA e simili. Il IV è solo la mia vecchia scuola cervello rettile scrittura di codice senza pensare più bello modi di farlo come Columns.Count. Detto questo, io faccio ancora conoscere qualcuno che ha mantenuto un XP del computer portatile in modo da poter utilizzare Access 2003 o_0
    • Sto commentando le parti negative solo ☺ Tester mentalità. So che alcune persone che supportano le applicazioni nel 2003, pensavo che tu fossi uno di loro. Applausi ☺
  2. 0

    Questo è qualcosa che farà il lavoro senza l’utilizzo di Active e Select:

    Option Explicit
    
    Sub TestMe()
    
        Dim ws1         As Worksheet
        Dim ws2         As Worksheet        
        Dim source      As Range
        Dim target      As Range        
        Dim lastColumn  As Long
    
        Set ws1 = Worksheets(1)
        Set ws2 = Worksheets(2)
    
        With ws2
            lastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
            If WorksheetFunction.CountA(.Columns(1)) > 0 Then
                lastColumn = lastColumn + 1
            End If
        End With
    
        Set source = ws1.Range("A2:A10")
        Set target = ws2.Cells(2, lastColumn)
    
        source.Copy destination:=target
        Application.CutCopyMode = False
    
    End Sub

    La parte più delicata del codice è quello di iniziare a scrivere sul corretto della colonna nel foglio di lavoro di destinazione. Se il foglio di lavoro è vuoto, quindi la colonna corretta è la prima. In ogni altro caso, la colonna corretta è l’ultima colonna + 1.

    Il modo standard di ricerca di ultima colonna utilizzati – Range.End(xlToLeft).Column sarebbe sempre tornare il prima colonna come ultima colonna utilizzati, w/o prestare attenzione se è usato o meno. Quindi è necessario un qualche tipo di controllo, per sapere se è vuota o non: WorksheetFunction.CountA(.Columns(1)) > 0

    • Grazie mille per il vostro aiuto! Davvero apprezzare. Imparato molto da questo.
    • Il tuo commento su Gamma.Fine(xlToLeft).Colonna senso per me. Domanda per quanto riguarda incolla dei valori, dovrei essere in grado di utilizzare “.PasteSpecial Paste:=xlPasteFormats” o “.Valore” in qualsiasi parte di questo script? Ho provato a giocare con esso, ma non riesco a capire. Grazie ancora!
    • sei il benvenuto. Riguardo il copia / incolla dei valori, probabilmente il modo migliore per imparare un po ‘ è semplicemente per registrare una macro e vedere il codice. Nel mio codice rimuovere la parte destination := target e nella riga successiva aggiungere target.PasteSpecial Paste:= xlPasteFormats, dovrebbe funzionare. Contento di aver potuto aiutare – stackoverflow.com/help/someone-answers
    • Usato “di destinazione.PasteSpecial (xlPasteValues)” dopo aver lottato con la sintassi e ha funzionato.Grazie ancora! Molto utile e di nuovo mi ha aiutato a imparare.
    • bello da sentire. Si può prendere in considerazione di accettare una risposta alla domanda – stackoverflow.com/help/someone-answers

Lascia un commento