需要将价格从 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)

Try it


参考文献:

Shiffman 的一些关于正则表达式的精彩 YouTube 视频 The Coding Train