第二十六天:EXCEL用FIND和SEARCH函数查找定位字符,就是这么牛

朋友们,大家好!

在日常工作中,我们经常用EXCEL函数处理表册,函数的运用,大幅度提升了我们的工作效率。笔者集合工作实际,把最常用的EXCEL函数进行逐一详细讲解,课程中有大量案例,为便于朋友们更加深入了解各个函数的用法,将于每天上午7:00同步发布视频教程和图文教程(包含公式)。只要不懈努力和不断实践,通过30天的系统学习,你也能成为EXCEL函数高手,从此告别加班,让同事和朋友刮目相看。

今天,我将和大家一起分享查找定位字符函数FIND和SEARCH。很多时候,我们拿到的原始数据往往杂乱无章,尤其是当我们面对错综复杂且数据量庞大的表册时,这时候就需要利用这两个函数,根据文本中的指定字符串进行查找和定位,从而帮助我们快速找到所需内容,所以千万不要小瞧它们的作用。

一、FIND函数基础知识

(一)FIND函数定义

FIND函数用来对原始数据中某个字符串进行定位,以确定其位置。使用FIND函数进行定位时,总是从指定位置开始,返回找到的第一个匹配字符串的位置,不管其后是否还有相匹配的字符串。

语法:FIND(查找值,查找单元格,查找字符数)

查找值:必需参数,是指要查找的字符串。如果是文本,必须添加英语输入法下的双引号,否则函数无法计算。

查找单元格:必需参数,是指包含要查找关键字的单元格,也就是说要在这个单元格内查找关键字。

查找字符数:可选参数,指定开始进行查找的字符数,如果值为1,则从单元格内第一个字符开始查找关键字,如果忽略该参数,则默认值为1。

使用FIND函数注意事项:

—使用FIND函数查找时,要区分大小写、全角和半角字符。查找结果的字符位置不分全角和半角,作为一个字符来计算。

—使用第3个参数“查找字符数”可跳过指定数目的字符。例如,使用文本字符串“函数学习:如何学好函数”,如果要查找文本字符串中第二个“学”字,可将“查找字符数”的值设置为大于第一个“学”字所在的位置3,比如我们设置为5,这样就会跳过第一个“学”字,从第5个字符开始查找,下一个“学”字的位置在第8位,于是返回8。

—如果第1个参数“查找值”是空文本,则FIND会返回数值1。“查找值”中不能包含通配符。

—如果第2个参数“查找单元格”中不包含“查找值”,第3个参数“查找字符数”小于0,“查找字符数”大于“查找单元格”的长度,则FIND都将返回错误值#VALUE!。

(二)FIND函数案例实践:提取长宽高统计在一个单元格的数据计算体积

某公司工程部在统计农户水池建设时,把建设规格长宽高统计在一个单元格里,每个数据只有十位数并保留两位小数,中间用*号隔开,现在需要计算水池体积并根据单价计算总价。

在C3单元格中输入公式:=PRODUCT(LEFT(B3,FIND(\”*\”,B3)-1),MID(B3,FIND(\”*\”,B3,5)+1,4),RIGHT(B3,4)),按回车键即可分别提取长宽高并进行相乘计算出体积;在E3单元格输入公式:=PRODUCT(C3:D3),即可计算出水池建设总价。见下图:

本例中,用LEFT、MID和RIGHT函数提取的数据作为PRODUCE的参数进行计算。LEFT(B3,FIND(\”*\”,B3)-1)中,使用FIND(\”*\”,B3)-1查找出*号在B3单元格中的位置数字,减去1表示提取*号前面的数据;MID(B3,FIND(\”*\”,B3,5)+1,4)中,第一个*号在第4位,跳过*号+1表示提取*号后面一位,然后提取第二个*号前的4个字符;用RIGHT(B3,4)提取B3单元格后面4位,最后用PRODUCT函数进行乘积计算。

对于本例记录数字规律的单元格,也可以跳过FIND函数,直接用LEFT、MID和RIGHT函数分别提取后相乘,公式可写成:=PRODUCT(LEFT(B3,4),MID(B3,6,4),RIGHT(B3,4)),两个公式结果完全相同。

二、SEARCH函数基础知识

(一)SEARCH函数定义

SEARCH函数可在第二个文本字符串中查找第一个文本字符串,并返回第一个文本字符串的起始位置的编号,该编号从第二个文本字符串的第一个字符算起。

语法:SEARCH(查找值,查找区域,查找字符数)

查找值:必需参数,是指要查找的文本字符串。

查找区域:必需参数,是指要在哪个区域查找。

