复制并粘贴一组单元格,其信息依赖于具有相对值的锁定单元格(来自参考单元格)

Copy and Paste an array of cells with information dependent on a lock cell (from a reference cell) with relative value

我遇到了以下问题:

我有一个项目编号和描述的列表,从 A5 开始向下,在 B5 我有一年的总销售数量,C5 对应于每单位销售价格,D5 对应于其销货成本每单位。

再往下,从单元格 A12 开始,我有一个特定的项目编号及其描述。然后我有这个项目每个月的销售数量(单元格 B13:D13),在下面我想要每月的销售数量乘以该项目的单位销售价格(在单元格 B14:D14 中)。

为此,我在 B14 中查找了 A12 中的商品编号和描述,在我之前提到的商品列表中($A$5:$D$7)以获得该商品的价格,然后乘以当月的销量。

这种方法的问题在于,当我拖动该结果时,在接下来的几个月里,它会停止搜索 A12 处的值,而是查找 B12 处的项目值,然后是 C12 等。

因此,为了解决这个问题,我使用公式 '=B13*VLOOKUP(INDIRECT(ADDRESS(ROW(Artikel)+ROWS(Artikel)-4;COLUMN(Artikel)+COLUMNS(Artikel)-4);TRUE);ItemSales;3;FALSE) 将值锁定在 A12。多亏了这一点,我能够将第一个月的结果拖到接下来的几个月并得到正确的结果。

但是,我想复制 table 和每月结果 ( $B$13:$D$15 ) 并将其粘贴到下面的几行,并且引用的项目不再是之前的项目A12,不过是A26新的吧

我用公式 k=VLOOKUP(OFFSET(INDIRECT(ADDRESS(ROW();COLUMN()));-2;-1;1;1);ItemSales;3;FALSE)*B27但是这个公式在拖动时不保存项目编号和描述值,所以我不能将它们结合起来

有什么想法可以实现吗??

我为你设计了两个公式。第一个用于 A 列。将其输入 A12 并向下复制,Item_Sales 范围内每行 6 行。

=IF(MOD(ROW(),6)=0,INDEX(Item_Sales,INT((ROW()-12)/6)+1,1),IFERROR(INDEX({"Total quantity","Total Sales","Total COGS"},MOD(ROW(),6)),""))

请注意,公式中出现的数字 12 指的是第 12 行,您的命名范围 "Artikel" 从这里开始。这是 "Item_Sales" 中第一项必须出现的第一行。数字 6 指的是一个数据集中的行数,第一组基本上是 Rows(12:17),第二组是 Rows(18:23),等等。第 16 行是隐藏的,第 17 行是空白的。如果您希望公式在其中写入任何内容,请展开数组 {"Total quantity","Total Sales","Total COGS"}

另一个公式适用于单元格 B13。您可以从那里将其复制到 B14:B15。您也可以将 B13:B15 复制到 B19,但以目前的形式,该公式将在 B16:B18.

中引发错误
=INDEX(Item_Sales,INT((ROW()-12)/6)+1,MOD(ROW(),6)+1)*IF(ISNUMBER(B12),B12,1)

同样,数字12和6的含义如上所述。如果将来您的数据或显示格式发生变化,您将需要修改它们。

为了让您更好地理解,我使用了 INDEX 函数,它采用二维范围并根据坐标从中提取值。 INDEX(Item_Sales, 1, 2) returns 定义为 "Item_Sales" 的范围第一行第二列单元格的值。当然,这些数字是可以计算出来的。

我使用的其他函数是 INT() 和 MOD()。 Int(5/6) returns 0,INT(1/6) 也是如此。此函数可用于定位一组中的第一行,每 6 行重复一次。 INT(13/6) returns 2,INT(19/6)=3。这些计算确定了在 Artikel.

中引用的 Item_Sales 中的行号

MOD returns 一个除法的模数。 MOD(5, 6) returns 5, MOD(13,6) returns 1. 如果没有模数,则 return 为 0。借助此信息,您可以重复计数从 0 到 6,然后从 0 重新开始。