如何从数组中查找值

时间:2016-12-09 21:10:57

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

我需要帮助来创建VBA / Macro或任何一次性公式来解决我的问题。

我在列中有一些字符串,想要从字符串中找到最后一个日期。

虽然我已经通过应用公式来解决它,但我必须在不同的地方写出3个不同的公式。我的数据如下:

  

验证

Series.isin

我只希望日期是字符串的最后一个

 A2  [UR: 12/6-12/11 det]
 A3  [UR; 11/18-12/11 php]
 A4  [UR: 9/30-10/4 det;iop(m-f)10/26-11/28 php; 11/30-12/21 iop (m-f)]
 A5  [UR; 10/12-10/16 det;11/1-11/27 php; 11/28-12/9 iop (m-f)]
 A6  [UR: 11/11-11/21 rtc; 11/22-11/28 php]
 A7  [UR: 11/8-11/14 det(m-f); 11/15-11/29 rtc; 11/30-12/9 php]

在我的第一步中,我删除了(m-f)我的公式

12/11
12/11
12/21
12/09
11/28
12/09

在我的第二步中,我删除了所有字母。通过应用以下公式。

=IFERROR(LEFT(AE3,FIND("(",AE3,1)-2),AE3)   

在我的第3步

SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(AF3),"a",""),"b",""),"c",""),"d",""),"e",""),"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),"z",""),"(",""),")",""),"",""),"]","")) 

但我仍然需要进行一些手工操作,因为上次日期不是MM / DD形式。

2 个答案:

答案 0 :(得分:0)

这不是一个完整的解决方案,但可能是一个方向

Option Explicit

Function getDates(ByVal myStr As String)

Dim regEx As Object
Dim Matches As Object
Dim Match As Object
Dim sOut As String

    Set regEx = CreateObject("Vbscript.Regexp")
    With regEx
        .Pattern = "[0-9,/,-]"
        .Global = True
        Set Matches = .Execute(myStr)
    End With

    For Each Match In Matches
        sOut = sOut & Match.Value
    Next
    getDates = Trim(sOut)


End Function

Sub Tester()

    Dim sInput As String, sOutput As String

    sInput = Range("A1")
    sOutput = getDates(sInput)

    Debug.Print sOutput
    Debug.Print Right(sOutput, 10)

End Sub

A1应该包含你的字符串

答案 1 :(得分:0)

我根据您的示例更改了我之前回答的代码

Option Explicit

Function getLastDate(ByVal myStr As String)

Const DEL_CHAR = "/"
Const PATTERN = "[0-9,/,-]"
Const TRENNER = "-"

Dim regEx As Object
Dim Matches As Object
Dim Match As Object
Dim sOut As String
Dim sVar As Variant
Dim i As Integer

    Set regEx = CreateObject("Vbscript.Regexp")
    With regEx
        .PATTERN = PATTERN
        .Global = True
        Set Matches = .Execute(myStr)
    End With

    For Each Match In Matches
        sOut = sOut & Match.Value
    Next

    If Right(sOut, 1) = TRENNER Then
        sOut = Left(sOut, Len(sOut) - 1)
    End If

    sOut = Right(Trim(sOut), Len(sOut) - InStrRev(sOut, TRENNER, Len(sOut)))

    sVar = Split(sOut, DEL_CHAR)
    For i = LBound(sVar) To UBound(sVar)
        sVar(i) = Format(sVar(i), "00")
    Next
    getLastDate = Join(sVar, DEL_CHAR)


End Function

Sub Tester()

    Dim sInput As String, sOutput As String

    sInput = Range("A1")
    sOutput = getLastDate(sInput)
    Debug.Print sOutput

End Sub

您也可以在excel文件中将其用作UDF。