在循环中转置静态范围

时间:2014-01-14 21:47:27

标签: excel vba loops transpose

我试图将第1页上的A列的静态范围转换为循环中第3页上的行,但无济于事。这是我到目前为止使用的代码:

Sub Looptranspose()
'
' Looptranspose Macro
'
' Keyboard Shortcut: Ctrl+a

    Dim x As Integer
    Dim y As Integer
    x = 1
    y = x + 18
    Range("A" & CStr(x) & ":A" & CStr(y)).Select
    Selection.Copy
    Sheets("Sheet3").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    x = x + 19
End Sub

如何循环,直到A行完成?此代码将列A中选定的第一个19个单元格范围转换为工作表3上的选定行。

我需要宏来在第一张纸上的A行中选择下一个19个单元格并转换到第3页的下一行。这是示例:

Excel第1步 https://drive.google.com/file/d/0B2TQdtpfUIa5OUpRTWNwLUQ5WVk/edit?usp=sharing

Excel第2步 https://drive.google.com/file/d/0B2TQdtpfUIa5TkNrVXRwOHh2TFk/edit?usp=sharing

如何继续在第1行第1页中选择以下19个单元格(直到没有更多数据)并转换到第3页中的下一行?

1 个答案:

答案 0 :(得分:0)

查看您的代码和屏幕截图,我认为您想在一张纸上放一个长列A,并将它以19个单元格的块转置到另一张纸中。

问题是 - 您实际上没有包含循环,并且您不更新目标的位置。我试着在我的例子中解决这些问题。如果那不是您想要的,请发表评论。

注意 - 通常使用.Select会使代码变慢,难以阅读并容易出错。最好创建引用特定范围的对象。

Sub copyChunk()
' copy chunks of 19 cells from column A of sheet 1
' and paste their transpose on sheet 3
' starting in the first row

Dim sh1 As Worksheet, sh2 As Worksheet
Dim r1 As Range, r2 As Range
Dim chunk As Integer
chunk = 19

Set sh1 = ActiveWorkbook.Sheets("sheet1")
Set sh2 = ActiveWorkbook.Sheets("sheet3")

' picking the starting point here - this could be "anywhere"
Set r1 = Range(sh1.Cells(1, 1), sh1.Cells(chunk, 1))
Set r2 = sh2.[A1]

While Application.WorksheetFunction.CountA(r1) > 0
  r1.Copy
  r2.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=False, Transpose:=True
  ' move down "chunk" cells for the source
  Set r1 = r1.Offset(chunk, 0)
  ' move down one row for the destination
  Set r2 = r2.Offset(1, 0)
Wend

End Sub