分享

Excel VBA自定义函数:ptMatch返回包含指定字符串的单元格的值

 冷茶视界 2024-05-23 发布于江苏

点【关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • 自定义函数查找包含指定字符的单元格的值
大家好,我是冷水泡茶。
今天在论坛上看到一个求助贴:

详细需求:

在C4输入一个法兰尺寸,根据它的规格(下划线部分),在N列的方形法兰区域查找匹配它的规格(DN80),如果能查到,则在G4列填充包含此规格的方形法兰的全称。 如果没有匹配的,则显示“-”。

如果能用函数解决,更好。

这个问题,就如标题所描述的那样,是一个用部分去匹配整体的问题,用公式函数也能解决,这也是问主所希望的,这个我们另外说明,这里我们考虑结合VBA来解决:

基本思路:

我们要定义一个自定义函数ptMatch(str,rng),参数str为一个字符串,rng为一个区域,返回值为一个字符串。如果str包含于rng中的一个单元格,则返回这个单元格的值,如果所有单元格都不包含str,则返回“-”。
函数比较简单,我们直接看代码:
Function ptMatch(strPart As String, rng As Range) As String    Dim cell As Range    ptMatch = "-"    For Each cell In rng.Cells        If InStr(cell.Value, strPart) > 0 Then            ptMatch = cell.Value            Exit For        End If    NextEnd Function
1、我们首先给函数赋值“-”。
2、我们循环rng的每个单元格,用Instr函数来判断字符串是否包含在单元格中,如果包含,则把单元格的值赋值给函数,退出循环。
3、如果没有如第1条所述,预先给函数赋值“-”,那么,在循环结束后,我们要判断一下函数是否有值,是否为空,如果为空,则给它赋值“-”,稍显啰嗦。

函数的使用

自定义函数的使用,跟工作表函数基本没有什么区别。
我们在工作表中,输入以下公式:
=ptMatch(MID(C4, SEARCH("DN", C4), LEN(C4) - SEARCH("DN", C4) + 1),N4:N7)
1、函数的第一个参数,一个字符串,在这里是C4单元格中后半部分字符,我们需要用一个工作表函数来提取规格字符串
2、函数第二个参数,是一个单元格区域,这里我们选择“N4:N7”。
3、查找字符串的位置,除了用SEARCH函数外,也可以用FIND函数。

后记

1、这里函数的第一个参数,我们直接设定为一个任意字符串,没有根据C4单元格的值进一步处理,这样一来,我们可以保持这个自定义函数ptMatch的通用性。
2、在实际工作中,我们这个商品名称表,可能包含很多字段,比如规格,我们可以根据这个规格直接查找匹配。
3、这个案例直接用工作表函数也能解决,我们在第二条推文中说明
好,今天就到这里,我们下期再会!
~~~~~~End~~~~~~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多