2016-12-09 4 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) 

내 두 번째 단계에서는 모든 영문자를 제거했습니다. 아래의 공식을 적용하여. 제 3 단계

RIGHT(AG3,5) 

하지만 아직도 내가 몇 가지 수동 작업을 수행 할 필요가에서

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의 형태이다.

+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로 사용할 수도 있습니다.

관련 문제