我有2个工作表(分别命名为A和B)
在工作表A中,第N列显示分数,而在D列显示学生的名字,我想找到最高的分数并显示学生的名字
由于VLOOKUP仅向右看(但D列在N列的左),我进行搜索并发现这种结合CHOOSE功能的方法可以实现“在表中的任何地方看”
因此在普通的excel函数中,它的编写方式如下
B3=VLOOKUP(MAX('A'!N2:N296),CHOOSE({1,2},'A'!N2:N296,'A'!D2:D296),2,0)
试图将功能转换为VBA代码,我尝试过:
Range("B3").Value = WorksheetFunction.VLookup(WorksheetFunction.Max(Worksheets("A").Range("N2:N296")), WorksheetFunction.Choose([1, 2], Worksheets("A").Range("N2:N296"), Worksheets("A").Range("D2:D296")), 2, 0)
我收到错误消息“无法获取worksheetfunction类的CHOOSE属性”
答案 0 :(得分:0)
所有工作表公式均可与vba一起使用。对于某些人,vba中有直接替代品。为了获得更好的可读性,将代码分解为一行并使用变量是很有意义的:
Option Explicit
'https://stackoverflow.com/questions/54380167/rewriting-choose-function-with-array-in-vba
'Rewriting CHOOSE Function (with array) in VBA
Sub FindStudentWithMaxScore()
Dim MaxScore As Integer, IndexOfStudent As Integer
Dim StudentName As String
Dim ShA As Worksheet, ShB As Worksheet
Set ShA = Sheets("A")
Set ShB = Sheets("B")
With Application.WorksheetFunction
MaxScore = .Max(ShA.Range("N:N"))
IndexOfStudent = .Match(MaxScore, ShA.Range("N:N"))
StudentName = .Index(ShA.Range("D:D"), IndexOfStudent)
'Debug.Print StudentName
ShB.Range("B3").Value = StudentName
End With
End Sub