3

我有B列,我需要测试长度以查看它是否超过 200 个字符。如果超过200个字符,我需要它从右到左找到分号“;”的出现 并将分号右侧的字段拆分为C列。这可以做到吗?在我不得不用 4 列执行此操作并将其减少到一列之前。请建议最好的公式来做到这一点。

4

2 回答 2

4

=IF(LEN(B1)>200,MID(B1,SEARCH("@",SUBSTITUTE(B1,";","@",LEN(B1)-LEN(SUBSTITUTE(B1,";",""))))+1,LEN(B1)),"")

解释:

  1. 删除分隔符的所有实例:SUBSTITUTE(B1,";","")
  2. 从整个字符串的长度中减去 (1) 的长度,得到分隔符的出现次数:LEN(B1)-LEN([1])
  3. 用 @ 替换最后出现的分隔符:SUBSTITUTE(B1,";","@",[2])
  4. 找到@的位置:SEARCH("@",[3])
  5. 获取@位置右侧所有内容的子字符串:MID(B1, [4] +1,LEN(B1))
  6. 添加 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 回答