初めまして。プログラミング初心者です。
【実行したい処理】
①フォルダを選択
②フォルダ内のパスを取得し配列に格納
⇒「sh」が含まれないもの(.logのもののみ)取得したい
③格納した配列を使用しテキストファイルを1行ずつ読み込む
現在②の処理で躓いてしまっています。
for文内でMsgBoxを指定すると正しくすべてのファイルのパスが表示されるのですが、
for文の外だと最初の1件しかパスが表示されないのです。
この後、配列として処理を追記したいのですがどこをどうしたらいいのかわかりません。
初歩的な質問で申し訳ありませんが教えていただけますと幸いです。
よろしくお願いします。
Sub ファイルパスの取得() ' '【変数の宣言】 ' Dim FSO As Object Dim Folder As Variant Dim File As Variant Dim FilePath As Variant 'フォルダ指定用のダイアログを表示します With Application.FileDialog(msoFileDialogFolderPicker) 'カレントディレクトリを指定します .InitialFileName = ThisWorkbook.path '設定しなかったら終了します If .Show = False Then Exit Sub '設定したフォルダを表示します 'Dim Fname Fname = .SelectedItems(1) End With '参照設定 'Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") 'Dim FilePath As Variant ReDim FilePath(1 To 200) '指定フォルダ内の.logファイルを探索します i = 0 For Each File In FSO.GetFolder(Fname).Files If InStr(File.Name, "sh") > 0 Then Else If InStr(File.Name, ".log") > 0 Then i = i + 1 FilePath(i) = File.path 'ファイルのフルパスを取得 'ここで設定したMsgBoxは正しく表示される 'MsgBox FilePath(i) End If End If Next MsgBox FilePath(i) End Sub
> for文内でMsgBoxを指定すると正しくすべてのファイルのパスが表示されるのですが、for文の外だと最初の1件しかパスが表示されないのです。この後、配列として処理を追記したいのですがどこをどうしたらいいのかわかりません。
forループ内で配列を生成すれば良いのではないでしょうか?
for文内で
FilePath(i) = File.path 'ファイルのフルパスを取得
と指定しているため、ループ内で配列を生成している気でいたのですが
これでは生成できていないのでしょうか?
FilePathは配列になっているけど、そのコードだとMsgBoxの行は1回しか動かないというだけでは。
(iの値はその直前のForループで最後のファイルの時にセットされた値になっている)
ちなみに、.log は、画像のように後ろに日付などがついていても処理対象にするのでしょうか。
〜.log は対象とするが 〜.log.20xx-xx-xx のようなファイルは除きたいということなら、修正が必要だと思います。
for文内でMsgBoxを設定すると正しく4件のパスが表示されるのですが、
どうやったらfor文の外でこの配列を使用することができるのでしょうか?
コードのどこを修正したらいいのでしょうか...。
〜.log 、 〜.log.20xx-xx-xx ともに対象としています。
> FilePath(i) = File.path 'ファイルのフルパスを取得と指定しているため、ループ内で配列を生成している気でいたのですが
すみません。見落としていました。
iの値を変化させれば配列にアクセスできるかと思いますよ。
すみません。iの値を変化させて配列にアクセスというのがよくわからなくて…
もしよろしければ教えていただけますでしょうか?
回答2件
あなたの回答
tips
プレビュー