2017-04-20 4 views
0

ich das folgende MakroExcel Macro einzelne Spalte zwei Spalten transponieren

erstellt haben, ich habe Daten gehen den ganzen Weg 3710 in der Stammdatenblatt zu bringen - und ich weiß nicht, wie dieses Makro Schleife zu zwingen, und alle Daten einschließen

Sub Macro3() 
' 
' Macro3 Macro 
' 

' 
    Range("A1:A2").Select 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("A1:B1").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
    Sheets("Sheet1").Select 
    Range("A3:A4").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("A2:B2").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
    False, Transpose:=True 
End Sub 
+0

So möchten Sie die Werte in Sheet1 A1 nehmen: A3710 und jeden anderen Wert in Spalte A von sheet2 und jeder andere Wert in Spalte B Blatt 2 setzen? –

Antwort

0

Sie können dies mit einer for Schleife tun. Auch Kopieren/Einfügen ist etwas, das wir in der Regel in VBA sowie .SELECT und .ACtivate scheuen. Diejenigen, sind Funktionen, die ein Mensch durchführt, aber der Computer kann nur Zellen gleich andere Zelle Wert wie:

Sheets("Sheet1").Cells(1, 1).value = Sheets("Sheet2").Cells(1,1).value 

Welche Zelle „A1“ in Sheet1 sagt gesetzt werden sollte, was auch immer der Wert in Sheet2 Cell „A1 ".

Ändern Dinge um, eine Schleife Umsetzung Ihrer transponieren, und mit ein paar schnelle lineare Regressionsformel auszuführen, welche Zeile zu schreiben, um uns zu bestimmen, erhalten:

Sub wierdTranspose() 
    'Loop from row 1 to row 3710, but every other row 
    For i = 1 to 3710 Step 2  
     'Now we select from row i and row i + 1 (A1 and A2, then A3 and A4, etc) 
     'And we put that value in the row of sheet2 that corresponds to (.5*i)+.5 
     ' So if we are picking up from Rows 7 and 8, "i" will be 7 and (.5*i)+.5 will be row 4 that we paste to 
     ' Then the next iteration will be row 9 and 10, so "i" will be 9 and (.5*i)+.5 will be row 5 that we paste to 
     ' and on and on until we hit 3709 and 3710... 
     Sheets("Sheet2").Cells((.5*i)+.5, 1).value = Sheets("Sheet1").Cells(i, 1).value 
     Sheets("Sheet2").Cells((.5*i)+.5, 2).value = Sheets("Sheet1").Cells(i+1, 1).value 
    Next i 
End Sub 
0

Bulk-Daten erfolgt am besten über VBA-Arrays übertragen, mit Kein Kopieren/Einfügen erforderlich.

Etwas wie folgt aus:

Sub SplitColumn() 
    Dim A As Variant, B As Variant 
    Dim i As Long 
    Dim ws1 As Worksheet, ws2 As Worksheet 

    Set ws1 = Sheets(1) 
    Set ws2 = Sheets(2) 

    With ws1 
     A = .Range(.Cells(1, 1), .Cells(3710, 1)) 
    End With 

    ReDim B(1 To 1855, 1 To 2) 
    For i = 1 To 1855 
     B(i, 1) = A(2 * i - 1, 1) 
     B(i, 2) = A(2 * i, 1) 
    Next i 

    With ws2 
     .Range(.Cells(1, 1), .Cells(1855, 2)).Value = B 
    End With 

End Sub 
Verwandte Themen