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>