如何解决将子例程转换为可以在公式中使用的函数
我对功能不是很好,希望有人可以帮助转换它。我将在公式中插入宏。
我尝试使用公式,但发现2个或更多匹配项时遇到问题。
该函数将像这样通过宏插入。
ws1.Range(Cells(x,spec),Cells(lRow,spec)).Formula = "=IFERROR(IF(OR(MID(RC[-3],SEARCH(""-"",RC[-3])+1,RC[-3],RC[-3])+1)-SEARCH(""-"",RC[-3])-1) = ""WP"",MID(RC[-3],RC[-3])-1)=""DO""),""A15"",FIND(CHAR(1),SUBSTITUTE(RC[-3],""-"",CHAR(1)," & aft & "))+1," & aft + 1 & ")) - FIND(CHAR" & _
"(1)," & aft & "))-1)),"""")" & ""
Sub Test()
Dim ws1,ws2 As Worksheet
Dim SrchRng As Range,cel As Range
Dim SrchStr As String
Dim myList,tbl As Object
Dim arr As Variant
Dim i,x As Integer
Dim val as String
Set ws1 = ThisWorkbook.Sheets("Index")
Set ws2 = ThisWorkbook.Sheets("Data Entry")
Set SrchRng = ws1.Range("A2:A30")
Set myList = CreateObject("System.Collections.ArrayList")
SrchStr = ws2.Range("AB7")
For Each cel In SrchRng
If InStr(1,SrchStr,cel.Value,vbTextCompare) > 0 Then
myList.Add cel.Value
arr = myList.Toarray
End If
Next cel
'######### Need to compare string length and keep the highest value ##########
For i = LBound(arr) To UBound(arr)
If IsNull(x) Or Len(arr(i)) > x Then
x = Len(arr(i))
val = arr(i)
End If
Next i
ws2.Range("AE7") = val
Debug.Print x
Debug.Print a
Set ws1 = Nothing
Set ws2 = Nothing
Set SrchRng = Nothing
Set myList = Nothing
End Sub
解决方法
由于问题更新而被编辑。
双循环将对数据进行一对一搜索,以确保捕获任何重复的条目并正确标记它们。
假设格式存在某些一致性,这将查找搜索条件和-
(即:“ A12UG-”)。这将消除使用“ A12”触发的“ A12UG”。
要调用该函数,请将调用分配给变量。即:varName = updateAE()
Function updateAE()
Dim ws1: Set ws1 = ThisWorkbook.Sheets("Index")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Data Entry")
Dim srchRng As Range,indexRng As Range,indexCel As Range,srchCel As Range
Dim i As Integer
Dim count As Integer
Dim indexLRow,srchLRow As Long
indexLRow = ws1.Cells(ws2.Rows.count,"A").End(xlUp).Row
srchLRow = ws2.Cells(ws2.Rows.count,"AB").End(xlUp).Row
Set indexRng = ws1.Range("A1:A" & indexLRow)
Set srchRng = ws2.Range("AB3:AB" & srchLRow)
count = 1
On Error Resume Next
For Each indexCel In indexRng
For Each srchCel In srchRng
If InStr(1,srchCel,indexCel & "-") > 0 And Len(indexCel) > 0 Then
ws2.Range("AE" & count + 2) = indexCel
End If
count = count + 1
Next srchCel
count = 1
Next indexCel
End Function
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。