質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

配列に格納したファイルパスをMsgBoxで表示したい

s.s.s.s.
s.s.s.s.

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2回答

0評価

0クリップ

193閲覧

投稿2022/05/24 03:38

編集2022/05/25 01:42

初めまして。プログラミング初心者です。

【実行したい処理】
①フォルダを選択
②フォルダ内のパスを取得し配列に格納
⇒「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

イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

meg_

2022/05/24 03:45

> for文内でMsgBoxを指定すると正しくすべてのファイルのパスが表示されるのですが、for文の外だと最初の1件しかパスが表示されないのです。この後、配列として処理を追記したいのですがどこをどうしたらいいのかわかりません。 forループ内で配列を生成すれば良いのではないでしょうか?
s.s.s.s.

2022/05/24 03:59

for文内で FilePath(i) = File.path 'ファイルのフルパスを取得 と指定しているため、ループ内で配列を生成している気でいたのですが これでは生成できていないのでしょうか?
jinoji

2022/05/24 08:39

FilePathは配列になっているけど、そのコードだとMsgBoxの行は1回しか動かないというだけでは。 (iの値はその直前のForループで最後のファイルの時にセットされた値になっている)
jinoji

2022/05/24 08:42

ちなみに、.log は、画像のように後ろに日付などがついていても処理対象にするのでしょうか。 〜.log は対象とするが 〜.log.20xx-xx-xx のようなファイルは除きたいということなら、修正が必要だと思います。
s.s.s.s.

2022/05/24 10:04 編集

for文内でMsgBoxを設定すると正しく4件のパスが表示されるのですが、 どうやったらfor文の外でこの配列を使用することができるのでしょうか? コードのどこを修正したらいいのでしょうか...。 〜.log 、 〜.log.20xx-xx-xx ともに対象としています。
meg_

2022/05/24 10:13

> FilePath(i) = File.path 'ファイルのフルパスを取得と指定しているため、ループ内で配列を生成している気でいたのですが すみません。見落としていました。 iの値を変化させれば配列にアクセスできるかと思いますよ。
s.s.s.s.

2022/05/24 12:42

すみません。iの値を変化させて配列にアクセスというのがよくわからなくて… もしよろしければ教えていただけますでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。