将每一行从第一行复制到另一行
我有一个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
函数。 当这个函数没有参数时,它返回当前单元格的行号。 因此,我们可以结合OFFSET
和ROW
来创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]),然后过滤零,您将得到所有第七行。