将A列的Cell值均匀分布到B C D.

时间:2016-05-10 12:26:50

标签: excel excel-vba vba

我是Excel VBA的新手,所以请对我好:)

我的问题是我想将A列的值复制到最后一个有值的单元格并分别粘贴到B C D

实施例

A列有3行,分别为Tim,john,Mer值

我想分别将它粘贴到列B2 C2 D2

问题:A列有一个动态行数,所以我希望它复制到最后一个notempty单元格。但是当A列超过3(要粘贴的列数)时,它将循环并粘贴到B3然后C3然后粘贴到D3,依此类推,直到所有非空单元均匀分布到3列(B,C和D)

希望这个问题很清楚

2 个答案:

答案 0 :(得分:0)

Sub CopyData()
Dim x As Long, i As Long

Application.ScreenUpdating = False

For i = 1 To 100 Step 3
    x = x + 1
    Range("A" & i & ":A" & i + 2).Copy
    Range("B" & x).PasteSpecial xlPasteValues, , , True
Next i

Application.ScreenUpdating = True

End Sub

答案 1 :(得分:0)

也许可以使用TRANSPOSE函数?

Sub TransposeToColumns()

    Dim lLastRow As Long

    With ThisWorkbook.Worksheets("Sheet1")
        'Get the last row (same as going to end of sheet and pressing Ctrl+Up).
        lLastRow = .Range("A" & Rows.Count).End(xlUp).Row

        If lLastRow > 3 Then
            'Cells(1,2) is row 1, column 2.
            With .Range(.Cells(1, 2), .Cells(1, lLastRow + 1))
                'R1C1 style of referencing - absolute reference to A1 is R1C1 (row 1 column 1).
                .FormulaArray = "=TRANSPOSE(R1C1:R" & lLastRow & "C1)"
                'Replace formula with values.
                .Value = .Value
            End With
        End If
    End With

End Sub

刚刚意识到 - 如果您尝试使用超过16383行(即列数-1),这将会出错。但它会在0.040469668631069秒内完成所有列。 :)