cTipsのブログ(かぶもーちゃん)

株の自動売買の採用しなかったルールの結果を毎日記録

vbaの防備録

検証作業自体はvbaを走らせるだけなので自動で吐き出される。
集計はイレギュラーを判定するために手動でやっている。
自動でやろうとおもっていたのだが、そのロジックを煮詰めるのが面倒だった。

最近、昔みつけておいたロジックとは別の簡単なのをみつけたので、
つくりなおしてみた。そしたらかなり短くなったので防備として記録しておく。

フォルダー中の特定ファイル名だけをExcelシートに書き出す。

ロジックは単純。シートの特定位置のセルsheet1/c3に対象のパス名文字列と、
抽出するための文字列をsheet1/c5格納しておく。
Excelシートが保存されているパス名文字列(例:d:\folder01\folder02)と
抽出文字列(例:"sheet3")を変数に読み出しておき、
ループ処理でファイル名を順番にセルに書き出す。というものである。


'※下記のプロシージャ内にカーソルを置いて、F5キーを押すと実行される。
Sub ftmp()
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Ws1 As Worksheet: Set Ws1 = Workbooks(ThisWorkbook.Name).Worksheets("Sheet1")
Dim nPath As String: nPath = Ws1.Range("c3")
Dim nName As String: nName = Ws1.Range("c5")
Dim dir As Variant: Set dir = FSO.GetFolder(nPath)
Dim files As Variant: Set files = dir.files
Dim ii As Integer
Dim file As Variant
Set kEntry = CreateObject("Scripting.Dictionary")
ii = 10
Ws1.Range("b10:b31").ClearContents '.Clear '
For Each file In files
If InStr(file.Name, nName) Then
Ws1.Range("b" & ii) = file.Name
ii = ii + 1
End If
Next
End Sub

htmlのインデントのやり方がわからないので、のっぺり表示されてしまった。

wshのCreateObject("Scripting.FileSystemObject")がキモなのかな?
ファイルの扱いがカラ簡単にできる。
検索すると一杯でてくる。どこだか忘れたけど教えてくれたサイトさんに感謝。

以上