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,不是一个函数。我编辑代码,为您返回最大值。