web-dev-qa-db-ja.com

バイト単位でファイルサイズを返すVBA Excel関数

Excel 2010でVBAを使用して、同じフォルダーまたは別のフォルダーにあるいくつかのファイルのファイルサイズを返したいのですが。

13
xmux

ここでそれをExcelセルで使用する方法:

 =GetDirOrFileSize("C:\Users\xxx\Playground\","filename.xxx")

ドイツ語版のWindowsをお持ちの場合:

=GetDirOrFileSize("C:\Users\xxx\Playground\";"filename.xxx")

VBAモジュールの機能は次のとおりです(開発者ツールを有効にして、これをコピーして新しいモジュールに貼り付けます)。

Function GetDirOrFileSize(strFolder As String, Optional strFile As Variant) As Long

'Call Sequence: GetDirOrFileSize("drive\path"[,"filename.ext"])

   Dim lngFSize As Long, lngDSize As Long
   Dim oFO As Object
   Dim oFD As Object
   Dim OFS As Object

   lngFSize = 0
   Set OFS = CreateObject("Scripting.FileSystemObject")

   If strFolder = "" Then strFolder = ActiveWorkbook.path
   If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
   'Thanks to Jean-Francois Corbett, you can use also OFS.BuildPath(strFolder, strFile)

   If OFS.FolderExists(strFolder) Then
     If Not IsMissing(strFile) Then

       If OFS.FileExists(strFolder & strFile) Then
         Set oFO = OFS.Getfile(strFolder & strFile)
         GetDirOrFileSize = oFO.Size
       End If

       Else
        Set oFD = OFS.GetFolder(strFolder)
        GetDirOrFileSize = oFD.Size
       End If

   End If

End Function   '*** GetDirOrFileSize ***
14
xmux

これまでに言及されていない、とても素晴らしくシンプルなVBA関数があります FileLen

FileLen("C:\Temp\test file.xls")

ファイルのサイズをbytesで返します。

ディレクトリ内のファイルをループすることと組み合わせて、最初に望んだことを達成することができます(フォルダー内のファイルのサイズを取得します)。

25
ZygD

これは、セミコロン;をパラメーターセパレーターとして使用することに関する質問への回答です。

ポイント/フルストップ.を小数点として使用するローカル(米国など)では、コマ,がリストセパレーターとして使用されます。この場合、VBA関数のパラメーターリストのセパレーターとして使用されます。と手順。

他のローカル(一般的にはDEやヨーロッパなど)では、小数点がコマ,であり、同じ記号をリストセパレーターとして使用すると混乱が生じるため、セミコロン;が使用されます。代わりに

0
user9787014