Exceltesting长度为1的字段,如果len> 200,则进行分隔

我有列B ,我需要testing的长度,看看它是否超过200个字符。 如果超过200个字符,我需要它从右到左发现分号的出现“;” 并将分号右侧的字段拆分为C列。 可以这样做吗? 之前我不得不这样做与4列,并已减less到一列。 请build议最好的公式来做到这一点。

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

说明:

  1. 删除分隔符的所有实例: SUBSTITUTE(B1,";","")
  2. 从整个string的长度减去(1)的长度,得到分隔符的出现次数: LEN(B1)-LEN([1])
  3. 用@: SUBSTITUTE(B1,";","@",[2])replace最后一次出现的分隔符
  4. 查找@: SEARCH("@",[3])
  5. 获取@ location: MID(B1, [4] +1,LEN(B1))右侧所有内容的子string
  6. 如果条件添加,只处理长度> 200的string: =IF(LEN(B1)>200,[5],"")

我在网上search了这个公式,并得出结论,你要么需要很多嵌套,而且很难遵循公式或VBA函数。 我会build议使用一个VBA函数,例如我在下面写的一个简单的公式(FindLast)。 如果您需要有关如何创build此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 

然后,您将能够在C1中使用FindLast,如下面的公式:

 =IF(LEN(B1)>200,MID(B1,FindLast(";",B1)+1,500),"") 

UPDATE

在上面的500只是我select的意思是其余的单元格的一个很长的数字。 如果在决赛之后可能会有超过500个人物; 然后使用更大的数字。 不幸的是,我不认为MID函数允许你指定你想返回单元格的其余部分。 如果B1不是> 200个字符,我已经放弃了任何东西,让我知道这是不是要求。