我有B列,我需要测试长度以查看它是否超过 200 个字符。如果超过200个字符,我需要它从右到左找到分号“;”的出现 并将分号右侧的字段拆分为C列。这可以做到吗?在我不得不用 4 列执行此操作并将其减少到一列之前。请建议最好的公式来做到这一点。
问问题
3491 次
2 回答
4
=IF(LEN(B1)>200,MID(B1,SEARCH("@",SUBSTITUTE(B1,";","@",LEN(B1)-LEN(SUBSTITUTE(B1,";",""))))+1,LEN(B1)),"")
解释:
- 删除分隔符的所有实例:
SUBSTITUTE(B1,";","")
- 从整个字符串的长度中减去 (1) 的长度,得到分隔符的出现次数:
LEN(B1)-LEN([1])
- 用 @ 替换最后出现的分隔符:
SUBSTITUTE(B1,";","@",[2])
- 找到@的位置:
SEARCH("@",[3])
- 获取@位置右侧所有内容的子字符串:
MID(B1, [4] +1,LEN(B1))
- 添加 if 条件以仅处理长度 > 200 的字符串:
=IF(LEN(B1)>200,[5],"")
于 2013-06-27T16:29:59.413 回答
1
我在网上搜索了这个公式,并得出结论,要么需要大量嵌套和难以遵循的公式,要么需要 VBA 函数。我建议在一个简单的公式中使用 VBA 函数,例如我在下面编写的函数(FindLast)。如果您需要有关如何创建此 VBA 公式的说明,请告诉我:
Function FindLast(find_text As String, within_text As Range) As Double
Dim i As Integer
i = Len(within_text.Value) ' start at last character and work back
Do While Mid(within_text.Value, i, 1) <> find_text
i = i - 1
Loop
FindLast = i
End Function
然后,您将能够在公式中使用 FindLast,例如 C1 中的以下公式:
=IF(LEN(B1)>200,MID(B1,FindLast(";",B1)+1,500),"")
更新
上面的 500 只是我选择的一个长数字来表示单元格的其余部分。如果final之后可能超过500个字符;然后使用更大的数字。不幸的是,我认为 MID 函数不允许您指定要返回单元格的其余部分。如果 B1 不是 >200 个字符,我将不返回任何内容,如果这不是要求,请告诉我。
于 2013-06-27T16:40:24.607 回答