我想在Excel中做一些數組運算,這需要我反轉一定數量的一維範圍很多次,所以我想爲它編寫一個函數,而不是在電子表格中創建反轉。我在VBA中寫了一個reverse()函數,但它返回#VALUE!電子表格中的錯誤。無論數組大小如何,也不管是輸入相同大小的數組函數,還是使用SUM()等彙總函數進行封裝。我證實了倒車邏輯可以作爲一個Sub。這導致我相信問題是傳遞/返回範圍/數組,但我不明白什麼是錯的。Excel VBA函數:如何通過範圍,轉換爲數組,反轉,並返回數組
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
請記住,我可以擴展它來反轉二維數組,但這是微不足道的部分。我的問題是試圖確保函數在(1,N)範圍內工作。
謝謝!
'i = x.rows.Count'和'i = x.Columns.Count'都顯得毫無意義。這些「我」的價值從未被使用過。那應該做什麼?也許是你想要初始化的變量'rows'和'cols'(而不是'i')。實際上,'rows'和'cols'都不會從其默認值'0'移動。 –
哇!對我而言,這是多麼的疏忽。現在起作用了。謝謝約翰。 –