(VBA)数学期刊提交的快速生成表

时间:2015-12-14 12:50:50

标签: excel algorithm vba excel-vba

目前我的论文围绕着非常着名的数学问题,需要一些帮助制作一个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附件。

NumberTheoryPairs.xls

1 个答案:

答案 0 :(得分:0)

Excel开发人员提出了一个很好的观点 - 通常StackOverflow对从头开始构建宏的问题皱眉,但是因为我研究了抽象代数&大学数学数论,我想在这里帮忙: - )

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