查找字符数:可选参数,是指从第2个参数“查找区域”的第几个字符开始查找,当从第一个字符开始查找时可省略,当省略时默认值为1。

使用SEARCH函数注意事项:

—在第1个参数“查找值”中,可以使用通配符,例如:问号“?”和星号“*”。其中问号“?”代表任何一个字符,星号“*”代表任何字符串。如果要查找的字符串就是问号或星号,必须在这两个符号前加上“~”符号。

—如果找不到第1个参数“查找值”的值,则返回错误值#VALUE!。

—如果第3个参数“查找字符数”小于0或大于第2个参数“查找区域”的长度,则返回错误值#VALUE!。

(二)SEARCH函数案例实践:统计各班级学生人数

某年级把所有学生的基础信息汇总在一个表格,需要统计各班级的学生人数,本例中,可以用COUNT和SEARCH函数进行统计。

在F3单元格中输入公式:=COUNT(SEARCH(E3,$B$3:$B$20)),按【Ctrl+Shift+Enter】三键组合,即可统计出各班级学生人数。见下图:

本例中,首先用SEARCH(E3,$B$3:$B$20)查找出E3单元格班级在$B$3:$B$20区域中的位置数字,如果能查找到需要的文本,则返回其位置,如果找不到则返回错误值。最后用COUNT统计这些数字的个数,因为一对多查找属于数组,所以要用【Ctrl+Shift+Enter】三键组合得到计算结果。$B$3:$B$20要用绝对引用的方法,否则下拉复制时单元格区域会发生变化,导致统计错误。

在实际运用中,本例属于单条件计数,一般不会运用以上方法,通常会用COUNTIF函数来统计,公式可写成:=COUNTIF($B$3:$B$20,E3),两个公式的统计结果完全相同。

以上就是查找定位字符函数FIND和SEARCH的基础知识和几个经典案例,想要学习好EXCEL函数,要学会多个函数的组合,后续课程中我们会讲到多函数结合的用法,能进行更为复杂的计算,对提升工作效率有很大帮助。

个人建议:在学习EXCEL函数时,首先要熟悉函数的功能和语法,尽量多写,通过反复书写和实践,对照文中的案例,举一反三,我相信,你的EXCEL技巧会得到快速提升,日积月累,必成大器!

感谢朋友们的支持,如果你有好的意见建议和问题,欢迎在评论区留言交流,期待你的精彩!

如何使用js查找数组中符合条件的元素

js查找数组中符合条件元素的几种方法

  1. let arr = [
  2. {name: \’zhangsan\’, age: 18},
  3. {name: \’lisi\’, age: 17},
  4. {name: \’xiaoming\’, age: 18},
  5. ],
  6. result = []
  7. for (let item of arr){
  8. if(item.age === 18){
  9. result.push(item);
  10. }
  11. }
  12. console.log(result);// [{name: \’zhangsan\’, age: 18},{name: \’xiaoming\’, age: 18}]

注意:

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

filter() 不会对空数组进行检测。

filter() 不会改变原始数组。

  1. let arr = [
  2. {name: \’zhangsan\’, age: 18},
  3. {name: \’lisi\’, age: 17},
  4. {name: \’xiaoming\’, age: 18},
  5. ];
  6. let result = arr.filter(item=>item.age === 18)
  7. console.log(result);// [{name: \’zhangsan\’, age: 18},{name: \’xiaoming\’, age: 18}]

注意:

find()方法只返回数组中满足条件的第一个元素,并非所有元素

当数组中的元素在条件返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。

如果没有符合条件的元素返回 undefined

find() 对于空数组,函数是不会执行的。

find() 并没有改变数组的原始值。

  1. let arr = [
  2. {name: \’zhangsan\’, age: 18},
  3. {name: \’lisi\’, age: 17},
  4. {name: \’xiaoming\’, age: 18},
  5. ];
  6. let result = arr.find(item=>item.age === 18)
  7. console.log(result);// {name: \’zhangsan\’, age: 18}

1. 利用find函数和es6箭头函数,下面方法取到数组中满足条件的第一个元素;

  1. var newArray = {};//新对象
  2. var array = [
  3. {name:\’aiai\’,age:18},
  4. {name:\’sisi\’,age:18},
  5. {name:\’lulu\’,age:18},
  6. {name:\’sisi\’,age:19}
  7. ];
  8. //查找符合条件值并存入新数组
  9. newArrar = this.array.find((item) => {
  10. if(item.name === \’sisi\’){
  11. return item
  12. }
  13. })
  14. //此时 newArray = {name:\’sisi\’,age:18}

