从Excel工作表中提取值

时间:2018-04-23 21:46:47

标签: excel

我正在尝试从大型Excel工作表中提取值。

目前,我的工作表是1列,可以说是2049行数据集(Sheet1):

A1
A2
...
A2049

从工作表Sheet1,我想以下列格式提取数据(其中A1A2等是这些单元格的对应值:

A1    A65   ...   A1985
A2    A66   ...   A1986
A3    A67   ...   A1987
...   ...   ...   ...
A64   A128  ...   A2049

我不知道该怎么做。我最初想过使用OFFSET=Sheet1!$A$COLUMN()*65之类的东西;但是,我无法让OFFSET以我想要的方式工作,而且上面的语法不会生效。

关于我需要什么功能或语法的任何想法?

2 个答案:

答案 0 :(得分:1)

使用非易失性INDEX()和一些数学来获得正确的行:

=INDEX(Sheet1!$A:$A,ROW(1:1)+(COLUMN(A:A)-1)*64)

enter image description here

答案 1 :(得分:1)

为此你可以使用'索引'式。它的工作原理如下:

=index(lookUpColumn, row)

假设您要从A列开始将数据导入Sheet2     每行应该有64个值。 所以在A列中你有第1行到第64行的值, 在B 65至128栏中

这可以通过row() + (column()-1)*64

计算得出

对于列A -> column() evaluates to 1,因此术语缩减为row()

=INDEX('Sheet1'!$A:$A;  ROW() + ( COLUMN() - 1 ) * 64)
编辑:正如斯科特克拉纳指出的那样,人们可能希望开始在B或C等处导入。这种转变可以通过更改公式中的1来完成。对于B -> 2 for c -> 3。如果导入开始于不同于1的行,则还需要将移位包含在row()术语

=INDEX('Sheet1'!$A:$A;  ROW()- rowShift + ( COLUMN() - columnShift ) * 64)

对于B2:

=INDEX('Sheet1'!$A:$A;  ROW()- 1 + ( COLUMN() - 2) * 64)