机械测试机每项测试输出 4 列中的 1000 行数据(+ 标题行)。但是,它输出从第 1002 行开始的第二个测试,从第 2003 行开始的第三个测试,依此类推。我需要将每 1001 行(4 列)的块移动到新列中的第 1 行开始。测试 1 应为 AD 列,测试 2 应为 EH 列,依此类推。
任何帮助,将不胜感激
答案1
输出将在单独的工作表上。
假设您有 10 个数据块,这些数据块将在范围内Export_Curve_03!A1:D10010
。
在输出工作表的 A1 单元格中添加公式
=INDEX(Export_Curve_03!$A$1:$D$10010,ROW(A1)+1001*INT((COLUMN(A1)-1)/4),1+MOD(COLUMN(A1)-1,4)
将此公式复制到第 1001 行并复制到足够的列 - 10 个数据块的情况下为 40 列,因此复制到范围A1:AN1001
。
对于每组输入数据,可能只需要进行一次转换,因此如果需要考虑存储空间,我的做法是使用选择性粘贴将输出工作表上的所有内容更改为值。
解释
该INDEX
函数用于从数组中选择单个单元格,如上所述,其一般形式INDEX(array,i, j)
为数组第 i 行和第 j 列的值。
输出分为Export_Curve_03!$A$1:$D$10010
1001 行的块,其中第一个块位于输出的 AD 列,第二个块位于 EH 列,第三个块位于 IL 列,等等。因此,可以使用表达式将输出中的单元格与输入块号匹配
INT((COLUMN(cell)-1)/4)
表示cell
单元格引用,例如 A805 或 X20
实际上,对于 AD 列中的单元格,此表达式的计算结果为 0,对于 EH 列中的单元格,此表达式的计算结果为 1,对于 IL 列中的单元格,等等。这比块编号小 1,这很方便,因为可以将其合并到表达式中
ROW(cell)+1001*INT((COLUMN(cell)-1)/4)
从输入中识别出与输出单元格相对应的正确行号。
通过在输出的各列中重复模式 1,2,3,4,1,2,3,4,...(从 A 列的 1 开始),可以获得与输出的某一列匹配的输入所需的列号。
表达方式
1+MOD(COLUMN(cell)-1,4)
有效地识别与输出中的单元格相对应的输入列(1、2、3 或 4)。
现在可以将与任何输出单元格相对应的输入的行和列的两个表达式插入到 INDEX 函数中,这样就完成了解释。