资源描述:
《可实现精确查找、模糊查找和继续查找的自定义函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、可实现精确查找、模糊查找和继续查找的自定义函数 在Excel中,VLOOKUP()是最常被使用的查找引用函数,但这个函数有一个问题,就是被查找的对象必须位于所查找区域的第一列位置上,引用是使用相对地址进行操作的,而且,当被查找区域不存在被查找对象时,函数返回值是不正确的。 下面第一个函数S_FIND在以前介绍过,该函数正是针对这一问题,即所查找对象可以位于被查找区域的任意列上,查找的应用也使用绝对地址,即直接通过列标来引用。 但我最初设计的时候,该函数仅能完成对单元格的精确查找,无法完成模糊查找和继续查找。 重新设计的
2、查找函数包括以下组合:S_FIND(M_code,M_SHEET,M_AREA,M_COLAsString)实现对被查找对象的精确查找、S_FINDP(M_code,M_SHEET,M_AREA,M_COLAsString)实现对被查找对象的模糊查找、S_FINDN(M_code,M_SHEET,M_AREA,M_COLAsString)实现对被查找对象的继续查找。其中,实现继续查找需引入全局变量,即在模块首部进行变量定义,而且S_FINDN函数的使用必须在S_FIND或S_FINDP被使用后才起作用。同时,当第四个函数变量M
3、_COL被以空字符(即"")代入时,该三函数返回值为被查找对象的行标。DimM_CBUT,M_CROWAsIntegerFunctionS_FIND(M_code,M_SHEET,M_AREA,M_COLAsString)'在M_SHEET工作表M_AREA范围中精确查找M_CODE所在行,并返回其对应的M_COL列单元格的值。'以上函数参数均为文本或其值为文本的单元格或表达式。DimM_ROWAsIntegerDimM_STEPAsIntegerM_CBUT=0M_CROW=0M_RANGE=""OnErrorGoTo100
4、M_code=Trim(M_code)IfM_SHEET=""ThenM_ROW=Range(M_AREA).Find(Trim(M_code),LOOKAT:=xlWhole).RowIfM_COL=""ThenM_RANGE=M_ROWElseM_RANGE=Range(M_COL&M_ROW)EndIfElseM_ROW=Range(M_SHEET&"!"&M_AREA).Find(Trim(M_code),LOOKAT:=xlWhole).RowIfM_COL=""ThenM_RANGE=M_ROWElseM_RANG
5、E=Range(M_SHEET&"!"&M_COL&M_ROW)EndIfEndIfM_CBUT=1M_CROW=M_ROW100:S_FIND=M_RANGEEndFunctionFunctionS_FINDP(M_code,M_SHEET,M_AREA,M_COLAsString)'在M_SHEET工作表M_AREA范围中模糊查找M_CODE所在行,并返回其对应的M_COL列单元格的值。'以上函数参数均为文本或其值为文本的单元格或表达式。DimM_ROWAsIntegerDimM_STEPAsIntegerM_CBUT=0
6、M_CROW=0M_RANGE=""OnErrorGoTo100M_code=Trim(M_code)IfM_SHEET=""ThenM_ROW=Range(M_AREA).Find(Trim(M_code),LOOKAT:=xlPart).RowIfM_COL=""ThenM_RANGE=M_ROWElseM_RANGE=Range(M_COL&M_ROW)EndIfElseM_ROW=Range(M_SHEET&"!"&M_AREA).Find(Trim(M_code),LOOKAT:=xlPart).RowIfM_COL
7、=""ThenM_RANGE=M_ROWElseM_RANGE=Range(M_SHEET&"!"&M_COL&M_ROW)EndIfEndIfM_CBUT=1M_CROW=M_ROW100:S_FINDP=M_RANGEEndFunctionFunctionS_FINDN(M_code,M_SHEET,M_AREA,M_COLAsString)'在M_SHEET工作表M_AREA范围中再次查找M_CODE所在行,并返回其对应的M_COL列单元格的值。'以上函数参数均为文本或其值为文本的单元格或表达式。'此函数必须在S_FIN
8、D或S_FINDP被点击后使用DimM_ROWAsIntegerDimM_STEPAsIntegerM_RANGE=""OnErrorGoTo100IfM_CBUT=0ThenGoTo100M_code=Trim(M_code)IfM_SHEET=""ThenM_ROW=Ra