gpt4 book ai didi

arrays - 用VBA编写求二维数组最小值的函数

转载 作者:行者123 更新时间:2023-12-02 01:32:42 24 4
gpt4 key购买 nike

我想将这个从 4 个位置(4 列)查找最低温度的子程序(仅限子程序)修改为带有函数程序的子程序。

 Sub test()

Dim i As Integer, j As Integer
Dim temp(30, 3) As Integer
Dim minTemp(3) As Integer
Dim tmp As Integer

For i = 2 To 30
For j = 2 To 5
temp(i - 2, j - 2) = Cells(i, j).Value
Next j
Next i

For j = 0 To 3
minTemp(j) = 100
tmp = 0

For i = 0 To 30
tmp = temp(i, j)

If minTemp(j) >= tmp Then
minTemp(j) = tmp
End If

Next i
Cells(33, j + 2).Value = minTemp(j)
Next j

End Sub

我尝试修改为:

Sub test()

Dim i As Integer, j As Integer
Dim temp(30, 3) As Integer


For i = 2 To 30
For j = 2 To 5
temp(i - 2, j - 2) = Cells(i, j).Value
Next j
Next i

MsgBox LowestTemp(temp())

End Sub

Function LowestTemp(tArr() As Variant) As Variant

For i = LBound(tArr) To UBound(tArr)
minVal = tArr(1)
For j = 0 To 3
If tArr(j) >= minVal Then
minVal = tArr(j)
End If
Next i

LowestTemp = minVal

End Function

但是我发现很难将二维数组传递给 Function 过程,请帮忙?

最佳答案

(1) 您可以使用一条语句将 Excel 中的数据读取到数组中。

Dim temp As Variant
temp = ActiveSheet.Range("B2:E30").value

请注意,temp 被定义为 Variant,而不是数组。变体可以容纳任何东西,其中包括数组。

(2) 将数组传递给函数或子例程的方法有多种,但类型需要匹配。在您的情况下,您将一个二维 Integer 数组作为参数传递给需要一维 Variant 数组的函数,并且这些类型不匹配。 VBA 可以将 Integer 转换为 Variant,但不能转换整个数组,也不能转换不同的维度。对您来说最简单的方法是声明您的功能为

Function LowestTemp(tArr As Variant) As Variant

同样,单个 Variant 可以容纳任何内容,因此会接受您的 Temp 数组。

(3) 有一种更简单的内置方法可以使用 Application.WorksheetFunction.Min 获得最小值:

Dim temp As Variant, minTemp
temp = ActiveSheet.Range("B2:E30").value
minTemp = Application.WorksheetFunction.Min(temp)

关于arrays - 用VBA编写求二维数组最小值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72934058/

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