Excelで配列の計算をしようとしていますが、1次元の範囲の数を逆にする必要があります私は、スプレッドシートに反転を作成するのではなく、そのための関数を記述したいと思います。Excel VBA関数:範囲を渡し、配列に変換し、逆変換し、配列を返す方法
私はVBAでreverse()関数を書いていますが、#VALUEを返します!スプレッドシートのエラー。これは、配列のサイズに関係なく、同じサイズの配列関数を入力するか、SUM()のようなサマリー関数で囲むかどうかに関係なく発生します。私は反転ロジックがSubとして機能することを確認した。これは、問題が範囲/配列を渡し/返すことであると私につながりますが、何が間違っているのか分かりません。
Function reverse(x As Range) As Variant()
' Array formula that reverses a one-dimensional array (1 row, x columns)
Dim oldArray() As Variant, newArray() As Variant
Dim rows As Long: i = x.rows.Count
Dim cols As Long: i = x.Columns.Count
ReDim oldArray(1 To rows, 1 To cols), newArray(1 To rows, 1 To cols)
oldArray = x.Value
newArray = oldArray
For i = 1 To cols/2 Step 1
newArray(1, i) = oldArray(1, cols - i + 1)
newArray(1, cols - i + 1) = oldArray(1, i)
Next
reverse = newArray
End Function
2次元配列を逆にすることもできますが、それは些細なことです。私の質問は、関数が確実に(1、N)の範囲で動作するようにすることです。
ありがとうございます!
'i = x.rows.Count'と' i = x.Columns.Count'の両方が無意味に見えます。 'i'の値は決して使用されません。それは何をすべきか?おそらく、あなたが初期化しようとしていたのは、 'rows'と' cols'( 'i'ではなく)の変数です。そのままでは、 'rows'も' cols'もデフォルト値の '0'から動かされません。 –
うわー!私の見解はどうなのか。それは今働く。ありがとうジョン。 –