openoffice calc sumproduct 有一个转折

Posted

技术标签:

【中文标题】openoffice calc sumproduct 有一个转折【英文标题】:openoffice calc sumproduct with a twist 【发布时间】:2018-02-06 04:34:02 【问题描述】:

我第一次尝试 VBA,除了使用简单的函数;在这里请求启动:

假设这个(部分)工作表

factor      b-count c-count d-count
A2          b2      c2      d2      ...
A3          b3      c3      d3      ...

假设这些是第一列和第一行 A1 到 D3,每个都包含数值。

如果factor1,我希望A(N)(列'A',行N >= 2)保存第1 行和第N 行的和积。 当factor 不是1 时,就会出现转折。在那种情况下,我想要一个 sumproduct count*round(value * factor).

例子:

1.5         2       1       0       4
=myfunc(2)  4       8       11      15
=myfunc(3)  11      20      28      36
=myfunc(4)  29      53      74      94

myfunc(2) 的结果round(4*1,5)*2+round(8*1,5)*1+round(15*1,5)*4 = 6*2+12*1+23*4 = 12+12+92 = 116, myfunc(3) = 17*2+30+54*4 = 34+30+216 = 280, myfunc(4 ) = 44*2+80+141*4 = 88+80+564 = 732

我可以在每个值下面插入一行,将每个值乘以因子;但我会喜欢更高级的东西。

基本上认为(双关语不是故意的):

col='B'
sum=0
do while (col)(N)>0
    sum=sum+(col)(1)*round((col)(N)*A1;0)
    col=col+1
loop
A(n)=sum

其中 (col)(N) 指的是col 列和N 行中的单元格。

学习手册不够重要;但如果有人能即兴发挥,那就太好了。

还有一点:我读过自定义函数必须存储在“标准库”中; 但我找不到任何关于如何做到这一点的提及。谁会给我指出正确的手册页?

【问题讨论】:

整行,还是一行的一部分?您的示例数据存储在哪里,要使用哪个count?另外,value 是从哪里来的?是只有row1和rowN的sumproduct,还是row1到rowN的sumproduct 这个问题的格式很好,但不是很清楚。 “A2”是什么意思——它是一个字符串,还是表示 A 列第 2 行?如果是后者,那么它可能包含什么?一个实际的例子会有所帮助,而不仅仅是变量。 请删除vba 标签,因为它通常只用于MS Office。可能您想添加libreoffice-basic 标签。语言不一样。 @JimK 已更新。变清楚了吗? @AJD 数据在 B 列和更右边。这只是连续的一部分;实际上它的列 Z 而不是 A,AA 而不是 B 等等。该列表向右侧开放。但是您可以假设它在1 行中有一个空单元格时结束(或者实际上,当前在一张表中为第 76 行,在另一张表中为 65 行) 【参考方案1】:

转到工具 -> 宏 -> 组织宏 -> OpenOffice Basic。选择My Macros -> Standard -> Module 1(这就是 Standard 库的含义),然后按 Edit

粘贴以下代码。

Function SumProductOfTwoRows(firstColumn As Long, row As Long, firstRow As Long)
    'For example: =SUMPRODUCTOFTWOROWS(COLUMN(); ROW(); ROW($A$1))
    firstColumn = firstColumn - 1  'column A is index 0
    row = row - 1  'row 1 is index 0
    firstRow = firstRow - 1  'row 1 is index 0
    oSheet = ThisComponent.CurrentController.ActiveSheet
    sum = 0
    column = firstColumn + 1
    factor = oSheet.getCellByPosition(firstColumn, firstRow).getValue()
    Do
        value = oSheet.getCellByPosition(column, row).getValue()
        count = oSheet.getCellByPosition(column, firstRow).getValue()
        If value = 0 Then Exit Do
        sum = sum + count * CLng(value * factor)
        column = column + 1
    Loop
    SumProductOfTwoRows = sum
End Function

在 A2 中输入此公式并向下拖动以填充到 A4。

=SUMPRODUCTOFTWOROWS(COLUMN(); ROW(); ROW($A$1))

结果:

这种用户定义的函数在重新打开文件时会产生错误。为避免该错误,请参阅我在https://***.com/a/39254907/5100564 的回答。

【讨论】:

以上是关于openoffice calc sumproduct 有一个转折的主要内容,如果未能解决你的问题,请参考以下文章

最佳列宽 OpenOffice Calc

连接 OpenOffice Calc/电子表格文件

用于 CSV 保存的 openoffice calc 宏

OpenOffice.org Calc SUMIF 语句

Openoffice.org Calc - 为变量赋值

在 OpenOffice Calc 中创建图表