有没有更快的方法来实现这一点,而无需在Excel中手动执行此操作

时间:2016-05-18 10:01:50

标签: excel

我在这里要完成的是复制文件中的每一行并添加到单元格。举个例子,我有这个:

productID    size1  size2 size3 size4 size5       Amount
1             5      6     7     8     9           210
2             4      6     8     10    11          246
3             5      8     11    12    13          180
4             6      7     8      9    10          175
5             1      2     3      4     5          450

我需要做的是:

productID  size   Amount
1           5        210
1           6        210
1           7        210
1           8        210
1           9        210
2           4        246
2           6        246
2           8        246
2           10       246
2           11       246
3            5       180

等等 有没有一种更快的方法来实现这一点,而无需手动完成。我最多有4000种产品,有8种不同的尺寸。需要你的帮助

1 个答案:

答案 0 :(得分:0)

您的样本数据位于A1:G6。

我将以下内容放入I2并将其复制下来作为ID计数器

=I1+(MOD(ROW(A1)-1,COLUMNS(B1:F1))+1=1)

将其复制到底部后,我将I2替换为1,以便在单元格I1中包含标题信息或其他数字时不会出错。

=OFFSET($B$2,I2-1,MOD(ROW(A1)-1,COLUMNS($B$1:$F$1)),1,1)

我把它放在J2中并复制下来。它一次遍历一个单元格,直到它到达最后一列,然后返回到第一列但是一行。

=OFFSET($G$2,I2-1,0,1,1)

我把它放在K2中并复制下来。当产品ID号更改为下一个值时,它会跳转到下一行。

概念证明

Proof of concept

使用少量数据,这种方法是可以的。但是,对于大量数据,OFFSET是一个易失性函数,每次工作表(可能是工作簿)上的某些内容发生更改时都会重新计算。因此,如果这是一次性事情,请在完成后复制转换后的信息,并将其作为覆盖公式的值重新过去。

解决方案中使用的函数:

MOD - 返回数除以除数后的余数。结果与除数具有相同的符号。这通常被用作一个计数器,当你继续通过行号

时它继续循环

ROW - 返回引用的行号。这被用作上面的计数器。当你向下复制时,单元格引用从A1变为A2到A3等,因此ROW()充当计数器。

COLUMNS - 返回数组或引用中的列数。注意最后的S.与语法中的ROW或COLUMN类似,但它不返回单个单元格的数量,而是返回选择中的列数。在这种情况下,我用它来确定重复数字1的次数,因为它被用作mod函数中的除数。

OFFSET - 返回对单元格或单元格区域中指定行数和列数的范围的引用。返回的引用可以是单个单元格或一系列单元格。您可以指定要返回的行数和列数。在上面我将参考单元锁定在左上角,然后使用各种计数器,我根据行向下或向右移动,并返回1 X 1或单个单元格的范围。