Scribbled Black Note

運用系31歳

Excel VBAでファイル名と更新日時を取得する(Forfiles)

Excel VBAでファイル名と更新日時を取得する

ファイル名と更新日時を取得する。
VBAからコマンドを実行し、標準出力を変数に取得して二次元配列に加工する。
FilesSystemObjectを使用すると取得に時間がかかる場合に有効かもしれない。

サンプルコード

以下の値をマクロとしてexcelに登録して使用。

Sub forfiles_call()
Dim filepath, sCmd, listLength, cmdRslt, titleAndModifyTime, ListArray()


'パスを格納
filepath = "z:\Doc"

'shellオブジェクトを作成
Set WSH = CreateObject("WScript.Shell")

'forfilesコマンドで、対象ディレクトリのファイル名と更新日時を取得
sCmd = "forfiles /p " & filepath & " /c ""cmd /c echo @isdir:@file,@fdate @ftime"""

'コマンドを実行
Set wExec = WSH.Exec("%ComSpec% /c " & sCmd)
    Do While wExec.Status = 0
        DoEvents
    Loop

'コマンド実行結果を格納
cmdRslt = wExec.StdOut.ReadAll

'コマンド実行結果からダブルクオテーションを削除、split関数で一次元配列に変換
titleAndModifyTime = Split(Replace(cmdRslt, """", ""), vbCrLf)

'リストの件数を格納
listLength = UBound(titleAndModifyTime)

'リストの件数をもとに、配列のサイズを確定
ReDim ListArray(1 To listLength, 1 To 2)

'配列の現在行
k = 1

'一次元配列から二次元配列に変換、1件づつ処理
For Each Item In titleAndModifyTime

    '「空欄ではない」場合のみ処理実施
    If Not (Item = "") Then
        ' 「フォルダでは無い」場合のみ処理実施
        If Left(Item, 5) = "FALSE" Then

        '一次元配列のカンマより左を二次元配列の1列目に追加
        ListArray(k, 1) = Mid(Item, 7, InStr(Item, ",") - 7)

        '一次元配列のカンマより右を二次元配列の2列目に追加
        ListArray(k, 2) = Mid(Item, InStr(Item, ",") + 1, Len(Item))

'       Excel2007ではInStrRevのバグでうまく検索されない為、以下を使用しなかった
'       ListArray(k, 2) = Right(Item, InStrRev(Item, ",", -1, vbTextCompare) - 1)

        '空欄でない場合のみ二次配列を次行へすすめる
        k = k + 1
        End If
    End If
Next

'結果をセルに貼り付け
Range(Cells(1, 1), Cells(listLength - 1, 2)).Value = ListArray


'Setしたオブジェクトの解放
Set WSH = Nothing
Set wExec = Nothing


End Sub

サンプルコードに含まれる要素

・forfilesコマンドでファイル/フォルダの判別、ファイル名と更新日時の取得(FileSystemObject未使用)
VBAからコマンドを実行
・標準出力を変数へ取得 ・変数を二次元配列へ格納
・多次元配列をセルへ一括貼り付け

参考URL

Exec メソッド - MSDN - Microsoft
Forfiles - TechNet - Microsoft
Split 関数 - MSDN - Microsoft
Mid 関数 - MSDN - Microsoft

VBScriptでラジオボタンから値を取得する方法

VBScriptラジオボタンから値を取得する方法

ラジオボタンから値を取得するスクリプトのサンプル。
使用するスクリプトは、要件によりVBSを使用。

サンプルコード

以下のコードをhtaファイルとして保存する。

<html>
<head>
    <title>ラジオボタンから値を取得するサンプルプログラム</title>

    <script language="VBScript">
    Sub getValue()
        'ラジオボタンの値を取得
        For i = 0 To document.form1.rdb.length - 1
            if document.form1.rdb(i).checked then
                choiced = document.form1.rdb(i).value
            end if
        Next

        'テキストボックスに値を返す
        document.form1.result.value = "ラジオボタンの値は" & choiced & "番目" & vbcr

    End Sub
    </script>
</head>

<body>
<form name="form1">
    <p>値の選択<br>
        <input type="radio" name="rdb" value="1"/>1番目<br>
        <input type="radio" name="rdb" value="2" checked />2番目<br>
        <input type="radio" name="rdb" value="3" />3番目<br>
    </p>
    <p>値の取得<br>
        <input type="button" value="script実行" onClick="getValue()" />
    </p>
    <p>値の表示<br>
        <textarea name="result" cols="30" rows="10"></textarea>
</form>
</body>
</html>