通过唯一参数定位来比较单元格内字符串的特定数据

时间:2016-08-01 15:29:36

标签: excel vba excel-vba

我有一个通常看起来像这样的字符串:

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

它将始终采用该格式,并且我想将“AB3F”与另一个包含四个字符的字符串进行比较。这是捕获,这个字符串中的某些值可能会改变长度,所以我不能简单地比较“最后6个字符中的前四个”

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

我知道Stack溢出不喜欢模糊的问题。抱歉! :d

2 个答案:

答案 0 :(得分:1)

你走了:

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

基本上,这个公式:

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

A1是你的字符串。这将返回第4个“ - ”的位置。 (因为substitute用“¬”替换第4个“ - ”,这不太可能出现在代码中,find然后找到“¬”)

编辑,只是意识到第4组也可能有超过4位数,所以你可以用过于复杂的方法检索它:

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

希望这有帮助!

答案 1 :(得分:1)

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

=TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),198),99))
  • 将每个连字符替换为99个空格(比最长子字符串长得多)
  • 最右边的198个字符肯定会有最后两个子字符串
  • 左(...,99)肯定会返回这两个中的第一个
  • 修剪以消除多余的空间

此方法适用于四个或五个连字符。

如果您要在宏中使用它,以下代码将返回字符串中的“Next To Last”连字符描述的子字符串:

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