2. 查找符合条件的所有元素

  1. var newArray = [];//新数组
  2. var j = 0;
  3. var array = [
  4. {name:\’aiai\’,age:18},
  5. {name:\’sisi\’,age:18},
  6. {name:\’lulu\’,age:18},
  7. {name:\’sisi\’,age:19}
  8. ]; //目标数组
  9. //查找符合条件值并存入新数组
  10. for(let i in array){
  11. if(array[i].name == \’sisi\’){
  12. newArray[j++] = array[i]
  13. }
  14. }
  15. //此时 newArray = [{name:\’sisi\’,age:18},{name:\’sisi\’,age:19}]

利用Find方法查找

【分享成果,随喜正能量】无论已到哪里,少回头,多务实,当下不虚度,人生可无悔。

《VBA代码解决方案》这套教程是我最早推出的教程,目前已经是第二版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一下把自己喜欢的代码摆好。

这套教程共三册,一百四十七讲,内容覆盖较广,也是初级和中级间的过度教程,改版后的内容主要是提供程序源码文件及代码修正为32位和64位兼用代码。今后一段时间会给大家陆续推出。今日的内容是第7讲:利用Find方法查找

在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中则使用Find方法,这个方法是我比较喜欢的方法,在EXCEL中用LOOKUP可以的实现的内容均在使用FIND的方法之内。

如下面的代码所示。

Sub myFind()

Dim StrFind As String

Dim Rng As Range

StrFind = InputBox(\”请输入要查找的值:\”)

If Trim(StrFind) <> \”\” Then

With Sheet1.Range(\”A:A\”)

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then

Application.Goto Rng, True

Else

MsgBox \”没有找到该单元格!\”

End If

End With

End If

End Sub

代码解读:myFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。

  • 应用于Range对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing。

语法如下:

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)

参数:

1) expression是必需的,该表达式返回一个Range对象。

2) What是必需的,要搜索的数据,可为字符串或任意数据类型。

3) After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。

在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。

4) LookIn是可选的,信息类型。xlValues对应 值;xlFormulas 对应 公式;xlComments对应 批注

5) LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。

6) SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。

7) SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。

8) MatchCase是可选的,若为True,则进行区分大小写的查找。默认值为False。

9) MatchByte是可选的,仅在选择或安装了双字节语言支持时使用。若为True,则双字节字符仅匹配双字节字符。若为False,则双字节字符可匹配其等价的单字节字符。

10) SerchFormat是可选的,搜索的格式。

  • 每次使用Find方法后,参数LookIn、LookAt、SearchOrder 和MatchByte的设置将保存。如果下次调用Find方法时不指定这些参数的值,就使用保存的值。因此每次使用该方法时请明确设置这些参数。
  • 如果工作表的A列中存在重复的数值,那么需要使用FindNext方法或FindPrevious方法进行重复搜索,如下面的代码所示。

Sub mynz_7() \’第7讲 使用Find方法,查找单元格

Dim StrFind As String

Dim Rng As Range

Dim FindAddress As String

StrFind = InputBox(\”请输入要查找的值:\”)

If Trim(StrFind) <> \”\” Then

With Sheets(\”7\”).Range(\”A:A\”)

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then

FindAddress = Rng.Address

Do

Rng.Interior.ColorIndex = 6 \’设置成黄色

Set Rng = .FindNext(Rng)

Loop While Not Rng Is Nothing And Rng.Address <> FindAddress

End If

End With

End If

End Sub

代码解析:RngFindNext过程在工作表Sheets(“7”)的A列中查找InputBox函数对话框中所输入的值,并将查到单元格底色设置成黄色。

第8行到第17行代码使用Find方法在工作表Sheet1的A列中查找。

第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。

第18行代码将查找到的单元格底色设置成黄色。

第19行代码使用FindNext方法进行重复搜索。

  • FindNext方法继续执行用Find方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的Range对象,语法如下:

expression.FindNext(After)

参数

1)expression是必需的,返回一个Range对象。

2)After是可选的,指定一个单元格,查找将从该单元格之后开始。

第20行代码如果查找到的单元格地址等于字符串变量FindAddress所记录的地址,说明A列已搜索完毕,结束查找过程。

3 VBA中利用FIND的代码实现多值查找的代码运行

1):代码截图:

2)开始运行:

3)返回结果:

今日内容回向:

1 FIND方法有哪些利用价值?

2 如何实现多值的查找?

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

上述教程的学习顺序:

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

  • 如何学习VBA呢? 概括的说就是: 学习过程中要信、解、受、持,更要有回向的业力。无论您在学习的任何阶段,都要对照教程的知识点加持自己的实际工作,总会有丰厚的收获。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。