【问题标题】:VBA - Loop through worksheets to find max value in user-selected rangeVBA - 循环工作表以查找用户选择范围内的最大值
【发布时间】:2015-10-29 00:19:53
【问题描述】:

我正在尝试为我的工作簿中的每个工作表找到最大值,该最大值取决于用户选择的范围。我希望用户只选择一次范围并根据该范围找到每个工作表的最大值。

换句话说,假设用户选择范围 B1:B100。宏应遍历每张纸并在每张纸的 B1:B100 范围内找到最大值。

最终,每个工作表都有一组数据点,我想将这些数据点除以在用户选择的范围内找到的最大值。

这是我的代码(嗯,相关部分):

Sub Plot()

Dim i, ws_count As Integer
Dim userng, brng As Range
Dim maxval As Double

On Error GoTo Canceled

Set userng = Excel.Application.InputBox("Please input range.", "Input", Selection.Address, , , , , 8)

ws_count = ActiveWorkbook.Worksheets.Count

  For i = 1 To ws_count

    Worksheets(i).Activate

    maxval = userng.Cells(1, 1).Value
      For Each Cell In userng.Cells
        If Cell.Value > maxval Then
          maxval= Cell.Value
        End If
      Next Cell

    Set brng = Worksheets(i).Range("B1:B1869") ''brng will always be B1:B1869 for each worksheet

'Each cell in B1:B1869 should be divided by maxval.
      For Each Cell In brng
        Cell.Value = Cell.Value / maxval
      Next Cell

  Next i

Canceled:
End Sub

不幸的是,宏只能找到第一个工作表的最大值并将该值应用于所有其他工作表。理想情况下,每个工作表都将除以其唯一的maxval

如果能提供任何帮助,我将不胜感激!

【问题讨论】:

    标签: excel vba for-loop input worksheet


    【解决方案1】:

    您可以直接从用户那里获取用户范围,然后按如下方式应用:

    Sub Test()
    Dim rng1 As Range
    Dim ws As Worksheet
    
    On Error Resume Next
    Set rng1 = Application.InputBox("Pls select range to examine (on all sheets)", "User Input", Selection.Address, , , , , 8)
    On Error GoTo 0
    If rng1 Is Nothing Then Exit Sub
    
    For Each ws In ActiveWorkbook.Sheets
     Debug.Print ws.Name, Application.WorksheetFunction.Max(ws.Range(rng1.Address))
    Next
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      这是一个示例,说明如何获取每张工作表中当前范围的最大值:

      Sub MaxInSheets()
          Dim MyRange As String, WS As Worksheet
          MyRange = Selection.Address
          For Each WS In Worksheets
              MsgBox WS.Name & " - " & WorksheetFunction.Max(WS.Range(MyRange))
          Next
          MsgBox MyMaxValue
      End Sub
      

      如果您需要帮助以将其实现到您自己的代码中,请回复。

      我尝试将 MyRange 设为一个范围,但它不喜欢它,我不是 100% 确定,但我认为它可能会将工作表保留为范围内的参考?不过,对该对象有更多了解的人将能够证实这一点。

      【讨论】:

        猜你喜欢
        • 2019-02-11
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多