好的,所以我知道你可以使用LEFT功能抓取任何角色:
Left(Right(A,3),1)
(非常感谢Serenity向我展示了这一点)
我想弄清楚的是,如果你设置了这样的变量:
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
...你怎么把它们作为:
myTxt1 = "2513,82"
myTxt2 = "999,71"
myTxt3 = "55,7"
之后,我可以轻松地抓住","使用上面提到的左(右(A,3),1)代码。
所有这一切都不必使用LEFT函数完成,但我假设这是可行的方法,或者可能正则表达式可以立即清除所有内容?
谢谢!
答案 0 :(得分:2)
这将获得空间左侧的所有内容:
Sub myTxt()
'Set the strings according to your post
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
'Split the strings to an array using a space as the delimiter then assign the first element to the variable
myTxt1 = Split(myTxt1, " ")(0)
myTxt2 = Split(myTxt2, " ")(0)
myTxt3 = Split(myTxt3, " ")(0)
'Display the results
MsgBox "myTxt1 = " & myTxt1 & vbLf & "myTxt2 = " & myTxt2 & vbLf & "myTxt3 = " & myTxt3
End Sub
将0更改为1以获取下一组数据,直到遇到另一个空格。您可以继续增加数字,直到它用完文本块。要查找最大块,请使用ubound(Split(myTxt1,""))
如果您使用左侧功能设置了心脏,可以使用instr(字符串)找到空格的数字字符:
instr(1,myTxt1," ")
然后你可以将它与左边的函数结合起来:
Left(myText,instr(1,myTxt1," ")-1) 'Remove 1 to get rid of the space from the returned string
最后,您可以在此处使用数组以允许可扩展的输入量,如下所示:
Sub myTxt2()
Dim myTxt As Variant, X As Long
'Input your data to an array (Comma seperate your values)
myTxt = Array("2513,82 alpha", "999,71 somekindofexpression", "55,7 orange")
'Loop through the array one element at a time
For X = LBound(myTxt) To UBound(myTxt)
'Replace the element with just the first chunk of the value
myTxt(X) = Split(myTxt(X), " ")(0)
Next
'Display results
MsgBox Join(myTxt, vbLf)
End Sub
你的数据仍然可以访问,但不是myTxt1,myTxt2,myTxt3,它现在分别是myTxt(1),myTxt(2),myTxt(3)
希望这可以帮助你现在和将来。
答案 1 :(得分:0)
这是一些代码,我去寻找一个数字,最后从字符串中删除所有非数字(和非小数和非逗号)字符,直到找到一个可识别的数字。
Lne = Inp.readline
SortKey = Mid(Lne, LCase(Arg(3)), LCase(Arg(4)) - LCase(Arg(3)))
If IsNumeric(Sortkey) = False then
Set RE = new Regexp
re.Pattern = "[^0-9\.,]"
re.global = true
re.ignorecase = true
Sortkey = re.replace(Sortkey, "")
End If
If IsNumeric(Sortkey) = False then
Sortkey = 0
ElseIf Sortkey = "" then
Sortkey = 0
ElseIf IsNull(Sortkey) = true then
Sortkey = 0
End If
.AddNew
.Fields("SortKey").value = CSng(SortKey)
.Fields("Txt").value = Lne
.UpDate
Loop
这是一个更大的计划。
它从StdIn读取一行文字。然后它通过chyaracter位置Arg(3)等提取柱子是命令行参数3 =开始列,4 =结束列。
它测试提取的列是否为数字。如果没有,它会搜索并替换删除所有不是0-9,逗号或小数的字符。
然后我测试它现在是否为数字,如果不是我设置为0,否则我将转换为单个数据类型。
对于你来说,这是搜索和替换,你只剩下数字,小数点和逗号。
答案 2 :(得分:0)
这是我最后使用的解决方案。它包括RegExp功能,因此您必须启用" Microsoft VBScript正则表达式5.5"在工具/参考文献中。
Dim myVal as Variant
Dim colMatches As MatchCollection
Dim objMatch As Match
myVal = "We've earned €20.000,00 last night."
Set rgex = New RegExp
rgex.Pattern = "[0-9].*[0-9]"
Set colMatches = rgex.Execute(myValue)
For Each objMatch In colMatches
myValue = objMatch.Value
MsgBox myValue 'shows "20.000,00"
Next
在此之后,我已经追踪了","带符号"左"功能
Dim decSym As String
decSym = Left(Right(myValue, 3), 1)
MsgBox decSym 'shows ","