Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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拆分字符串并仅恢复[]之间的元素_Excel_Vba - Fatal编程技术网

使用Excel Vba拆分字符串并仅恢复[]之间的元素

使用Excel Vba拆分字符串并仅恢复[]之间的元素,excel,vba,Excel,Vba,我有一个字符串的形式: "word 1, word 2, ..., word n, [Etiquette], many other words" 我只想检索“礼仪”并将其放入变量中 现在我有一些例子,例如v=“blabla,[礼仪]” 我知道我可以使用函数Split,但是当我只是尝试显示Debug.Print Split(v)时,我得到一个类型错误 谢谢你的帮助 这是一种方法: 1,Filter(拆分(x,”,“[”)获取包含“[…]”的字符串 2、通过连接函数将这些字符串连接成一个字符串(这

我有一个字符串的形式:

"word 1, word 2, ..., word n, [Etiquette], many other words"
我只想检索“礼仪”并将其放入变量中

现在我有一些例子,例如
v=“blabla,[礼仪]”

我知道我可以使用函数Split,但是当我只是尝试显示
Debug.Print Split(v)
时,我得到一个类型错误

谢谢你的帮助

这是一种方法:

1,
Filter(拆分(x,”,“[”)
获取包含“[…]”的字符串

2、通过
连接函数将这些字符串连接成一个字符串(这样可以避免过滤器不返回任何内容时出现的错误)

3、通过
replace函数删除字符“[”和“]”

4、通过
修剪功能去除不必要的空间

。 以下是测试代码:

Sub Test()
x = "word 1, word 2, ..., word n, [Etiquette], many other words"
z = Trim(Replace(Replace(Join(Filter(Split(x, ","), "["), ","), "[", ""), "]", ""))
'z = Replace(Join(Filter(Split(Replace(x, "[", "]#"), "]"), "#"), ","), "#", "")'vs2
Debug.Print Z
End Sub
你可以简单地使用

Split(Split(v, "[")(1), "]")(0)
比如说

Dim v As String, r As String
v = "word 1, word 2, ..., word n, [Etiquette], many other words"
r = Split(Split(v, "[")(1), "]")(0)

迷你备选方案

除了上述精细的解决方案之外,为了演示在要拆分的字符串中添加分隔符字符,如果未找到任何内容,则可以避免出现错误

Sub Example()
Const L = "[", R = "]", C = ","    ' used delimiters
Dim x As String, z As String
x = "word 1, word 2, ..., word n, Etiquette, many other words"

z = Split(Split(Split(x & L, L)(1) & R, R)(0) & C, C)(0)
Debug.Print "z = " & Chr(34) & z & Chr(34)
End Sub


Split返回一个字符串数组,您可以通过Split循环,也可以像Split(v)[1]
那样显示它。巧妙地使用
Filter()
来定位正确的数组成员。感谢@Gary的学生,我认为这也取决于输入字符串,因为
mid,instr
也非常有效。我的变量x是x=Trim(c.Value)。在你的例子中,我有一个错误“索引不属于所选内容”。但是当我尝试使用x=“blabla,”,它是有效的。你能解释一下为什么吗?@alain:因为
Filter(拆分(x),”,“[”)
如果不存在字符串,则不返回任何内容,所以``Filter(拆分(x),”,“[”)(0)`将变为nothing(0)->发生错误。我已更新代码,使代码不会发生。仅供参考,我添加了一个替代方案,以演示如何避免在未找到任何内容时引发错误:)友好提示:正确的方法;将引发错误,但如果在括号中找不到-请参阅OP和我的答案:)我只是回答问题,其中字符串示例确实有括号中的单词和请求是“我只想检索”礼仪,并将其放入变量中。“谢谢你,我也会尝试你的例子!@alain,你尝试过我的例子吗?很好。你将使用什么解决方案?谢谢,我也会尝试你的例子!”!