2016-08-08 11 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(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)) 
関連する問題