次の問題は私には難解です。私は複数の入力に基づいて、特定の列の列インデックス提供する関数を作成した:Excel VBA:要素がループに格納されていません
- アレイ(列ヘッダーの範囲)を
- データ要素(整数)の数
- アン選択された列名の配列
- 結果を保持してサブに戻すための配列。
- カウンタ(グローバル)明らか
、ここでの意図は、オフセット及び追加処理のために他の機能およびルーチンに列インデックスを通過させることです。
機能自体は機能していますが、2番目のデータ要素では機能していません。 Kは適切なインデックスで記録されますが、配列に渡されません。私がここに欠けているものはありますか?
Public Function getIndex(ByRef all_names As Variant, ByVal Elements As Integer, check_names() As Variant, resultindex() As Variant) As Variant
ReDim resultindex(1 To Elements)
For i = LBound(all_names) To UBound(all_names)
For j = 1 To Elements
For k = LBound(all_names, 2) To UBound(all_names, 2)
If all_names(i, k) = check_names(j) Then ' checks colName against dynamic names
resultindex(j) = k ' colIndex takes index of selected column
Debug.Print resultindex(j)
' k = UBound(all_names, 2) ' Jump to end?
End If
Next k
Next j
Next i
End Function
第2要素が格納されていない特定の理由はありますか?私はいくつかの異なる入力でこれを試し、同じ結果を達成しました。ネストされたループをうまく使っている人には、これについて正しい方向にうなずきます。ありがとう。
編集:それは直接のウィンドウで動作しているようです。適切なインデックスは期待通りに邪魔されていますが、2番目の要素は渡されていません。
値が渡されたことを確認:
results(i) = getIndex(subArray(), Elements, selNames(), results())
colIndex() = results()
For i = 1 To Elements
Debug.Print colIndex(i)
Next i
Erase result
のようにそれを呼び出しますか'? – Slai
VBAは "return"ステートメントを持つ多くの一般的な言語に比べて少し奇妙です。 VBAは、関数と同じ名前の自動変数を作成します。この変数に代入するものが返されます。関数が終了する直前(配列 'resultindex'を返すと仮定します)に、' getIndex = resultIndex'という行を追加します。 – Blackhawk
ああ、私は参照しているので、参考のために戻ってきています... – Blackhawk