excel - 在表格中获取重心
问题描述
我有 5x5 表和 25 个随机整数。我需要计算桌子的重力。
我花了几个小时试图弄清楚这段代码是如何工作的,它是用scala编写的,我试图将其更改为 VBA,但没有任何运气。这是我最好的尝试,但仍然不正确,而不是生成我手动输入的数字然后输入到 excel 中,这对我来说已经足够了。
Sub calcGravity()
'get sum
For i = 1 To 5
For j = 1 To 5
Sum = Sum + Cells(i, j).Value
Next j
Next i
For i = 1 To 4
For j = 1 To 4
x = x + (i + i) * Cells(i, j).Value / Sum
y = y + (j + i) * Cells(i, j).Value / Sum
Next j
Next i
Msgbox("Center :" & x & y)
End Sub
解决方案
这是一个可以计算质心的UDF:
Function CenterOfGravity(Masses As Variant) As Variant
'Masses is a 2-dimensional array of weights
'calculates center of gravity, returning the answer as
'an array of 2 value
If TypeName(Masses) = "Range" Then Masses = Masses.Value
Dim mass As Double
Dim momentX As Double, momentY As Double
Dim i As Long, j As Long
For i = LBound(Masses, 1) To UBound(Masses, 1)
For j = LBound(Masses, 2) To UBound(Masses, 2)
mass = mass + Masses(i, j)
momentX = momentX + j * Masses(i, j)
momentY = momentY + i * Masses(i, j)
Next j
Next i
CenterOfGravity = Array(momentX / mass, momentY / mass)
End Function
例如:
在上面的单元格 A7:B7 中,我输入=CenterOfGravity(A1:E5)
了一个数组公式(Ctrl+Shift+Enter
接受)。
推荐阅读
- list - 如何让动态列(如第 w1、w2、w3 周等)包含数字值作为 Sharepoint 列表中的分数
- java - 匹配包含任何子字符串的列表
- android - OkHttp(s)URLConnection 类在 4.9.0 版本中不可用
- javascript - 给定一个数组索引,如何在包装时获取索引前后的 n 个邻居?
- vue.js - 如何从 Uppy 的回调事件中访问“this”
- python - python scrapy页面源与按下F12时显示的不同
- python - 如何将我在 python 输出中收到的 mqtt 数据保存在文本中?
- reactjs - 参考选择和选项如何使用
- javascript - 如何在 iframe 中使用 Leaflet.js 中的地图
- javascript - 如何设置可以从多个事件侦听器引用的函数并为每个元素使用不同的属性?(JS)