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,每个都包含数值。
如果factor
是1
,我希望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 有一个转折的主要内容,如果未能解决你的问题,请参考以下文章