在VBA中循环遍历多个范围时确定值

时间:2016-02-05 16:31:20

标签: excel vba excel-vba

我正在研究一个基于动态数据集设置图表最大值和分钟数的宏。当用户选择他们的组时,图表会更新,并且宏会运行以将图表的最大值和最小值更新为适当的比例。

我希望有人可以帮助我,因为我尝试使用3个范围的变量:

  1. 根据范围内的单元格值选择图表
  2. 根据范围内的单元格值设置min
  3. 根据范围
  4. 中的单元格值设置最大值

    此时我可以提取图表名称,但是无法从范围中获取min和max的值。

    任何帮助将不胜感激!

    Sub rescale()
    
    ActiveSheet.Calculate
    
    Dim ChrtNmRng As Range
    Dim ChrtMinRng As Range
    Dim ChrtMaxRng As Range
    Dim cell As Range
    
    Set ChrtNmRng = Sheets("Data").Range("o5:o20")
    Set ChrtMinRng = Sheets("Data").Range("z5:z20")
    Set ChrtMaxRng = Sheets("Data").Range("Aa5:Aa20")
    
    For Each cell In ChrtNmRng
    
    With Sheets("Dashboard").ChartObjects(cell.Value).Chart.Axes(xlValue)
        .MinimumScale = ChrtMinRng.Value
        .MaximumScale = ChrtMaxRng.Value
    End With
    
    Next cell
    
    End Sub
    

2 个答案:

答案 0 :(得分:1)

据我了解你的意见。列O包含图表的名称,其他列表包含每个图表的最小值和最大值。

Sub rescale()

ActiveSheet.Calculate

Dim ChrtNmRng As Range
Dim ChrtMinRng As Range
Dim ChrtMaxRng As Range
Dim i As Long

Set ChrtNmRng = Sheets("Data").Range("o5:o20")
Set ChrtMinRng = Sheets("Data").Range("z5:z20")
Set ChrtMaxRng = Sheets("Data").Range("Aa5:Aa20")

For i = 1 To 16

With Sheets("Dashboard").ChartObjects(ChrtNmRng(i).Value).Chart.Axes(xlValue)
    .MinimumScale = ChrtMinRng(i).Value
    .MaximumScale = ChrtMaxRng(i).Value
End With

Next i

End Sub

答案 1 :(得分:1)

这样做:

Sub rescale()
    Dim ChrtNmRng As Range, cell As Range

    ActiveSheet.Calculate
    Set ChrtNmRng = Sheets("Data").Range("o5:o20")

    For Each cell In ChrtNmRng
        With Sheets("Dashboard").ChartObjects(cell.Value).Chart.Axes(xlValue)
            .MinimumScale = Range("Z" & cell.Row)
            .MaximumScale = Range("AA" & cell.Row)
        End With
     Next cell  
End Sub

此处的关键是,您的最小值和最大值(ZAA)的范围与列O精确对齐,因此您可以使用row参考获得你需要的相应值。