2017-05-19 13 views
1

以下に表示されている関数を記述しました。それは私がサブでそれを使用するときに機能します。私が関数を書くのは初めてです。私はこれがnoobの質問であることを知っているが、私は機能を実行するように見えない。関数を正しく呼んでいないか、関数ヘッダに変数を正しく定義していない可能性があります。Excel VBAソート配列関数

誰かが正しい方向に向いていますか?

Function SortArray(ArrayToSort As String) 
    Dim x As Long, y As Long 
    Dim TempTxt1 As String 
    Dim TempTxt2 As String 

    For x = LBound(ArrayToSort) To UBound(ArrayToSort) 
     For y = x To UBound(ArrayToSort) 
      If UCase(ArrayToSort(y)) < UCase(ArrayToSort(x)) Then 
       TempTxt1 = ArrayToSort(x) 
       TempTxt2 = ArrayToSort(y) 
       ArrayToSort(x) = TempTxt2 
       ArrayToSort(y) = TempTxt1 
      End If 
     Next y 
    Next x 
End Function 


Sub CreateUniquesList() 
    Dim References() As String 
    ... 
    SortArray (References) 
    ... 
End Sub 
+0

コードで何をしようとしていますが、何をしていないのですか?あなたが同じアレイ上で比較をしているように見えます。あるアレイが大きければ、それを切り替えます。基本的に昇順ですか? –

+0

この関数は、アルファベット順に配列をソートすることになっています。私が上で言ったように、これはSubで働いています。前に関数を書いたことがないので、関数としてコードを実装する正しい方法であるかどうかはわかりません。基本的に、関数内のコードはSubにあったコードと同じなので、どこが間違っているのか分かりません –

+0

関数は何も返さないので、Subにすることができます... – MacroMarc

答えて

3

パラメータは配列通常

Function SortArray(ArrayToSort() As String) 
    'your code 
End Function 

Sub CreateUniquesList() 
    Dim References() As String 
    '... 
    SortArray References 'lose the parentheses 
    '... 
End Sub 
0

であることを確認するために、括弧を追加します(私はいつも言うだろうが、その後5つの参照を投稿するだろう、誰かがそれは常にではありません方法を示すこと)、関数が戻ります値。関数定義には返される変数型が含まれている必要があります。

Function SortArray(ArrayToSort As String) as variant 

バリアントに結果のソートされた配列が含まれます。

は、次に、関数の最後に、あなたは

Next x 
SortArray = ArrayToSort 
End Function 

のように、結果を関数自体の値を設定して、それを呼び出すために、あなたは同様に、関数に等しい変数を設定しますin

References = SortArray References 

これが実行されます。

あなたは(通常は)元の配列と、実際に混乱にあなたの関数をしたくないので。私もそう

Function SortArray(byval ArrayToSort As String) 

、あなたが参照して値を通過しないことをお勧めします

+0

あなたが言うことのうちのいくつかは良いものもあれば、間違っているものもあるので、私は下降しました。彼は配列で作業しようとしているので、渡された変数を配列にする必要があります。それに必要な括弧。また、配列はVariantとして渡され(および受け取られないかぎり)、ByValを渡すことはできません。 – MacroMarc