Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/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中解析这种特定类型的数据?_Vba_Excel_Parsing - Fatal编程技术网

如何在excel VBA中解析这种特定类型的数据?

如何在excel VBA中解析这种特定类型的数据?,vba,excel,parsing,Vba,Excel,Parsing,我有一系列不同的工程测量数据,格式如下: 77.170(+/-0.025) 我需要把它分成第一个数字,这是标称值,括号里的数字,公差。不确定如何在excel VBA中执行此操作。我想我会使用带有空格分隔符的Split函数,给我第一个数字,然后是不必要的字符,然后是公差,但是公差将包括一个括号。我怎样才能去掉那个括号,我刚才的建议会奏效吗?谢谢 使用文本编辑列和公式 转到数据--->文本到列。选择delimited并选择空格作为分隔符。这会将文本字符串拆分为如下内容: ColA |ColB|Co

我有一系列不同的工程测量数据,格式如下:

77.170(+/-0.025)


我需要把它分成第一个数字,这是标称值,括号里的数字,公差。不确定如何在excel VBA中执行此操作。我想我会使用带有空格分隔符的Split函数,给我第一个数字,然后是不必要的字符,然后是公差,但是公差将包括一个括号。我怎样才能去掉那个括号,我刚才的建议会奏效吗?谢谢

使用文本编辑列和公式

转到数据--->文本到列。选择delimited并选择空格作为分隔符。这会将文本字符串拆分为如下内容:

ColA  |ColB|ColC
77.170|(+/-|0.025)
C列有点古怪,所以让我们抓住所有东西,除了最后一个字符

在D栏中写下:

=LEFT(C1,LEN(C1)-1)
最后,你应该得到:

ColA  |ColB |ColC  |ColD |
77.170|(+/- |0.025)|0.025|

我将使用instr()和mid的组合来获得您所需要的。比如说

measurments="77.170 (+/- 0.025)"
mid(measurements,1,instr(measurements," "))
trim(mid(measurements,instr(measurements,"-")+1,instr(measurements,")")-instr(measurements,"-")-1))
或者,结合起来

measurments="77.170 (+/- 0.025)"
mid(measurements,1,instr(measurements," ")) & " " & trim(mid(measurements,instr(measurements,"-")+1,instr(measurements,")")-instr(measurements,"-")-1))
考虑:

Sub dural()
    s = "77.170 (+/- 0.025)"
    s2 = Replace(Replace(Replace(s, " ", ""), "+/-", ""), ")", "")
    ary = Split(s2, "(")
    MsgBox ary(0) & vbCrLf & ary(1)
End Sub

尝试使用,Right()的组合


使用“IntR”获取“()”的索引/位置,然后使用左和右提取字符。如果要将最终数据作为一个加倍或长使用的CDBL()或Cng-(),则使用常规表达式考虑从其他文本中获取文本的

< P>。 要在VBA中使用它们,您需要参考“VBScript\u RegExp\u 55”库

您之所以希望这样做,是因为下面的代码返回文本中显示的前两个数字(可以修改为更智能的数字),而不考虑文本周围的其他文本

Dim Regex As RegExp
Dim Matches As MatchCollection

Set Regex = New RegExp
Regex.Pattern = "\d*\.\d*"
Regex.Global = True

Set Matches = Regex.Execute("77.170 (+/- 0.025)")

MsgBox (Matches(0).Value & " " & Matches(1).Value)

假设s是您的测量字符串,以下是最直接的方法:

v = Split(Left(s, Len(s) - 1), " (+/- ")

就是这样。现在v(0)代表标称值,v(1)代表公差。

您需要
77.170(+/-0.025)
变为
77.170+/-0.025
对吗?标称值和公差是否在同一个单元格中?结果应该在1或2个单元格中?不,我想在VBA中将其分为两个不同的变量,其中一个变量仅为第一个数字,第二个变量仅为第二个。我不需要+/-来做任何事情。很抱歉,这是在VBA中NeCube。请考虑我建议的改进。谢谢,这可能会起作用,但是我不能改变我正在处理的文档。我需要把它存储在变量中,这样我就可以操作它并在一个单独的工作簿上使用它。这会改变文档的信息,不是吗?很棒的答案!我想这可能对我有用,谢谢!