2016-11-12 59 views
0

我試圖讓Excel中的一個功能,這將使所有的相對素數給定數。但是,當我嘗試它時,它只是用數組的第一個值填充一個單元格。VBA在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 
+0

究竟你是如何輸入公式? –

+0

我沒有看到你填寫單元格的部分。這是一個返回數組數組的函數。所有你需要做的是通過一個返回數組並細胞(每次增加細胞的位置) – cullan

+0

我只是在Excel單元格中寫的函數名稱調用函數填寫。 –

回答

0
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. 我沒有」 t將初始數組大小設置爲999(即Dim list() As Integer),我使用Redim Preserve list(count + 1)使它的大小增加爲動態數組中的素數

所以,現在我們需要一個子調用該函數,然後與素數的細胞通過返回數組迭代填寫。請注意,我們正在填充第一列,並且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 
+0

我嘗試添加子,但仍當我去到Excel工作表,並嘗試我的功能也還罷了,只是一個細胞 –

+0

複製我的兩個功能和子到您的VB編輯器。然後嘗試運行它。讓我知道它是否有效。我測試了它,它運行正常。 – cullan

+0

真棒:)很高興它工作! – cullan