列表匹配函数的VBA-Isnumber
因此,我重新整理/匹配了我们实验室多个试验的列表列表匹配函数的VBA-Isnumber,vba,excel,excel-formula,Vba,Excel,Excel Formula,因此,我重新整理/匹配了我们实验室多个试验的列表 找到的所有项目都有一个主列表 并非所有出现在主列表中的项目都能在每次试验中找到 我想使用VBA匹配实验列表中可能找到的值,并用数字对其进行分类,以便以后可以对其进行排序并与其他数据集对齐 这是我到目前为止对每个细胞的研究结果,这只是我的5个值 IFS(ISNUMBER(SEARCH($K$7,C14))=TRUE,$J$7,ISNUMBER(SEARCH($K$8,C14))=TRUE,$J$8,(ISNUMBER(SEARCH($K$9,C14
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、多变量问题和内置偏移量的某种组合是可行的,但我遇到了太多的错误
有人有什么想法吗
谢谢 重新措辞,以确保我正确理解您的意思
- 列K有一个关键字列表
- 列J作为与这些关键字关联的值的列表
- 列C有一个短语,可能包含来自列K的关键字
- 如果列C中的单元格包含该关键字,则希望从与列B中列K中的关键字相邻的列J返回值
B14: =LOOKUP(2,1/SEARCH($K$7:$K$11,C14),$J$7:$J$11)
根据您的数据,潜在的问题可能是C14中的一个单词中是否包含关键字。例如:关键词:his
<代码>c14:这是我的东西,因为他的
是这个
的一部分,所以会标记匹配项
如果该问题可能导致问题,根据您的数据结构,可能需要对代码进行微小更改;或VBA解决方案
此外,如果您可能有多个匹配项,VBA解决方案会更简单
下面是一个VBA解决方案,它做出了与上述类似的假设
- 您的数据从
开始向下扩展。下面什么都没有C14
- 在数据中找到的代码将位于
(同一B14
内容的多个代码将用C14
逗号分隔
- 关键字将从
开始向下扩展K7
- 这些关键字的代码将位于列
J
- 只会找到整个单词(较长单词中的单词将不匹配)
- 正则表达式用于进行匹配。
- 对于正则表达式,
表示单词边界\b
- 单词边界是单词字符与非单词字符相邻的点,或者是行的开头或结尾。
- 单词字符是一组
中的字符(字母、数字和下划线)[A-Za-z0-9.]
- 单词字符是一组
- 如果这不能充分描述数据中的单词边界,可以使用不同的算法
- 对于正则表达式,
为了清楚起见,你想在C中筛选并在J或K中查找匹配项吗?我想在C中筛选并在K中查找匹配项,然后用J中的值对标识值(在上面的例子中是B中)左侧的单元格进行编号。因此,B和C的行相等,而J和K的行相等(在我看来)谢谢Ron!不是100%确定如何操作regex代码,但这一切似乎都是可行的!我可能会再次发布,因为我试图更广泛地扩展它!
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