需要将价格从E列合并到D列,例如21187行,

时间:2018-08-12 13:52:20

标签: excel excel-formula excel-2007

数据库中有8k行需要分开价格并将其插入D列。请检查屏幕截图 有什么公式吗??

check the screenshot

1 个答案:

答案 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

正则表达式:

regex


完整说明:

模式:

/
\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)上的位置

Try it


参考:

Shiffman在以下关于正则表达式的精彩YouTube视频 The Coding Train