通过唯一参数进行定位,比较单元格内string的特定数据

我有一个经常看起来像这样的string:

X-马铃薯-2D-AB3F-N

它将始终是这种格式,我想比较“AB3F”与另一个四个字符的string。 这里有一个问题,这个string中的某些值可能会改变,所以我不能简单地比较“最后6个字符的前四个”

总是保持不变的是破折号的数量。 总共至less有4个(在极less数情况下5),而我想要比较的string总是在最后两个之间。 是否可以使用这些来隔离我想比较的4或5个字符?

我知道堆栈溢出不像模糊的问题。 抱歉! :d

干得好:

http://excel.tips.net/T003324_Finding_the_Nth_Occurrence_of_a_Character.html

基本上,这个公式:

=FIND("¬",SUBSTITUTE(A1,"-","¬",4))

A1是你的string。 这将返回第四个“ – ”的位置。 (因为substitute用代码中不太可能出现的“¬”代替第四个“ – ”,然后find“¬”)

编辑,只是意识到,第四组也可能有超过4位数,所以你可以检索过度复杂:

 =MID(A1,FIND("¬",SUBSTITUTE(A1,"-","¬",3))+1,FIND("¬",SUBSTITUTE(A1,"-","¬",4))-FIND("¬",SUBSTITUTE(A1,"-","¬",3))-1) 

希望这可以帮助!

既然你提到可能有四个或五个连字符,并且你想要的值总是在最后两个之间,我build议如下:

 =TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),198),99)) 
  • 用99个空格replace每个连字符(比最长的子string长得多)
  • 最右边的198个字符肯定会有最后两个子string
  • 左(…,99)肯定会返回这两个中的第一个
  • 修剪摆脱额外的空间

这种方法将使用四个或五个连字符。

如果你打算在macros中使用它,下面的代码将在string中返回“Next To Last”连字符所描述的子string:

 Dim V As Variant V = Split(S, "-") NextToLast = V(UBound(V) - 1)