VBA - 循环工作表以查找用户选择范围内的最大值

时间:2015-08-06 02:20:40

标签: excel vba for-loop input worksheet

我试图找到工作簿中每个依赖于用户选择范围的工作表的最大值。我希望用户只选择一个范围,并根据该范围找到每个工作表的最大值。

换句话说,假设用户选择范围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进行划分。

我当然感谢所给予的任何帮助!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以下是如何获取每张表中当前范围的最大值的示例:

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%肯定但我认为它可能会保留表格作为范围内的参考?对这个对象有更多了解的人将能够证实这一点。