2012-08-28 81 views
0

我有一个大约300001行和20列的庞大电子表格。第一列A是以0.001为步长从0到3的数字的重复(3001个单元,总共100次重复)。我想挑出对应于3列A条目的ROWS,将它们转置并将它们写入新的工作表。我该怎么做呢?在宏和VBA总noob但我熟悉编程(主要是C++)。用于复制特定行的Excel宏

谢谢!

回答

3

你并不是真的需要宏来做这样的事情 - 但是,这又似乎更像是你为了娱乐而做的事情,而不是实际的事情。

您可以将列A中的范围“A1:T300001”从高到低排序,然后复制并粘贴前100行。

但是如果你想要一个宏,这样做,这应该为你工作:

Sub MacroAutofilterExample() 
    ActiveSheet.Range("$A$1:$T$300001").AutoFilter Field:=1, Criteria1:="3.000" 

    Range("A1:T300001").Select 
    Selection.Copy 
    Sheets(2).Select 
    Range("A1").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Range("A1").Select 

    Sheets("Sheet1").Select 
    Range("A1").Select 
    Selection.AutoFilter 
    Range("A1").Select 

End Sub 

显然,他们是通过选择(因为我记录它的一部分)的一些效率损失,但你可以改变那些使用设定范围 - 通常这应该给你一个想法。

编辑:

你会改变现场:

Transpose:=False 

在上面的代码:

Transpose:=True 

,如果你想你的结果换位。

+0

自动文件自动排序整行/我的意思是如果我有两行(2.99,5,6)和(3.00,1,2)我会看到第二组数字完全向上移动或将看到列按(3.00,5,6)和(2.99,1,2)排序。我想保留这组数字的顺序。 –

+1

自动过滤与排序不同。它所做的只是过滤,它不会重新组织(实际上它所做的只是隐藏不符合条件的行)。因此,上述代码中的命令Selection.AutoFilter会将您的数据恢复到正常状态(到其初始状态 - 它将取消隐藏所有先前隐藏的行)。所以你最初的订购不会丢失。但无论如何,如果您的初始排序很重要,我会建议您有一个从1到300001的列 - 所以您可以对其进行排序并自由操作,而不必担心会丢失对您而言很重要的任何排序。 – Stepan1010