需要将价格从 E 列合并到 D 列,如 21187 行,
need to merge the price from E column to D column as like 21187 row ,
数据库中有 8k 行需要将价格分开并插入 D column.please 请检查屏幕截图
有公式吗??
check the screenshot
需要更多示例,但您可以在 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+)?
?
量词——在零到一次之间匹配,尽可能多次,按需回馈(贪心)
\.
按字面匹配字符 .
(区分大小写)
匹配下面列表中不存在的单个字符 [^\s]
\s
匹配任何空白字符(等于 [\r\n\t\f\v ]
)
\d+
匹配一个数字(等于 [0-9]
)
\b
在单词边界断言位置 (^\w|\w$|\W\w|\w\W
)
参考文献:
Shiffman 的一些关于正则表达式的精彩 YouTube 视频
The Coding Train
数据库中有 8k 行需要将价格分开并插入 D column.please 请检查屏幕截图 有公式吗??
check the screenshot
需要更多示例,但您可以在 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+)?
?
量词——在零到一次之间匹配,尽可能多次,按需回馈(贪心)
\.
按字面匹配字符 .
(区分大小写)
匹配下面列表中不存在的单个字符 [^\s]
\s
匹配任何空白字符(等于 [\r\n\t\f\v ]
)
\d+
匹配一个数字(等于 [0-9]
)
\b
在单词边界断言位置 (^\w|\w$|\W\w|\w\W
)
参考文献:
Shiffman 的一些关于正则表达式的精彩 YouTube 视频 The Coding Train