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

Vba 通过唯一参数定位,比较单元格内字符串中的特定数据,vba,excel,Vba,Excel,我有一个字符串,通常如下所示: X-马铃薯-2D-AB3F-N 它将始终采用这种格式,我想将“AB3F”与另一个由四个字符组成的字符串进行比较。这里有一个问题,这个字符串中的某些值的长度可能会改变,所以我不能简单地比较“最后6个字符中的前四个” 始终保持不变的是破折号的数量。始终至少总共4个(在少数情况下为5个),并且我要比较的字符串将始终位于最后两个字符串之间。是否可以使用这些来隔离我要比较的4或5个字符 我知道Stack overflow不喜欢含糊不清的问题。对不起D给你: 基本上,这个公

我有一个字符串,通常如下所示:

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

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

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

我知道Stack overflow不喜欢含糊不清的问题。对不起D

给你:

基本上,这个公式:

=查找(,),替换(A1,“-”,“,,”,4))

A1是你的绳子。这将返回第四个“-”的位置。(因为
substitute
将第四个“-”替换为一个不太可能出现在代码中的“,”,然后
find
查找“,”)

编辑,刚刚意识到第4组可能也有4个以上的数字,因此您可以使用过于复杂的:

=MID(A1,FIND("¬",SUBSTITUTE(A1,"-","¬",3))+1,FIND("¬",SUBSTITUTE(A1,"-","¬",4))-FIND("¬",SUBSTITUTE(A1,"-","¬",3))-1)
希望这有帮助

给你:

基本上,这个公式:

=查找(,),替换(A1,“-”,“,,”,4))

A1是你的绳子。这将返回第四个“-”的位置。(因为
substitute
将第四个“-”替换为一个不太可能出现在代码中的“,”,然后
find
查找“,”)

编辑,刚刚意识到第4组可能也有4个以上的数字,因此您可以使用过于复杂的:

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

希望这有帮助

由于您提到可能有四个或五个连字符,并且您所需的值始终在最后两个之间,因此我建议如下:

=TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),198),99))
  • 将每个连字符替换为99个空格(比最长的子字符串长得多)
  • 最右边的198个字符肯定包含最后两个子字符串
  • 左(…,99)肯定会返回这两个选项中的第一个
  • 修剪以消除多余的空间
此方法将使用四个或五个连字符

如果要在宏中使用此选项,以下代码将返回字符串中的“下一个到最后一个”连字符子字符串:

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

由于您提到可能有四个或五个连字符,并且所需的值始终介于最后两个之间,因此我建议如下:

=TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),198),99))
  • 将每个连字符替换为99个空格(比最长的子字符串长得多)
  • 最右边的198个字符肯定包含最后两个子字符串
  • 左(…,99)肯定会返回这两个选项中的第一个
  • 修剪以消除多余的空间
此方法将使用四个或五个连字符

如果要在宏中使用此选项,以下代码将返回字符串中的“下一个到最后一个”连字符子字符串:

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

非常感谢你!我将学习这一点,然后尝试实现它。如果有用的话,我会再打给你的!:我真的很感激!如果有五个破折号呢?这将返回第三个和第四个破折号之间的字符串。在所有情况下,通过替换掉连字符并将原始字符串的长度与替换的字符串进行比较,可以很容易地进行修改。非常感谢!我将学习这一点,然后尝试实现它。如果有用的话,我会再打给你的!:我真的很感激!如果有五个破折号呢?这将返回第三个和第四个破折号之间的字符串。在所有情况下,通过替换掉连字符并将原始字符串的长度与替换的字符串进行比较,可以很容易地进行修改。我需要进一步研究。让我在工作表中的各个领域进行测试。我用这个宏,这看起来更健壮。我会给你回复的。@CodingKnower我会添加你可以在宏中使用的代码,我需要进一步研究。让我在工作表中的各个领域进行测试。我用这个宏,这看起来更健壮。我会给你回复的。@codingsnool我会添加你可以在宏中使用的代码