Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-查找子字符串的第二个匹配项“;TL";然后删除所有内容_Excel_Vba_Split_Substring - Fatal编程技术网

Excel VBA-查找子字符串的第二个匹配项“;TL";然后删除所有内容

Excel VBA-查找子字符串的第二个匹配项“;TL";然后删除所有内容,excel,vba,split,substring,Excel,Vba,Split,Substring,它的作用:我有一段代码,可以在单元格中找到一个子字符串TL,并通过在“TL-”后面添加或删除0,强制后面的数字长度为6。(即TL-00072->TL-000072,TL-034->TL-000034,TL-000000789->TL-000789) 我希望它做什么:但是,有时一个单元格中有多个TL值。我需要找出TL是否有第二次出现,如果有,删除第二次出现以及之后的所有内容 例如: Start: Output: TL-000789 TL-0001

它的作用:我有一段代码,可以在单元格中找到一个子字符串TL,并通过在“TL-”后面添加或删除0,强制后面的数字长度为6。(即
TL-00072->TL-000072
TL-034->TL-000034
TL-000000789->TL-000789

我希望它做什么:但是,有时一个单元格中有多个TL值。我需要找出TL是否有第二次出现,如果有,删除第二次出现以及之后的所有内容

例如:

Start:                           Output:
TL-000789 TL-000187 TL-000773  ->   TL-000789
TL-000689 TL -000787           ->   TL-000689
TL-000982 TL - 980819          ->   TL-000982

这是我一直在使用split(可能trim也能用?)编写的代码的尝试(不正确且不起作用),它会发现TL的第二次出现,并删除它之后的所有内容。下面是完整的工作代码

当前对代码的尝试

Dim splitValues As Variant
        If Str(str, "TL" + 1) 'do not know how to get SECOND occurrence
            splitValues = Split(theValue, "TL")
            theValue = splitValues(0)
        End If
工作代码

Dim splitValues As Variant
        If Str(str, "TL" + 1) 'do not know how to get SECOND occurrence
            splitValues = Split(theValue, "TL")
            theValue = splitValues(0)
        End If
[将在开头添加新代码](问题顶部的解释)

注意:StartSht是工作簿,其中包含值和代码。 所有被更改的值都在“C”列中


如果你找到第二个“TL”,你可以重新定义str。行后:
如果InStr(str,“TL”)>0,则

添加另一条IF语句:
如果InStr(3,str,“TL”)>0,则str=Mid(str,1,InStr(3,str,“TL”)-2)


然后使用新的
str

继续您的其余代码。您不能仅使用以下示例:
strKeepLeft=LEFT(TextToSearch,Mid(TextToSearch,“TL”,3)-1)
Mid在字符串中查找字符串的匹配项,因此我们告诉它从位置3开始(假设第一个TL匹配项始终位于1,2位置)。。。在出错时,我们使用整个TextToSearch字符串,因为没有第二个TL语句。看起来这很有意义,但我不确定如何实现它。我尝试使用
set
和您的代码,但不确定以后如何引用它。。。我是VBA新手,所以我仍然不确定如何将一切称为@xQbertwow美丽!谢谢@tmh8885。如果你有时间解释一下,3和-1是如何消除这些值的?当然。在
str
中查找字符串“TL”时,我们希望从3开始,以避免出现第一个实例。至于-1,我将其编辑为-2,这是我的疏忽。它所做的是找到“TL”的第二个实例,并将其从
str
中排除。但是我们想排除的不仅仅是“TL”,我们还想排除空间,给我们一个修剪的
str