目前我的论文围绕着非常着名的数学问题,需要一些帮助制作一个VBA表格,我可以按下输入,并输出大小(N)的数据。
我使用多维索引,匹配,排名和间接函数制作了一个完整的工作簿,然后生成这些数据。这更像是一个概念证明,显示了所使用的数字对背后的思考过程。
然而,我的8核心处理器耗时超过2小时,停留在60%,产生一个大约20行高,100列宽的钟形曲线形数据阵列。
幸运的是,输出的数据可以通过使用广义线性公式生成“强力”。这就是我需要的样子:
TOP NUMBER: (2N/2) ROUNDED DOWN TO NEAREST ODD#
13 13
{ODD#s} BETWEEN 11 11 11 11
3 AND (2N/2) ROUNDED DOWN 9 9 9 9 9 9
TO NEAREST ODD# 7 7 7 7 7 7 7 7
5 5 5 5 5 5 5 5 5 5
3 3 3 3 3 3 3 3 3 3 3 3
(2N|N>3) 6 8 10 12 14 16 18 20 22 22 24 26
理想情况下,我可以使用外部宏,对话框打开,输入我想要的最大2N,excel会生成上面的工作表。计算将是这样的:
输入2N = 26; 2N / 4 = 6.5; 6.5舍入到最接近的整数是6. 6是从(3到13)的行数。添加1行26; 6 + 1 = 7。
在我的数学论文中,这非常重要。如果你可以帮助你,你可能会成为数论中一个很好的发现的一部分,当然你会记录下你的“非常优秀的技能”:D
如果要求太多,我道歉。如果是的话,如果你能指点我,我会自己解决。但是,找到如何通过用户定义的公式填充自己的数据数组的指南并不是很典型。
下面是它应该如何显示的excel附件。
答案 0 :(得分:0)
John Coleman提出的另一个观点是它非常简单,但是如果你想要使用大整数,Excel将会用完列(但你可以在内存中使用大数组)... < / p>
通过摆弄N来玩这个子,然后如果它是你想要的,那么我们可以在函数中添加一个参数,然后用一个Userform来弹出等等
Public Sub GoldbachTable()
ThisWorkbook.Worksheets(1).Cells.Clear
Dim N As Long
N = 50
Dim arr() As Variant
Dim aRows As Long, aCols As Long
Dim i As Long, j As Long, start As Long, oddNum
start = 1
oddNum = 3
aRows = Round(N / 2 - 0.1) + 1
aCols = N - 2
ReDim arr(1 To aRows, 1 To aCols)
For i = 1 To aCols
arr(aRows, i) = (i + 2) * 2
Next i
For i = aRows - 1 To 1 Step -1
For j = start To aCols
arr(i, j) = oddNum
Next j
If start + 2 > aCols Then
start = start + 1
Else
start = start + 2
End If
oddNum = oddNum + 2
Next i
ThisWorkbook.Worksheets(1).Range("A1").Resize(aRows, aCols) = arr
End Sub