Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA,在列(C)中查找最高值,并返回其值和相邻单元格的值_Vba_Excel - Fatal编程技术网

VBA,在列(C)中查找最高值,并返回其值和相邻单元格的值

VBA,在列(C)中查找最高值,并返回其值和相邻单元格的值,vba,excel,Vba,Excel,我正在处理的作业要求使用VBA解决方案,因此我无法在工作表页面上使用索引或其他选项。。。我到处寻找答案,也许我只是问错了问题 在K列中有股票代码,即A、ABM等。 L列中有一个数字(我一直在分类) 我想把最大的数字放在范围(“O2”)的L列中,把标签放在范围(“N2”)左侧的一列中 我已经找到了很多方法来识别列L中的高数值,但无法找出如何返回相邻单元格的值 下面是我一直在尝试的最新代码,它不起作用。当我删除标记引用时,代码运行正常,但我也需要相邻的值 谢谢 Sub attempt38() Di

我正在处理的作业要求使用VBA解决方案,因此我无法在工作表页面上使用索引或其他选项。。。我到处寻找答案,也许我只是问错了问题

在K列中有股票代码,即A、ABM等。 L列中有一个数字(我一直在分类)

我想把最大的数字放在
范围(“O2”)
的L列中,把标签放在
范围(“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
Sub-attempt38()
将工作表设置为工作表
我想我会坚持多久
将第一行设置为整数
将列数设置为整数
变暗最大长度
模糊标签一样长
第一行=2
列数=12
设置工作表=活动工作表
如果sheet.UsedRange.Rows.Count max,则max=sheet.Cells(i,12)和(tag=sheet.Cells(i,11))
下一个
表单元格(3,14)=最大值
表.单元格(4,14).值=标记
端接头

您不需要VBA。您只需使用常规excel即可

=大(L:L,1)

将返回最大的数字

要获得相应的索引,只需使用Index plus match

=索引(K:K,匹配(大(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

你不需要VBA。您只需使用常规excel即可

=大(L:L,1)

将返回最大的数字

要获得相应的索引,只需使用Index plus match

=索引(K:K,匹配(大(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

在一个范围内循环可能很耗时,在这种情况下,也是浪费时间

如果最大值实际存在于第一个循环行中,该怎么办?现在,您将在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

在一个范围内循环可能很耗时,在这种情况下,也是浪费时间

如果最大值实际存在于第一个循环行中,该怎么办?现在,您将在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

为实用性而上扬。此处不需要VBA def PGCODERIDER-非常感谢您的快速响应。我应该在几个小时前把这个贴出来。你的解决方案效果很好——这就是我将在这次作业中使用的。实用性上扬。此处不需要VBA def PGCODERIDER-非常感谢您的快速响应。我应该在几个小时前把这个贴出来。你的解决方案效果很好-这就是我将要在这个任务中使用的。因为两者都不是循环。Urderboy-感谢您提供的示例代码。我一直在最后一行遇到错误-我一直在努力使偏移量正常工作。。。谢谢因为两个循环都不是循环,所以进行了交互。Urderboy-感谢您提供的示例代码。我一直在最后一行遇到错误-我一直在努力使偏移量正常工作。。。谢谢