我目前有一个算法可以操作excel工作簿中的第24页上的数据。我有3个整数,a,b和c,来自第24页的数据,我需要使用它们在工作表14上返回一个唯一的行ID.A,B和C,每个代表它们对应的列(范围)在片材14E1上:来自片材24的Int a在片材14上的A列中。在b列中为Int b,在c中为c。组合的数字将始终从14返回单个行ID,在这种情况下,整数行。我很难用Filter,evaluate和一堆其他Excel函数编写语句。有没有人知道如何从在一张纸上执行的算法启动脚本,只需在表14中使用'得到三个搜索数字a,b,c?
row = Sheets("Physical Disk Details").Columns("A").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) * Sheets("Physical Disk Details").Columns("B").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) * Sheets("Physical Disk Details").Columns("C").Find(what:=c, LookIn:=xlValues, lookat:=xlWhole)
答案 0 :(得分:0)
此函数将返回找到的第一个行号,它与为a,b和c提供的行号完全匹配。它演示了最简单的Range迭代和If / Then测试之一,它构成了您将为Excel VBA找到的大多数数据模式搜索子例程的基础。有一些方法可以简化此代码,但它演示了基本原则。
如果您阅读此代码的每一行并了解所有这些代码的作用,您可以使用这些原则来完成大多数任务,甚至模糊地与它相似。
Function GetRowNumberByABCMatch(a As Integer, b As Integer, c As Integer) As Integer
Dim lastRowInDataSet As Integer
Dim i As Integer
'get last row containing data in column 1
lastRowInDataSet = Sheets("Physical Disk Details").Cells(Rows.count, 1).End(xlUp).Row
'i = current row number, start at row 1
For i = 1 To lastRowInDataSet
If Sheets("Physical Disk Details").Range("A" & i).Value = a _
And Sheets("Physical Disk Details").Range("B" & i).Value = b _
And Sheets("Physical Disk Details").Range("C" & i).Value = c Then
'all fields match, return the current row number
GetRowNumberByABCMatch = i
'stop processing and return because we found a single match
Exit Function
End If
Next i
'didn't find a matching row, return -1
GetRowNumberByABCMatch = -1
End Function