FIND+MID。今天介绍一个VBA 自定义函数 GetKeyword按关键字截取固定长度文本,不用写复杂嵌套公式,批量根据关键词位置截取指定长度文本,支持溢出输出、一键去重,文本提取场景效率直接拉满。一、函数核心功能详解1、在一片数据区域内批量检索关键词
2、定位关键词位置,从关键词开始截取指定字符长度(包含关键词本身)
3、两种输出模式:保留原区域形状输出 / 自动去重单列输出
4、 支持高版本Excel及WPS动态数组溢出,输入公式自动铺满结果
二、函数语法与参数说明函数语法:=GetKeyword(数组, 关键字, 字符数, [模式0去重1不去重])Function GetKeyword(数组 As Range, 关键字 As Range, 字符数 As Long, Optional 模式0去重1不去重 As Long = 1) As VariantDim arrData() As VariantDim arrResult() As VariantDim r As Long, c As LongDim strSource As StringDim strKey As StringDim posKey As LongDim strExtract As StringDim dict As ObjectSet dict = CreateObject("Scripting.Dictionary")strKey = CStr(关键字.Value)If 数组.count = 1 ThenReDim arrData(1 To 1, 1 To 1)arrData(1, 1) = 数组.ValueElsearrData = 数组.ValueEnd IfDim rowCount As Long, colCount As LongrowCount = UBound(arrData, 1)colCount = UBound(arrData, 2)ReDim arrResult(1 To rowCount, 1 To colCount)For r = 1 To rowCountFor c = 1 To colCountIf IsNull(arrData(r, c)) ThenstrSource = ""ElsestrSource = CStr(arrData(r, c))End IfposKey = InStr(1, strSource, strKey, vbTextCompare)If posKey > 0 ThenstrExtract = mid(strSource, posKey, 字符数)arrResult(r, c) = strExtractIf 模式0去重1不去重 = 0 ThenIf Len(strExtract) > 0 Then dict(strExtract) = ""End IfElsearrResult(r, c) = ""End IfNext cNext rIf 模式0去重1不去重 = 1 ThenGetKeyword = arrResultElseDim arrDistinct() As VariantDim i As LongIf dict.count > 0 ThenReDim arrDistinct(1 To dict.count, 1 To 1)For i = 0 To dict.count - 1arrDistinct(i + 1, 1) = dict.Keys()(i)Next iGetKeyword = arrDistinctElseGetKeyword = ""End IfEnd IfEnd Function
Alt+F11 打开 VBA 编辑器;