gpt4 book ai didi

vba - 为什么我的数组函数不起作用?

转载 作者:行者123 更新时间:2023-12-04 21:37:08 25 4
gpt4 key购买 nike

我试图在 VBA 中编写一个简单的冒泡排序函数,但它不起作用。代码如下

Public Function BubbSort(arr As Variant) As Variant

Dim arrReturn As Variant
arrReturn = Array()
ReDim arrReturn(UBound(arr))
arrReturn = arr.Value

For i = 1 To UBound(arr) - 1
For j = 1 To UBound(arr) - 1
If arrReturn(j) > arrReturn(j + 1) Then
temp = arrReturn(j)
arrReturn(j) = arrReturn(j + 1)
arrReturn(j + 1) = temp
End If
Next j
Next i

arr = arrReturn

End Function

在 Excel 中,我尝试选择 4x1 单元格范围并插入公式 $=BubbSort(A1:A4)$ 并按 Ctrl+Shift+Enter 使其用作数组函数,但它说“函数有错误”。请问有什么帮助吗?

最佳答案

如果 arr是一个范围然后 UBound(arr)会抛出错误。解决这个问题的方法是使用这条线

arrReturn = arr.Value

而不仅仅是
arrReturn = arr

然后使用 Ubound(arrReturn)
还有—— arrReturn将是二维数组而不是一维数组。所有对 arrReturn 的引用应该看起来像例如 arrReturn(j,1)
最后——你没有返回任何东西(这是分配给 VBA 中的函数名)。

以下代码似乎有效(如果冒泡排序可以被描述为“有效”):
Public Function BubbSort(arr As Variant) As Variant

Dim arrReturn As Variant
Dim i As Long, j As Long, temp As Variant

arrReturn = arr.Value

For i = 1 To UBound(arrReturn) - 1
For j = 1 To UBound(arrReturn) - 1
If arrReturn(j, 1) > arrReturn(j + 1, 1) Then
temp = arrReturn(j, 1)
arrReturn(j, 1) = arrReturn(j + 1, 1)
arrReturn(j + 1, 1) = temp
End If
Next j
Next i

BubbSort = arrReturn

End Function

以上仅在传递包含在列中的范围时才有效。可以更灵活地处理列范围或行范围或 VBA 数组。

关于vba - 为什么我的数组函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33845424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com