gpt4 book ai didi

vba - 在 VBA 中处理一系列逗号分隔值

转载 作者:行者123 更新时间:2023-12-04 04:49:46 30 4
gpt4 key购买 nike

我有这个函数,它以字符串形式返回逗号分隔字符串中的值,该值按给定整数值的顺序排列。

Private Sub TestGetNthNumber()
Debug.Print GetNthNumber("NUMBERS 5088, 5089, 5090, 5091", 2)
End Sub

Public Function GetNthNumber(sMark As String, iOrder As Integer) As String
Dim sTemp As String
Dim sNumber As String
Dim iLoop As Integer

If sMark = "" Then
Exit Function
End If

sTemp = sMark & ","

For iLoop = 1 To iOrder
sTemp = Mid(sTemp, InStr(sTemp, " "))
sNumber = Trim(Left(sTemp, InStr(sTemp, ",") - 1))
sTemp = Mid(sTemp, InStr(sTemp, ",") + 1)
Next

GetNthNumber = sNumber
End Function

测试 Sub 将返回 "5089"作为它在值列表中的给定数字 2。

我的问题;
有没有更好的方法来做到这一点,而不是使用 Mid、Left 和 InStr 进行凌乱的字符串操作?像将逗号分隔的字符串值转换为数组的方法吗?

另一个问题;
字符串的格式可能是 "NUMBERS 5088, 5089, 5090 and 5091" .但为此,我假设只需替换 " and"","在处理它之前就可以解决问题。

最佳答案

另一种选择是使用 正则表达式/正则表达式 .您的函数将如下所示:

Public Function GetNthNumberAlternative(sMark As String, iOrder As Integer) As String

'regexp declaration
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")

With objRegExp
.Global = True
.Pattern = "\d+"

GetNthNumberAlternative = .Execute(sMark)(iOrder - 1).Value
End With

End Function

你可以这样称呼它:
Private Sub TestGetNthNumber()
Debug.Print GetNthNumberAlternative("NUMBERS 5088 AND 5089 OR 5090, 5091", 1)
End Sub

关于vba - 在 VBA 中处理一系列逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609031/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com