2016-11-12 3 views
0

私は与えられた数にすべての相対的な素数を与えるExcelで関数を作ろうとしています。しかし、私が試してみると、配列の最初の値で1つのセルが満たされます。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. 私はdidnの」:

    しかし、私はそれにいくつかの小さな編集をしました初期配列サイズを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 
+0

私はサブを追加しようとしましたが、Excelシートに行ってまだ私の関数を試しても、それはまだ1つのセルを埋めています –

+0

あなたのVBエディタに私の関数とサブ関数の両方をコピーします。それからそれを実行してみてください。それが動作するかどうか私に教えてください。私はそれをテストし、正常に実行されました。 – cullan

+0

awesome :)うれしいよ! – cullan

関連する問題