簡體   English   中英

Excel宏單列轉置為兩列

[英]Excel Macro single column transpose to two columns

我創建了以下宏

我的數據一直傳到主數據表中的第3710行-我不知道如何強制該宏循環並包含所有數據

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

您可以使用for循環執行此操作。 同樣,復制/粘貼是我們通常在VBA中以及.SELECT.ACtivate 這些是人類執行的功能,但是計算機可以將單元格設置為等於其他單元格的值,例如:

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

也就是說,Sheet1中的單元格“ A1”應設置為Sheet2單元格“ A1”中的值。

改變周圍的事物,實現循環以執行轉置,並使用一些快速的線性回歸公式來確定要寫入的行:

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

最好通過VBA陣列傳輸批量數據,而無需復制/粘貼。

像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM