如何提取数据

我在Excel中有这个问题,我需要从一个如下所示的string中提取数据。 以下数据全部在单独的行上。 我试图只提取斜线之间的数据,如x/y/z/a/b/c格式,并忽略前面的其余数据。 希望这个问题可以用vba解决。

一个例子:

s1 167.4/164.2/172.0/165.8/162.5/165.6 s2 163.6/164.1/167.2/167.1/165.6/167.6 S#1:0.1682/0.1646/0.1641/0.1653/0.1622/0.1642 S#2:0.1623/0.1621/0.1667/0.1680/0.1667/0.1643 s24=1903/1881/1873/1903/1915/1891 s25=1872/1858/1904/1879/1854/1868 SLOT 24:0.2031/0.1991/0.1959/0.1989/0.1987/0.2051 SLOT 25:0.2014/0.2019/0.2014/0.2033/0.2001/0.2017

看看这个:

 Public Sub RegExpExample() Dim rng As Range Dim c As Variant, arr As Variant Dim k As Long Dim regEx As Object Dim Match, Matches ' Uses late binding so no need to add references Set regEx = CreateObject("VBScript.RegExp") ' Change this to match your range where your values are With Sheet2 Set rng = .Range(.Cells(1, 1), .Cells(8, 1)) End With ' Declare RegEx parameters With regEx .Pattern = "(?:\d*\.)?\d+" .IgnoreCase = True .Global = True End With ' Loop through each row For Each c In rng Set Matches = regEx.Execute(c) If Matches.Count > 0 Then ReDim arr(1 To Matches.Count) k = 1 For Each Match In Matches arr(k) = Match k = k + 1 Next Match ' Print back to worksheet Range(c.Offset(0, 1), c.Offset(0, UBound(arr))) = arr End If Next c End Sub 

您必须决定如何处理返回的第一列值,或者等到有人用RegEx更好地提供答案

正则expression式将是最健壮的答案。

一个自定义的VBA函数是必需的,一个expression式来覆盖你的需求。

详细指南: 如何在Microsoft Excel中使用正则expression式(正则expression式)in-cell和loops

您可以使用的正则expression式可能是:(?:\ s |:| =)。*

即查找第一空间或第一:或先=,然后select一切后。