2017-06-02 99 views
1

我试图更改一组数据具有标头。目前预期的列都在单独的行中。我想在列A中保留第一个数据点“名称”,但将第二个数据点,“数字”移动到列B,第三个数据点,“平均”移动到列C.然后删除那些现在为空的两行在那里存在数量和平均值,并为下一组数据重复此过程。例如:Excel宏VBA命令为“转置”,但没有转置可用

  • 姓名,号码,平均值(预期头)
  • 约什
  • 3.4
  • 克雷格
  • 2.3
  • 史密斯
  • 8.3

这里是想什么我它是:

  • 姓名,号码,平均(预期头)
  • 乔希,13,3.4
  • 克雷格,15,2.3
  • 史密斯,64,8.3

我试过几件事情:

1)移调...但是由于某些原因,这个PasteSpecial函数在我将它嵌入到的.XLSM文件中不可用。代码参考:

Worksheets("Sheet1").Range("A1:A5").Copy 
Worksheets("Sheet2").Range("A1").PasteSpecial Transpose:=True 

2)复制并粘贴。这是一项正在进行的工作,代码不能编译。

For k = 3 To maxRow Step 1 
    Rows(k).Select 
    Selection.Cut 
    Range(Columns("B"), Rows(k)).Select 
    Selection.Paste 
    Rows(k + 1).Select 
    Selection.Cut 
    Range(Rows(k), Columns(C)).Paste 
    'Range(Columns("B"), Rows(k)).PasteSpecial Transpose:=True 
    'Range(Rows(k), Rows(k + 2)).Select 
    'Selection.Delete Shift:=x1Up 
Next k 

我至少有一千个数据点。我的代码能够处理到最后一行,但这是我宏中的最后一个重要功能。任何帮助感谢!

回答

2

试试这样说:

For k = 3 To maxRow Step 3 
    Sheet2.Cells(Int((k + 1)/3), 1).Resize(, 3).Value = _ 
    Application.Transpose(Sheet1.Cells(k, 1).Resize(3).Value) 
Next k 
+0

奇妙的是,在解决问题转效果很好。我将在未来使用它。我找到了一个解决方案,因为它大部分错误地使用了Range命令。 { 昏暗maxRow3只要 maxRow3 = ActiveSheet.UsedRange.Rows.Count 对于k = 3要MaxRow的步骤1 细胞(K,1)。选择 Selection.Cut 细胞(K - 1,2)。选择 ActiveSheet.Paste 细胞(K + 1,1)。选择 Selection.Cut 细胞(K - 1,3)。选择 ActiveSheet.Paste 范围(行(K),行(K + 1))。选择 Selection.Delete Shift:= x1Up Next k } – joshjayse

+0

@jfadriqu抱歉,我不理解您的评论。 –

+0

不用担心,您的建议运作良好。我刚刚结束了一个更长的手动循环来做到这一点,这是我在那里写的。 – joshjayse