-1

次のパスとファイル名があるとします。

P:\...\年次および四半期予算データ\ECMQA 2012Q1.xls

次のことを行う if then ステートメントを書きたいと思います (ステートメントが適切に設定されているかどうかわかりません)。

If InStr(1, "P:\...\Annual and Quarterly Budget Data\ECMQA 2012Q1.xls", "QA", vbTextCompare) > 0 Then
    BD.Sheets("Sheet1").Range("C2").value = "2012Q1"
End If

「2012Q1」とだけ入力するのではなく、ファイルから自動で読み込んでほしい。問題は、私が実際に 12 ほどのファイルをループしており、「ECMQA 2012Q1.xls」(または ECMQB 2012Q2.xls など) と「ECM Annual Budget 2012.xlsx」の 2 つのタイプがあることです。

私のファイルが年次ファイルの場合 (ファイルに「年次」が含まれている場合)、次のようにします。

BD.Sheets("Sheet1").Range("C2").value = "2012"

そして、他のファイルと同じように、実際のファイルからこれを読み取ってほしい...「2012」を入力するのではなく

これを行う方法はありますか?

どんな助けでも大歓迎です!

編集:

ループは次のとおりです。

Dim wb As Workbook, sFile As String, sPath As String
Dim itm As Variant
Dim strFileNames  As String

sPath = "C:\Actuary\Cash Flow Forecast\Annual and Quarterly Budget Data\"

''Retrieve the current files in directory
sFile = Dir(sPath)
Do While sFile <> ""
    strFileNames = strFileNames & "," & sFile
    sFile = Dir()
Loop

''Open each file found
For Each itm In Split(strFileNames, ",")
    If itm <> "" Then
        Set wb = Workbooks.Open(sPath & itm)

        ''DO LOTS OF CALCULATIONS

        'wb.Close True
    End If
Next itm
4

2 に答える 2

3

Filesystemobject には、ファイル名からベース名を抽出するメソッドがあります。

Msgbox createobject("scripting.filesystemobject").getbasename("myTest.xlsx") 'myTest
于 2012-09-13T23:12:00.170 に答える
1

split、right、left、mid、さらには正規表現を使用して、必要なものを取得する方法はたくさんあります。それは、可能なソース文字列の構成と、それらに含まれるバリエーションの量に大きく依存します。

あなたの例に基づいて、以下は最後の変数が「2012」を与えるさまざまな操作を示しています

Sub test()

fPath = "P:\...\Annual and Quarterly Budget Data\ECMQA 2012Q1.xls"

fArray = Split(fPath, "\")
fnamewithtext = fArray(UBound(fArray))
fnamewithoutext = Split(fArray(UBound(fArray)), ".")(0)

ifannual = Left(Split(fArray(UBound(fArray)), " ")(1), 4)

End Sub
于 2012-09-13T22:13:55.447 に答える