2016-08-08 1 views
0

오하이오의 2015 년 1 월 데이터에는 "OhioSalesRevenueData1-2015"이고 2015 년 12 월 알라바마의 12 월 데이터에는 "AlabamaSalesRevenueData12-2015"입니다. 매크로의 스프레드 시트가 많은 경우 해당 월의 숫자를 열에 넣을 것입니다. 현재 내 매크로는 다음과 같습니다.VBA에서 파일 이름 "MM-YYYY"의 부분을 추출 하시겠습니까?

 Range("X2").Select 
     ActiveCell.FormulaR1C1 = "1" 

그러나 이것은 1 월 스프레드 시트에서만 작동합니다. 모든 달 스프레드 시트의 달을 가져 오려면 "1"을 교체해야합니다. 이것을 할 수있는 방법이 있습니까? 고맙습니다.

+0

파일 및 폴더 이름을 검색하려면 'Dir'또는 'FileSystemObject' 메소드를 사용하십시오. 그런 다음 UDF (User Defined Function)를 작성하여 숫자가 아닌 선도 문자열을 제거하십시오. 또는'Split (파일 이름, "RevenueData") (1)'을 사용하십시오. 다양한 방법을 사용할 수 있습니다. – PatricK

+1

정규 표현식을 사용하여 mm-yyyy 부분을 추출합니다. 문제를 재현 할 수 있도록 코드 나 데이터 예제를 충분히 자세하게 제공하지 않아서이를 코드와 통합하는 방법은 불가능합니다. [좋은 질문을하는 법]에 대한 도움말 페이지 (http://stackoverflow.com/help/how-to-ask)를 읽으십시오. 및 [예제 제공 방법] (http://stackoverflow.com/help/mcve) –

답변

0

특정 파일 이름에서 달을 결정하려고한다고 가정합니다. 그래서, 당신의 이름을 가정하는 변수 f이며, 모든 파일 이름은 단어 RevenueData를 포함 (및 경로가하는 하지RevenueData를 포함)하는 경우

, 다음과 같은 작업을해야합니다 :

f = "abcdefRevenueData12-2015.xlsx" 'For demonstration purposes 

If Mid(f, InStr(f, "RevenueData") + 12, 1) = "-" Then 
    Range("X2").Value = CInt(Mid(f, InStr(f, "RevenueData") + 11, 1)) 
ElseIf Mid(f, InStr(f, "RevenueData") + 13, 1) = "-" Then 
    Range("X2").Value = CInt(Mid(f, InStr(f, "RevenueData") + 11, 2)) 
Else 
    MsgBox "Unrecognised filename - " & f 
    End 
End If 
0

하는 경우 물론

IIf(Mid(FileName, Len(FileName) - 6, 2) Like "##", _ 
    Mid(FileName, Len(FileName) - 6, 2), _ 
    Mid(FileName, Len(FileName) - 5, 1)) 

은 또한 간단한 워크 시트 수식을 사용할 수 있습니다 당신이 보여 귀하의 데이터는 다음과 "1"을 대체 할 수있는, 정확하게. 파일 이름이 A1 인 경우 :

=IF(ISNUMBER(-MID(A1,LEN(A1)-6,2)),MID(A1,LEN(A1)-6,2),MID(A1,LEN(A1)-5,1)) 
관련 문제