如何从excel宏

时间:2018-05-14 17:03:08

标签: excel-vba excel-formula excel-2010 vba excel

我是新手 - 尝试从连接的文本字符串中提取名称和日期 - 每行都有一个月份名称 - 所有都不同,每个搜索都必须更改月份。
[附件是我使用MID提取日期的结果的截图] [1]

我尝试使用逗号左边的第一个大写字母进行MID和RIGHT,但没有运气。 任何帮助将不胜感激。

我有一个处理数据的脚本 - 以下是用于提取名称和日期的VBA代码: 名称     ActiveCell.Formula =“= IFERROR(MID(C3,1,FIND(”“January”“,C3,1)-1),IFERROR(MID(C3,1,FIND(”“February”“,C3,1) -1),IFERROR(MID(C3,1,FIND( “” 月 “”,C3,1)-1),IFERROR(MID(C3,1,FIND( “” 四月 “”,C3,1)-1 ),IFERROR(MID(C3,1,FIND( “” 可能 “”,C3,1)-1),IFERROR(MID(C3,1,FIND( “” 月 “”,C3,1)-1), IFERROR(MID(C3,1,FIND( “” 七五 “”,C3,1)-1),IFERROR(MID(C3,1,FIND( “” 八一 “”,C3,1)-1),IFERROR( MID(C3,1,FIND( “” 九月 “”,C3,1)-1),IFERROR(MID(C3,1,FIND( “” 十月 “”,C3,1)-1),IFERROR(MID( C3,1,FIND(“”11月“,”C3,1)-1),IFERROR(MID(C3,1,FIND(“”12月“,”C3,1)-1),“”不匹配“” ))))))))))))“

日期     ActiveCell.Formula =“= IFERROR(MID(C3,FIND(”“January”“,C3)* 1,20),IFERROR(MID(C3,FIND(”“February”“,C3)* 1,20), IFERROR(MID(C3,FIND( “” 月 “”,C3)* 1.20),IFERROR(MID(C3,FIND( “” 月 “”,C3)* 1.20),IFERROR(MID(C3, FIND( “” 可能 “”,C3)* 1.20),IFERROR(MID(C3,FIND( “” 月 “”,C3)* 1.20),IFERROR(MID(C3,FIND( “” 七月” ” C3)* 1.20),IFERROR(MID(C3,FIND( “” 八一 “”,C3)* 1.20),IFERROR(MID(C3,FIND( “” 九 “”,C3)* 1 ,20),IFERROR(MID(C3,FIND( “” 十月 “”,C3)* 1.20),IFERROR(MID(C3,FIND( “” 月 “”,C3)* 1.20),IFERROR( MID(C3,FIND( “” 月 “”,C3)* 1,20) “” 没了 “”))))))))))))“

我确信有一种更简单的方法 - 我只是没想出来,而且我被迫要求获取这些数据 -

![1]:https://i.stack.imgur.com/dT92Q.jpg

1 个答案:

答案 0 :(得分:0)

Here are two User Defined Functions:

Public Function DateGrabber(s As String) As Date
    Dim temp As String, temp2 As String, i As Long, L As Long
    temp = s
    temp2 = ""
    L = Len(s)
    For i = L To 1 Step -1
        temp2 = Mid(temp, i, 1) & temp2

        If Mid(temp, i, 1) Like "[A-Z]" Then
            DateGrabber = CDate(temp2)
            Exit Function
        End If
    Next i
End Function


Public Function DateDiscarder(s As String) As String
    Dim i As Long, L As Long
    L = Len(s)
    For i = L To 1 Step -1
        If Mid(s, i, 1) Like "[A-Z]" Then
            DateDiscarder = Left(s, i - 1)
            Exit Function
        End If
    Next i
End Function

This first function walks backwards from the end of the string until it finds the first capital letter. That is how it finds the date part.

The second UDF just discards the date using the same criteria:

enter image description here