我试图找到工作簿中每个依赖于用户选择范围的工作表的最大值。我希望用户只选择一个范围,并根据该范围找到每个工作表的最大值。
换句话说,假设用户选择范围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
进行划分。
我当然感谢所给予的任何帮助!
答案 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%肯定但我认为它可能会保留表格作为范围内的参考?对这个对象有更多了解的人将能够证实这一点。