从VBA字符串数组中获取第n个元素

4

我该如何从一个VBA字符串数组中提取第n个元素?

我有一个字符串,像这样:TEST - 2017/01/20 = 发票

我希望尽可能简洁地提取出第二和第三个元素。我试着类似于JavaScript的方式去做,但这并不可行,所以应该有一种VBA的方法:

Dim Report As String
Dim CurrLine As String
Dim CurrDate As String
Dim CurrTask As String

CurrLine = "TEST - 2017/01/20 = Invoice"
CurrDate = Trim(Split(CurrLine, '-')[1])
CurrTask = Trim(Split(CurrLine, '=')[1])
Report = Report & CHR(34) & CurrDate & CHR(34) & "," & CHR(34) & CurrTask & CHR(34)

//result: "2017/01/20","Invoice"

这种生成CSV的方式似乎非常低效,因为需要进行许多字符串拼接。如果速度开始变慢,您可以使用Join函数连接字符串,并用单个正则表达式替换所有内容。 - Slai
2个回答

5
一个可能的解决方案。
Dim Report As String
Dim CurrLine As String
Dim CurrDate As String
Dim CurrTask As String, St 


CurrLine = "TEST - 2017/01/20 = Invoice"
St=Split(replace(CurrLine, "=","-"),"-")
CurrDate = St(1)
CurrTask = St(2)
Report = Report & CHR(34) & CurrDate & CHR(34) & "," & CHR(34) & CurrTask & CHR(34)  //result: "2017/01/20","Invoice"

希望提高效率,我可以这样做吗: Dim Report as String, CurrLine, CurrDate, CurrTask, St目标是在一行上尽可能多地完成任务 - crashwap
1
但是currline和followings将具有变量数据类型,而不是字符串。 - h2so4
那么我可以省略 as String 部分,只使用 Dim Report, CurrLine, CurrDate, CurrTask, St,代码仍然能够正常工作吗? - crashwap
谢谢 - 你解决了我的问题。真是信赖微软总能与时代脱节。我在VBA编辑器中使用Ctrl+Z撤消了一些更改,然后使用Ctrl+Y将它们恢复回来… 我将因为微软而变秃。 - crashwap
@crashwap,这个表单不太好。如果你想在一行中完成它,请使用以下格式:Dim a as long, b as string, c as Double。如果您省略了维度,则它们将成为变量,这是此情况下所需的st,但对于其余部分来说并不是很合适。 - Preston
Dim St() As StringDim St$(),因为 Split 函数始终返回字符串数组。 - Slai

3

如果这是一个与工作相关的任务,我会使用@h2so4提供的替代方案。但如果你喜欢"花哨"的编码方式,下面的代码也可以实现:

Option Explicit

Public Sub Test()

    Dim strtest As String

    strtest = "Test - 2017 / 1 / 20 = Invoice"

    Debug.Print Trim(Split(strtest, "-")(1))
    Debug.Print Trim(Split(strtest, "=")(1))
    Debug.Print Trim(Split(Trim(Split(strtest, "-")(1)), "=")(0))

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接