Excel 构建备用单元格范围vba

Excel 构建备用单元格范围vba,excel,vba,dynamic,range,alternate,Excel,Vba,Dynamic,Range,Alternate,显然,由于缺乏知识,我建立动态备用电池范围的意图失败了 For j = 1 To numFrame Set MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1, 2 * (j + 1))) MaxVal = Application.Max(MaxStRange_OD_OUT) Debug.Print MaxVal Next j 我想实现的是 MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1

显然,由于缺乏知识,我建立动态备用电池范围的意图失败了

For j = 1 To numFrame
    Set MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1, 2 * (j + 1)))
    MaxVal = Application.Max(MaxStRange_OD_OUT)
    Debug.Print MaxVal
Next j
我想实现的是

MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1, 4),Cells(1, 6),Cells(1, 8))
当然,单元格的数量可以从1到10不等(numFrame)


谢谢

您可以使用
Application.Union
建立一个范围

Sub UnionRangeExample()

Dim rng As Range
Dim i As Long

    For i = 1 To 20 Step 2

    If rng Is Nothing Then

    Set rng = ActiveSheet.Cells(i, 1)

    Else

    Set rng = Application.Union(rng, ActiveSheet.Cells(i, 1))
    End If

    Next i

MsgBox rng.Address

End Sub

在您的情况下,您可以这样使用它:

Sub UnionRangeExample_v2()

Dim rng As Range
Dim j As Long
Dim numFrame As Long


numFrame = 10


    For j = 1 To numFrame
        If rng Is Nothing Then

        Set rng = ActiveSheet.Cells(1, 2 * (j + 1))

        Else

        Set rng = Application.Union(rng, ActiveSheet.Cells(1, 2 * (j + 1)))
        End If
    Next j

MsgBox "max for: " & rng.Address & " is " & Application.Max(rng)

End Sub

您可以在此处尝试此代码

Function MyMaxValue() as Double
    Dim maxValue As Double, numFrame As Double, i As Integer, currentValue As Double

    numFrame = 7

    For i = 1 To numFrame
        currentValue = Cells(1, 2 * (j + 1)).value
        If currentValue > maxValue Then
            maxValue = currentValue
            Debug.Print "new value = " & maxValue
        End If
    Next i

    MyMaxValue = maxValue    
End Function

您需要使用宏吗?在哪一行?我只是写了它,并在我的电脑上测试了它,没有任何问题。@fabio.geraci我刚刚添加了另一个例子,您应该能够在您的情况下使用它(我再次测试了它,没有任何问题)。有没有办法在计算最大值之前转换范围内的所有值是的,您可以使用Union()和max()。但问题是为什么你想要一个有这个值的范围?我的代码以相同的速度达到相同的目标(更好),我认为它比范围变量等更清晰。Makah,我是vba新手,所以我使用我所知道的,但您的代码将非常适合,特别是因为我需要abs val来超过这些值,感谢您的建议,但它不会将正确的值传递给下一个操作。它根本不会传递值。这是一个Sub,不是一个函数。我编辑代码,为您返回最大值。