6.[PG2]Excelで、ファイル一覧作成し、ファイル名変更してみよう.part3
こちら第6回「プログラマー養成講座」のパート3になります!
目次はこちらからご参照下さい!
ふぅ。では次のお題ですね。
>β.ファイル一覧の出力プログラム仕様(Excel VBA)
ざっと仕様を見た限り、αと内容は殆どおなじだけど、メッセージボックスじゃなくて「ファイル一覧シートに出力」ってところと、「読取ボタンを設置」が大きな違いでしょうか。
検索ワード・・・。いつも悩むのですよね・・・。「VBA ボタン 実行」とかでしょうか?
ふむふむ・・・。Excelの「開発」タブにあるのか・・・。見当たらない・・・!? ひさきのExcelは開発用じゃないから?
ありがとうございます!でてきました!ではでは・・・。
できました!ボタンが作れました!
なんかボタンを作ると「プログラム開発」してる感が出てきて、元気になってきました!
じゃあ、さっきのVBSプログラムを「Private Sub test()」の中にコピペすればいいかな?
どうだろう。
うわぁ、エラーがでた!
うーん? 選択状態になってるから「WScript」がエラーってことなのかな?
そもそも「WScript」ってなんだろう・・・?
なるほど。ありがとうございます!
おー、プログラムが動きました! メッセージ表示もされました!
Option Explicit
Private Sub test()
'宣言
Dim objFileSys
Dim objFolder
Dim objFileDim strMsg
'ファイルシステムを扱うオブジェクトを作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'c:\temp フォルダのオブジェクトを取得
'Set objFolder = objFileSys.GetFolder("C:\temp")
Set objFolder = objFileSys.GetFolder("C:\work\VB")
'初期値設定
strMsg = ""
'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
'WScript.Echo objFile.Name
'strMsg = objFile.Name
strMsg = strMsg & vbLf & objFile.Name
Next
'変数をメッセージ表示
'WScript.Echo strMsg
MsgBox strMsg
Set objFolder = Nothing
Set objFileSys = Nothing
End Sub
プロシージャ
な、なるほど。そういう意味があったのですね。ではPublicに変更すると、読取ボタンから見えるようになるっと・・・。お、でてきました!
質問なのですが、たまに聞くんですけど「マクロ」って、今やってる何かが「マクロを作っている」ことになるんですか?今のtestプロシージャをボタンに設定するのも「マクロの登録」ってメニューからやってるんですけど、間違ってないですよね?
なるほど、わかりました。とりあえず、無事にメッセージボックスではファイル一覧が出力できるようになったので、これをエクセルのシート上に表示するようにプログラムを変更するわけですね。そしたらたぶん
strMsg = strMsg & vbLf & objFile.Name
を変更すればいいんですよね。もう一度、仕様を確認するか・・・。現時点で足りないっぽいのは、以下の3個かな。
これを見る限り「ファイル一覧」シートの作成、とは書いてないので今のシートをそのまま名前変更して大丈夫かな?「Sheet1」を「ファイル一覧」に変更しておこう。(駄目なら止められるだろう…)
あとはセルの位置を変数に保存していけばいいのかな。”A1”、”A2”って足し算していく方法はあるのかな。検索してみるか。
「A1 A2 プログラム」とかかな?
(・・・)
「A1 A2 VBA」のほうがいいかな?
(・・・)
お、これ良さそう!!
Worksheets("Sheet1").Cells(1, 1).Value = "ABC"
Cellsってやつだと"A1"じゃなくて、1,1 とか列も数字で書いてあるのかな?Aが1で、Bが2とかかな? じゃぁ、1個ずつ足し算していけばできるかも!?
Worksheets("Sheet1").Cells(1, 1+1).Value=objFile.Name
あ、たぶんSheet1はシート名かな。そしたらこっちかな。
Worksheets("ファイル一覧").Cells(1, 1 + 1).Value = objFile.Name
ドキドキ。ボタンを押してみよう。えいっ
ううむ?
あ、そうか。値を入れるところは修正したけど、メッセージボックス表示するところが残ってたんだ。何もないメッセージボックスも表示してくれるものなのですね。なんか勝手な思い込みですけど、何もない場合は表示しないのかと思ってました。
納得しました、プログラマーの腕次第ってことですね・・・。
とりあえず、strMsgはもう使わないみたいだし、コメントアウトしておきます。そして、出力する位置が変なところは直さないとですね。
是非お願いしたいです!
Dim i As Integer
i = 1
Do Until Worksheets("ファイル一覧").Cells(i, 1).Value = ""
Worksheets("ファイル一覧").Cells(i, 1).Value = ""
i = i + 1
Loop
当たり前でしょうけど、ちゃんとA1からA10までの文字がリセットされました!
なるほど、セルの位置の数字自体に、変数を使うんですね。
この1を2に変えると、たぶんB列に書くんだよな。
(・・・)
思い通りに動くと面白いかも・・・。ふむふむ・・・。
じゃぁ、これでβの課題、クリアじゃないですかね!?
Option Explicit
Public Sub test()
'宣言
Dim objFileSys
Dim objFolder
Dim objFile
'Dim strMsg
Dim i As Integer
'ファイルシステムを扱うオブジェクトを作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'c:\temp フォルダのオブジェクトを取得
'Set objFolder = objFileSys.GetFolder("C:\temp")
Set objFolder = objFileSys.GetFolder("C:\work\VB")
'初期値設定
'strMsg = ""
i = 1
Do Until Worksheets("ファイル一覧").Cells(i, 1).Value = ""
Worksheets("ファイル一覧").Cells(i, 1).Value = ""
i = i + 1
Loop
'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
i = 1
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
'WScript.Echo objFile.Name
'strMsg = objFile.Name
'strMsg = strMsg & vbLf & objFile.Name
Worksheets("ファイル一覧").Cells(i, 1).Value = objFile.Name
i = i + 1
Next
'変数をメッセージ表示
'WScript.Echo strMsg
'MsgBox strMsg
Set objFolder = Nothing
Set objFileSys = Nothing
End Sub
疲れましたけど、思い通りに動くと楽しかったです!
次回のパート4で「Excelで、ファイル一覧作成し、ファイル名変更してみよう」は完結予定です!
この記事が気に入ったらサポートをしてみませんか?