2016-12-09 3 views
0

Мне нужна помощь для создания формулы VBA/Macro или любой формулы времени для решения моей проблемы.Как найти значение из массива

У меня есть строка в столбце и вы хотите найти последнюю дату из строки.

Хотя я решаю его, применяя формулу, но мне нужно написать 3 разных формулы в другом месте. Мои данные выглядит следующим образом:

Auth

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 

В моем первом этапе я должен удалить (М.Ф.) моя формула:

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

На моей 3-й стадии

RIGHT(AG3,5) 

Но все-таки я должен выполнить некоторую ручную работу, потому что последний день в не в виде ММ/ДД.

+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.

Смежные вопросы