2016-12-09 27 views
0

我需要一個幫助來創建一個VBA /宏或任何一個時間公式來解決我的問題。如何從數組中找到值

我在列中有一些字符串,並希望從字符串中找到最後一個日期。

雖然我已經通過應用公式解決了它,但我必須在不同的地方寫出3個不同的公式。我的數據是這樣的:

驗證

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] 

我只想日期是去年串

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

在我的第一步,我必須刪除(MF )我的公式是

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

在我的第二步中,我刪除了所有的字母。通過應用下面的公式。

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",""),"(",""),")",""),"",""),"]","")) 

在我的第三步

RIGHT(AG3,5) 

但我仍必須執行一些手動工作,因爲在最後一天不是在MM/DD的形式。

+0

VBA在這裏絕對有優勢。在']上拆分字符串,然後在每個字符串中找到最後一個'-'的位置。然後在接下來的5個字符。 –

+0

數據全部在一個單元格中嗎?你是否需要將日期返回到單個單元還是單獨的單元? – tigeravatar

+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應該包含您的字符串

+0

謝謝@Storax,但此代碼無法正常工作。我已經更新了我的問題以及我想要的答案。 –

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。

相關問題