将每个第n行从一个工作表复制到另一个工作表

时间:2008-10-17 04:18:16

标签: excel

我有一个包含1列,700行的Excel电子表格。我关心每七条线。我不想进入并删除我关心的每一行之间的6行。所以我的解决方案是创建另一个工作表并指定对我想要的每个单元格的引用。

=sheet1!a1
=sheet1!a8
=sheet1!a15

但是我不想输入这些公式中的每一个......“100次。我想如果我选择了三个并拖动了盒子,它会理解我想要做什么,但没有运气。

关于如何优雅/高效地完成这项工作的任何想法?

8 个答案:

答案 0 :(得分:120)

在新单张的A1中,输入:

=OFFSET(Sheet1!$A$1,(ROW()-1)*7,0)

...并复制下来。如果从第1行以外的地方开始,将ROW()更改为ROW(A1)或第1行的其他单元格,然后再次向下复制。

如果要复制第n行但是要复制多列,请使用以下公式:

=OFFSET(Sheet1!A$1,(ROW()-1)*7,0)

这也可以复制。

答案 1 :(得分:11)

如果我面对提取每第7行,我会在“A”列之前“插入”一列。然后我会(假设第1行有一个标题行)输入2,3,4,5,6,7,8行中的数字1,2,3,4,5,6,7突出显示1,2,3,4,5,6,7并将其粘贴到工作表的末尾(700行值)。结果将是1,23,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7 ......。现在,在“A”列上进行数据升序排序。排序后,所有的1将成为系列中的第一个,所有7个将是第7个项目。

答案 2 :(得分:11)

在我看来,这个问题的答案太具体了。以下是两种不同方法和一个完整示例的更一般性答案的尝试。

OFFSET方法

OFFSET需要3个强制参数。第一个是我们想要偏移的给定单元格。接下来的两个是我们想要偏移的行数和列数(向下和向右)。 OFFNET会返回此结果导致的单元格内容。例如,OFFSET(A1, 1, 2)会返回单元格C2的内容,因为A1是单元格(1,1),如果我们添加(1,2)我们得到的(2,3)对应于单元格C2

为了让它返回另一列的每第n行,我们可以使用ROW函数。如果此函数没有参数,则返回当前单元格的行号。因此,我们可以组合OFFSETROW来创建一个函数,通过向ROW返回的值添加乘数来返回每个第n个单元格。例如OFFSET(A$1,ROW()*3,0)。请注意在目标单元格中​​使用$1。如果不使用,则偏移将从不同的单元格偏移,从而实际上将1添加到乘数。

ADDRESS + INDIRECT方法

ADDRESS接受两个整数输入,并以字符串形式返回单元格的地址/名称。例如,ADDRESS(1,1)返回"$A$1"INDIRECT获取单元格的地址并返回内容。例如,INDIRECT("A1")返回单元格A1的内容(它还接受带有$的输入)。如果我们在ROW内使用ADDRESS和乘数,我们可以得到每个第n个单元格的地址。例如,第1行中的ADDRESS(ROW(), 1)将返回"$A$1",第2行中将返回"$A$2",依此类推。所以,如果我们把它放在INDIRECT里面,我们就可以获得每个第n个单元格的内容。例如,INDIRECT(ADDRESS(1*ROW()*3,1))在向下拖动时返回第一列中每个第3个单元格的内容。

实施例

请考虑以下电子表格的屏幕截图。标题(第一行)包含下面行中使用的调用。 enter image description hereA包含我们的示例数据。在这种情况下,它只是正整数(计数继续显示在显示的区域之外)。这些是我们想要获得的每三分之一的值,也就是说,我们希望得到1,4,7,10等等。

B包含使用OFFSET方法的错误尝试,但我们忘记使用$。可以看出,当我们乘以3时,我们实际上得到了每第4行。

C包含错误尝试使用我们记得使用OFFSET的{​​{1}}方法,但忘记减去。因此,虽然我们确实获得了每个第3个值,但我们跳过了一些值(1和4)。

$包含使用D方法的正确函数。

OFFSET包含使用E + ADDRESS方法的错误尝试,但我们忘记减去。因此我们最初跳过了一些行。与列INDRECT相同的问题。

C包含使用F + ADDRESS方法的正确函数。

答案 3 :(得分:4)

插入一个新列并在1,2,3,4等中放置一个系列。然后创建另一个新列并使用命令= if(int(a1 / 7)=(a1 / 7),1,0 )你应该每7行获得一个1,过滤1

上的列

答案 4 :(得分:3)

突出显示第7行。画笔前7行的格式几次。然后做一大块油漆刷复制格式,直到你完成。应突出显示每7行。按颜色过滤,然后从突出显示的单元格中复制并粘贴(粘贴值)到新工作表中。

答案 5 :(得分:1)

创建一个宏并使用以下代码获取数据并将其放入新工作表(Sheet2)中:

Dim strValue As String
Dim strCellNum As String
Dim x As String
x = 1

For i = 1 To 700 Step 7
    strCellNum = "A" & i
    strValue = Worksheets("Sheet1").Range(strCellNum).Value
    Debug.Print strValue
    Worksheets("Sheet2").Range("A" & x).Value = strValue
    x = x + 1
Next

如果这有帮助,请告诉我! JFV

答案 6 :(得分:0)

如果您的原始数据是包含多列的列形式和C42中原始数据的第一个条目,并且您希望新的(下采样)数据也是列形式,但只有每七行,那么你还需要减去第一个条目的行号,如下所示:

=OFFSET(C$42,(ROW(C42)-ROW(C$42))*7,0)

答案 7 :(得分:-1)

添加新列并使用升序编号填充。然后过滤([column] mod 7 = 0)或类似的东西(在我面前没有Excel实际尝试这个);

如果您不能按公式过滤,请再添加一列并使用公式= MOD([column; 7]),然后过滤零,您将获得所有第七行。