我在这里要完成的是复制文件中的每一行并添加到单元格。举个例子,我有这个:
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种不同的尺寸。需要你的帮助
答案 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号更改为下一个值时,它会跳转到下一行。
概念证明
使用少量数据,这种方法是可以的。但是,对于大量数据,OFFSET是一个易失性函数,每次工作表(可能是工作簿)上的某些内容发生更改时都会重新计算。因此,如果这是一次性事情,请在完成后复制转换后的信息,并将其作为覆盖公式的值重新过去。
解决方案中使用的函数:
MOD - 返回数除以除数后的余数。结果与除数具有相同的符号。这通常被用作一个计数器,当你继续通过行号
时它继续循环ROW - 返回引用的行号。这被用作上面的计数器。当你向下复制时,单元格引用从A1变为A2到A3等,因此ROW()充当计数器。
COLUMNS - 返回数组或引用中的列数。注意最后的S.与语法中的ROW或COLUMN类似,但它不返回单个单元格的数量,而是返回选择中的列数。在这种情况下,我用它来确定重复数字1的次数,因为它被用作mod函数中的除数。
OFFSET - 返回对单元格或单元格区域中指定行数和列数的范围的引用。返回的引用可以是单个单元格或一系列单元格。您可以指定要返回的行数和列数。在上面我将参考单元锁定在左上角,然后使用各种计数器,我根据行向下或向右移动,并返回1 X 1或单个单元格的范围。