所以我在实验室中重新排序/匹配来自多个试验的列表
所以这就是我到目前为止每个单元格的内容,它仅适用于我的5个值......
IFS(ISNUMBER(SEARCH($K$7,C14))=TRUE,$J$7,ISNUMBER(SEARCH($K$8,C14))=TRUE,$J$8,(ISNUMBER(SEARCH($K$9,C14)))=TRUE,$J$9,(ISNUMBER(SEARCH($K$10,C14)))=TRUE,$J$10,(ISNUMBER(SEARCH($K$11,C14)))=TRUE,$J$11)
块K是主列表,块J是我的编号功能,块C是改变每个试验的实际输出。
看起来某种类型的isnumber,多变量问题和内置偏移的组合会起作用,但我会遇到太多错误。
有人有什么想法吗?
谢谢!
答案 0 :(得分:1)
重新措辞,以确保我理解正确
以下公式将返回最后一个“匹配”。显然,您可以根据需要扩展J:K列的范围。
B14: =LOOKUP(2,1/SEARCH($K$7:$K$11,C14),$J$7:$J$11)
如果关键字包含在C14中的单词中,则可能会出现问题,具体取决于您的数据。例如:Keyword: his
。 c14: This is my stuff
由于his
是this
的一部分,因此会标记匹配。
如果该问题可能导致问题,则根据您的数据结构,可能需要对代码进行微小更改;或VBA解决方案。
此外,如果您可能有多个匹配项,则VBA解决方案会更简单。
这是一个VBA解决方案,它做出与上面类似的假设。
C14
开始并向下延伸。 B14
(相同C14
内容的多个代码将由comma-space
K7
开始并向下延伸J
列\b
表示单词边界。[A-Za-z0-9_]
(字母,数字和下划线)集合中的字符享受
Option Explicit
Sub ListMatch()
Dim WS As Worksheet
Dim rCodeData As Range, rCodeKeyWord As Range
Dim vCodeData, vCodeKeyWord
Dim RE As Object, MC As Object
Dim I As Long, J As Long
Set WS = Worksheets("Sheet1") 'or whatever
With WS
'data in C14:Cn 'relevant code adjacent in column B
Set rCodeData = .Range(.Cells(14, 3), .Cells(.Rows.Count, 3).End(xlUp)).Offset(columnoffset:=-1).Resize(columnsize:=2)
'codes and keywords in J7:Kn
Set rCodeKeyWord = .Range(.Cells(7, 10), .Cells(.Rows.Count, 10).End(xlUp)).Resize(columnsize:=2)
End With
'read into arrays for speed of execution
vCodeData = rCodeData
vCodeKeyWord = rCodeKeyWord
'initialize regex
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.ignorecase = True
'go through the data and look for keywords
For I = 1 To UBound(vCodeData, 1)
vCodeData(I, 1) = ""
For J = 1 To UBound(vCodeKeyWord, 1)
.Pattern = "\b" & vCodeKeyWord(J, 2) & "\b"
If .test(vCodeData(I, 2)) = True Then
vCodeData(I, 1) = vCodeData(I, 1) & ", " & vCodeKeyWord(J, 1)
End If
Next J
vCodeData(I, 1) = Mid(vCodeData(I, 1), 3)
Next I
End With
rCodeData = vCodeData
End Sub