【问题标题】:Determining values when looping through multiple ranges in VBA在 VBA 中循环多个范围时确定值
【发布时间】:2017-06-28 04:24:09
【问题描述】:

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

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

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

此时我可以提取图表名称,但无法从范围中获取最小值和最大值。

任何帮助将不胜感激!

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

【问题讨论】:

  • 使用:.MinimumScale = Application.WorksheetFunction.Min(ChrtMinRng).MaximumScale = Application.WorksheetFunction.Min(ChrtMaxRng)
  • 此代码是否找到该范围内的最小值和最大值?我已经在“Z”和“AA”列中找到了最大值中的最小值,所以我只是想从同一行中提取所有 3 个变量(NmRng、MinRng、MaxRng)的值。谢谢!
  • 是的,代码获得了该范围内的最小值和最大值。我不太清楚你还需要什么?
  • 例如第一张图。名称位于 o5 中,图形轴最小值位于 A5 中,最大值位于 AA5 中。我需要将这些值分配给该指定图表的 MinimumScale 和 MaximumScale。一旦设置了这些值,它需要移动到范围内的下一个值来设置下一个图表的最大值和最小值。
  • 见下文 - 我得到了你需要的东西(我想!)

标签: vba excel


【解决方案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 引用来获取所需的相应值。

【讨论】:

  • 这个好像不行。我认为可能是最小和最大比例在“数据”表上,但嵌入在指向“仪表板”表的 With 语句中。
  • 我会试试这个:` .MinimumScale = Sheets("Data").Range("Z" & cell.Row) .MaximumScale = Sheets("Data").Range("AA" & cell.Row)`
  • 好的,我想我明白了。只是做最后的测试。
  • 这很棒!原来我需要将 xlValue 更改为 xlCategory,因为我正在寻找更新水平刻度。感谢您为此提供的所有帮助!
【解决方案2】:

据我了解,您的 cmets。 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

【讨论】:

  • 同意 - 与我为回答所想的概念相同。
  • @Scott Craner 这似乎是一个不错的选择。一个问题是最大、最小和图表名称引用都在“数据”表上,而图表本身在“仪表板”表上。我正在努力更新您提供的代码以指向正确的工作表。谢谢:)
  • @bl3nd3r 没关系,这不会取代您的完整代码。只有 for 循环部分。
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2015-08-03
  • 2020-07-27
  • 1970-01-01
  • 2020-08-08
  • 2020-11-15
相关资源
最近更新 更多