2016-08-08 39 views
0

俄亥俄州2015年1月数据的所有文件名为“OhioSalesRevenueData1-2015”,阿拉巴马州2015年12月的数据为“AlabamaSalesRevenueData12-2015”。我将相应的月份编号放在宏中大量电子表格的列中。现在我的宏是:在VBA中提取文件名“MM-YYYY”的部分?

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

但是,这只适用于1月电子表格。我需要替换“1”以获得所有月份电子表格的月份。有没有办法做到这一点?谢谢。

+0

可以使用'Dir'或'FileSystemObject'方法检索文件和文件夹名称。然后创建一个UDF(用户定义函数)来删除前导非数字字符串。或者使用'Split(filename,“RevenueData”)(1)'。有很多方法可用。 – PatricK

+1

我会使用正则表达式来提取mm-yyyy部分。如何将它与代码集成是不可能的,因为您没有提供足够详细的代码和数据示例来重现您的问题。请阅读HELP页面以了解[如何提出一个好问题](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

如果你的数据是完全一样的告诉你,你可以用下面的替换“1”:

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

当然,你可以使用简单的工作表公式也。使用您的文件名A1

=IF(ISNUMBER(-MID(A1,LEN(A1)-6,2)),MID(A1,LEN(A1)-6,2),MID(A1,LEN(A1)-5,1))