将每一行从第一行复制到另一行

我有一个Excel电子表格,有1列700行。 我关心每一个第七行。 我不想进去,并删除我关心的每一行之间的6行。 所以我的解决scheme是创build另一个工作表,并指定我想要的每个单元格的引用。

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

但是我不想input每一个这样的公式…… 100次。我想如果我select了三个并拖动了这个盒子,它就会明白我想要做什么,但是没有运气。

任何想法如何优雅/有效地做到这一点?

在你的新工作表的A1中,把这个:

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

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

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

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

这也可以复制。

如果我每隔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”上进行数据升序。 经过sorting,所有的1将是系列中的第一个,所有的7将是第七个项目。

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

OFFSET方法

OFFSET需要3个强制参数。 第一个是我们想要抵消的给定单元格。 接下来的两个是我们要抵消的行数和列数(向下和向右)。 OFFNET返回单元格的结果。例如, OFFSET(A1, 1, 2) OFFNET OFFSET(A1, 1, 2)返回单元格C2的内容,因为A1是单元格(1,1) ,如果我们加上(1,2) (2,3)对应于小区C2

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

ADDRESS + INDIRECT方法

ADDRESS接受两个整数input,并以stringforms返回单元的地址/名称。 例如, ADDRESS(1,1)返回"$A$1"INDIRECT获取单元格的地址并返回内容。 例如, INDIRECT("A1")返回单元格A1的内容(它也接受带有$的input)。 如果我们在ADDRESS使用乘法器的ROW ,我们可以得到每个第n个单元的地址。 例如,第1行中的ADDRESS(ROW(), 1)将返回"$A$1" ,第2行中将返回"$A$2"等等。 所以,如果我们把这个放在INDIRECT里面,我们可以得到每个第n个单元的内容。 例如,当向下拖动时, INDIRECT(ADDRESS(1*ROW()*3,1))返回第一列中每个第三个单元格的内容。

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

B包含使用OFFSET方法的错误尝试,但是我们忘记使用$ 。 可以看出,虽然我们乘以3 ,但实际上我们每隔四行。

C包含一个不正确的尝试,在使用OFFSET方法,我们记得使用$ ,但忘了减去。 所以,虽然我们得到每个第三个值,我们跳过一些值(1和4)。

D列使用OFFSET方法包含正确的function。

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

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

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

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

创build一个macros并使用以下代码来获取数据并将其放在一个新工作表(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

如果您的原始数据是以多列forms存在的,并且您的原始数据的第一个input是C42,并且您希望新的(下采样)数据也以列的forms出现,但是只有第七行,那么您将还需要减去第一个条目的行号,如下所示:

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

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

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