我正在做一个需要解决方案使用VBA的作业,所以我不能在工作表页面上使用索引或其他选项...我一直在寻找答案,也许我只是在问问题不正确。
在K列中有股票代码,即A,ABM等。 在L列中有一个数字(我一直被分类为Long)
我想在Range("O2")
的L列中放置最高的数字,在Range("N2")
的左列中放置标签。
我找到了很多方法来标识L列中的高数字,但无法弄清楚如何返回相邻单元格的值...
这是我一直在尝试的最新代码,无法正常工作。当我删除标记引用时,代码可以正常运行,但是我也需要相邻的值。
谢谢
Sub attempt38()
Dim sheet As Worksheet
Dim i As Long
Dim firstRow As Integer
Dim columnNumber As Integer
Dim max As Long
Dim tag As Long
firstRow = 2
columnNumber = 12
Set sheet = ActiveSheet
If sheet.UsedRange.Rows.Count <= 1 Then max = 0 Else max = sheet.Cells(2, 12)
For i = firstRow To 300
If sheet.Cells(i, 12) > max Then max = sheet.Cells(i, 12) & (tag = sheet.Cells(i, 11))
Next
sheet.Cells(3, 14) = max
sheet.Cells(4, 14).Value = tag
End Sub
答案 0 :(得分:1)
您不需要VBA。您可以只使用常规的excel。
=LARGE(L:L,1)
将返回最大的数字。
要获取相应的内容,只需使用索引加匹配项即可。
=INDEX(K:K,MATCH(LARGE(L:L,1),L:L,FALSE),1)
如果您真的想使用VBA,则将代码调整为两行,如下所示:
For i = firstRow To 300
If sheet.Cells(i, 12) > max Then
max = sheet.Cells(i, 12)
tag = sheet.Cells(i, 11)
Endif
Next
或者,如果您想显得精致:
For i = firstRow To 300
With sheet.Cells(i, 12)
If .Value > max Then
max = .Value
tag = .Offset(0,-1).Value
Endif
End With
Next i
答案 1 :(得分:1)
遍历一个范围可能很耗时,在这种情况下也很浪费。
如果您的最大值实际上存在于第一循环行中,该怎么办?现在,您将无休止地浏览299行。
以下方法将更快并且不需要循环。
Option Explicit
Sub Mad_Max()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim MyMax As Long, MaxCell As Range
MyMax = Application.WorksheetFunction.Max(ws.Range("L:L"))
Set MaxCell = ws.Range("L:L").Find(MyMax, Lookat:=xlWhole)
ws.Range("N3") = MyMax
ws.Range("N4") = MaxCell.Offset(, -1)
End Sub