【问题标题】:VBA in excel, it should return an array [duplicate]excel中的VBA,它应该返回一个数组[重复]
【发布时间】:2016-11-12 04:47:20
【问题描述】:

我正在尝试在 excel 中创建一个函数,它将所有相对素数赋予给定数字。但是,当我尝试它时,它只会用数组的第一个值填充一个单元格。

Function selectE(phi) As Variant

Dim list(999) As Variant
Dim count As Integer

count = 0

For i = 2 To phi
    If WorksheetFunction.Gcd(phi, i) = 1 Then
        list(count) = i
        count = count + 1
    End If
Next i


selectE = list()

End Function

【问题讨论】:

  • 您是如何输入公式的?
  • 我没有看到你在单元格中填写的部分。这是一个返回数字数组的函数。您需要做的就是遍历返回的数组并填充单元格(每次增加单元格的位置)
  • 我只是在excel单元格中写了函数名来调用函数。
  • 这是一个数组函数(它返回多个值),因此您需要选择多个单元格,键入您的公式,然后按 Ctrl+Shift+Enter 将其应用于单元格.如果操作正确,公式将在公式栏中显示为 {}。

标签: vba excel


【解决方案1】:
Function selectE(phi) As Integer()
    Dim list() As Integer
    Dim count As Integer

    count = 0

    For i = 2 To phi
        If WorksheetFunction.Gcd(phi, i) = 1 Then
            ReDim Preserve list(count + 1)
            list(count) = i
            count = count + 1
        End If
    Next i

    selectE = list()
End Function

上面的函数允许你返回一个素数数组。

不过,我对它做了一些小小的修改:

  1. 返回一个整数数组而不是一个变体以使其更明确(即Function selectE(phi) As Integer()

  2. 我没有将初始数组大小设置为 999(即Dim list() As Integer),我使用Redim Preserve list(count + 1) 使其大小动态增加为数组中素数的数量

所以现在我们需要一个 sub 来调用该函数,然后通过遍历返回的数组来用素数填充单元格。请注意,我们正在填充第一列,并且 for 循环递增行以将值放入(即 Cells(i + 1, 1) = myarr(i))。另请注意,我只是针对selectE(1234) 中的数字 1234 对其进行测试,但您可以针对任何数字进行测试。

Sub FillInCells()
    Dim myarr() as Integer
    Dim i as Integer
    myarr = selectE(1234)
    For i = 0 to UBound(myarr) - 1
        Cells(i + 1, 1).Value = myarr(i)
    Next i
End Sub

【讨论】:

  • 我尝试添加 sub,但是当我转到 excel 表并尝试我的功能时,它仍然只填充一个单元格
  • 将我的函数和 sub 复制到你的 vb 编辑器中。然后尝试运行它。让我知道它是否有效。我测试了它,它运行正确。
  • 太棒了 :) 很高兴它成功了!
猜你喜欢
  • 2013-01-24
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2021-10-13
相关资源
最近更新 更多