数据库中有8k行需要分开价格并将其插入D列。请检查屏幕截图 有什么公式吗??
答案 0 :(得分:0)
需要更多示例,但您可以在D列中使用UDF,或者循环E列占用的单元格并将函数应用于E列的值,然后将结果输出到D列。以下有很多假设,包括您只想要第一场比赛。它应用一个正则表达式(应用于单元格文本的搜索模式),以从Rs.
开始,然后是1个或多个数字,然后是可选的"."
和其他可选数字,来寻找合格的费用数据。
VBA:
Option Explicit
Public Sub TransferCosts()
Dim arr(), i As Long
With Worksheets("Sheet1")
arr = .Range("E1:E14").Value
ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 1))
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 2) = arr(i, 1)
arr(i, 1) = GetCost(arr(i, 1))
Next i
.Range("D1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Sub
Public Function GetCost(ByVal inputString As String) As String
Dim arr() As String, i As Long, matches As Object, re As Object
Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = "\bRs\.\d+(\.[^\s]\d+)?\b"
If .test(inputString) Then
GetCost = .Execute(inputString)(0)
Else
GetCost = vbNullString
End If
End With
End Function
正则表达式:
完整说明:
模式:
/
\bRs\.\d+(\.[^\s]\d+)?\b
/
gm
{\b
断言在单词边界(^\w|\w$|\W\w|\w\W
)上的位置
Rs
从字面上匹配字符Rs
(区分大小写)
\.
从字面上匹配字符.
(区分大小写)
\d+
匹配一个数字(等于[0-9]
)
“ +
”量词-匹配一次和无限次,并尽可能多地匹配,并根据需要返回(贪婪)
第一捕获组(\.[^\s]\d+)?
?
量词-匹配0至1次,并尽可能多地匹配,并根据需要返回(贪婪)
\.
从字面上匹配字符.
(区分大小写)
匹配[^\s]
下面的列表中不存在的单个字符
\s
匹配任何空白字符(等于[\r\n\t\f\v ]
)
\d+
匹配一个数字(等于[0-9]
)
{\b
断言在单词边界(^\w|\w$|\W\w|\w\W
)上的位置
参考:
Shiffman在以下关于正则表达式的精彩YouTube视频 The Coding Train