【问题标题】:Google sheets: get the price automatically according to the First In, First Out method谷歌表:根据先进先出的方法自动获取价格
【发布时间】:2022-01-16 23:34:55
【问题描述】:

我有一个详细的电子表格,其中列出了不同的产品(大约 1000 个 - 表“产品”是一个较短的示例)。 https://docs.google.com/spreadsheets/d/1X_OGWq1SLUcPOSmcXAfzn1ySW4kOtwn2sFroAtlLpKQ/edit?usp=sharing

在 IN/OUT 表上,我输入日期、单位数量、购买或出售的产品名称(E 列选择购买或出售。)。

在 N 列中,我手动输入购买的单位价格。所以同一种产品可以在不同的日期以不同的价格购买。

我想在输入有关已售产品的数据时自动获取 O 列中的价格。但首先购买的必须先出售。示例电子表格中有更多解释。

有可能以某种方式做到这一点吗? (图片已编辑)

【问题讨论】:

  • 输出会是什么样子?它只是6.43 值吗?如果是这种情况,=INDEX(FILTER(O3:O13;NOT(ISBLANK(O3:O13)));ROWS(FILTER(O3:O13;NOT(ISBLANK(O3:O13))))) 是否适合您的情况?或者您想返回类似Product 1 - 6.43、Product 3 - 1 的内容?如果这些都不是,您介意分享所需的输出吗?
  • 谢谢你的回答,但我想它会返回一些不同的东西......
  • 是的,确实,必须考虑产品的名称!
  • 。我想在 O5 单元中获得 5 个,因为该产品有 10 件库存:5 件以 5 美元购买,5 件以 7 美元购买。所以,当我卖出 3 个单位时,这些是第一次购买的单位,所以售价是 5 美元。但是,当我下次出售此产品并出售 7 个单位时,这 7 个单位的价格将是 6.45 美元,因为 2 个单位的 7 的购买价格为 5 美元,另外 5 个单位的 7新的购买价格为 7 美元。
  • 当我下次出售此产品时(图中未显示),将不再有 5 美元的价格,因为前 5 美元的单位已全部售罄。

标签: google-sheets


【解决方案1】:

这是一个自定义函数

function sellPrice() {
  var begin = 3
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var currentRow = sh.getActiveRange().getRow()
  var data=sh.getRange(begin,1,currentRow-begin+1,18).getValues()
  if (data[currentRow-begin][4]!="Sold"){return}
  var product = data[currentRow-begin][10]
  var alreadySold = 0
  for (var i=0;i<data.length;i++){
    if (data[i][10] == product && data[i][4] == 'Sold' && i < (currentRow-begin)){
      alreadySold += data[i][2]
    }
  }
  var toBeSold = data[currentRow-begin][2]
  var price = 0
  data.forEach(function(row){
    if (row[10] == product && row[4] == 'Purchased'){
      var qty = Math.max(Math.min(row[2] - alreadySold,toBeSold),0)
      alreadySold -= row[2] - qty
      toBeSold -= qty
      price += qty * row[13]
    }
  })
  return (price/data[currentRow-begin][2])
}

使用它:

=sellPrice($O$1)

选中/取消选中 O1 以在必要时重新计算

我还对 FIFO 和 AVG 进行了比较,最终情况相同。 AVG 提供的变化较少。

【讨论】:

  • 这是一个巨大的挑战!开发如此复杂,以至于一个简单的公式是不够的。也许是我引以为豪的技巧之一!
  • 我之前的评论看不到了,非常感谢你!!这个功能太棒了!我认为管理它是不可能的。现在我将它应用到我的原始电子表格中。
  • 非常感谢。我看到你的评论消失了!奇怪!
猜你喜欢
  • 2018-10-11
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多