Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5 / 13331 ツリー ←次へ | 前へ→

【81002】サーバー内にあるフォルダとファイル名を出力 Romi 19/7/6(土) 21:02 質問[未読]
【81003】Re:サーバー内にあるフォルダとファイル名... γ 19/7/6(土) 21:49 回答[未読]
【81004】Re:サーバー内にあるフォルダとファイル名... Romi 19/7/7(日) 16:37 発言[未読]
【81012】Re:サーバー内にあるフォルダとファイル名... Romi 19/7/8(月) 21:09 質問[未読]
【81015】Re:サーバー内にあるフォルダとファイル名... γ 19/7/9(火) 7:04 発言[未読]
【81019】Re:サーバー内にあるフォルダとファイル名... Romi 19/7/9(火) 20:59 発言[未読]
【81026】Re:サーバー内にあるフォルダとファイル名... γ 19/7/17(水) 7:08 発言[未読]

【81002】サーバー内にあるフォルダとファイル名を...
質問  Romi  - 19/7/6(土) 21:02 -

引用なし
パスワード
   サーバー上にある、フォルダ内のファイル名を一括で出したいです。

Sub Call_GetFileList()

  GetFileList03 "C:\Program Files"
  
End Sub

Sub GetFileList03(Search_Path)
Dim objFs As Object, objFiles As Object, objFolders As Object
Dim File_Path As String, File_Name As String
Dim i As Long, arrData
'処理が遅くなるのでプログラム実行中の画面描画を停止する
Application.ScreenUpdating = False
Set objFs = CreateObject("Scripting.FileSystemObject")
  'パスの取得
  For Each objFolders In objFs.GetFolder(Search_Path).SubFolders
    'サブフォルダまで検索するために再帰実行
    GetFileList03 objFolders.Path
  Next
  
  'ファイル名の取得
  For Each objFiles In objFs.GetFolder(Search_Path).Files
    '\マークを区切り文字として各文字列を配列に代入
    arrData = Split(objFiles.Path, "\")
    
    'セルに配列の各値を書き込む
    For i = 0 To UBound(arrData)
      ActiveCell.Offset(0, i).Value = arrData(i)
    Next i
    
    ActiveCell.Offset(1, 0).Select   
  Next
  
End Sub


ところが、これだとただ文字を羅列するだけで、少々見づらいです。
なので、フォルダごとに上手く結合とか罫線をつけて見やすいレイアウトに出来ないものでしょうか?すいません、上手く表現が出来なくて。。

【81003】Re:サーバー内にあるフォルダとファイル...
回答  γ  - 19/7/6(土) 21:49 -

引用なし
パスワード
   こちらの記事を参考にして研究して下さい。
ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
 ↑わざとスペースを入れています。とってジャンプしてください。

【81004】Re:サーバー内にあるフォルダとファイル...
発言  Romi  - 19/7/7(日) 16:37 -

引用なし
パスワード
   γさん

ありがとうございます。
ちょっと試してみます。

進捗は後ほど書きます。

【81012】Re:サーバー内にあるフォルダとファイル...
質問  Romi  - 19/7/8(月) 21:09 -

引用なし
パスワード
   γさん

一応完成したのは良いのですが、
これにファイル名の後ろに更新日とサイズを表記するにはどうしたら良いでしょうか・・?基本的なことで申し訳ありません。
ご教授願います。

'//ワークブックオープンでフォルダ選択ダイアログを表示
Private Sub Workbook_Open()
  With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = True Then
      ファイル一覧 .SelectedItems(1)
    End If
  End With
End Sub

'//選択されたフォルダのファイル一覧を取得するプロシージャをコール
Sub ファイル一覧(ByVal folpath As String)  
  '全て(数式、文字列、書式、コメント、アウトライン)クリア
  Cells.Select
  Selection.Clear
  '列の幅、フォントサイズをセット
  Selection.ColumnWidth = 4
  Selection.Font.Size = 9
  Range("A1").Select
  'ファイル一覧をサブフォルダまで取得して表示する
  Application.ScreenUpdating = False
  Call ファイル一覧を取得(folpath, 1, 0)
  Application.ScreenUpdating = True
  '終了メッセージ
  MsgBox "おわりました", vbInformation
End Sub

'//ファイル一覧を再帰的に取得してシートに表示する
'//引数 gyo:出力開始行番号
'//   clm:出力開始列番号(1列目からの相対値)
Sub ファイル一覧を取得(ByVal folpath As String, ByRef gyo As Long, ByVal clm As Integer)
  Dim buf As String
  Dim fol As Object
  'ルートフォルダを表示
  Cells(gyo, 1) = "【" & CStr(gyo) & "】"
  Cells(gyo, 2 + clm) = folpath
  gyo = gyo + 1
  'ファイル一覧を取得
  buf = Dir(folpath & "\*.*", vbNormal)
  Do While buf <> ""
    Cells(gyo, 1) = "【" & CStr(gyo) & "】"
    Cells(gyo, 2 + clm) = ""
    Cells(gyo, 2 + clm + 1) = buf
    gyo = gyo + 1
    buf = Dir()
  Loop
  'サブフォルダからファイル一覧を取得
  With CreateObject("Scripting.FileSystemObject")
    For Each fol In .getFolder(folpath).SubFolders
      Call ファイル一覧を取得(fol.Path, gyo, clm + 1)
    Next fol
  End With
End Sub

【81015】Re:サーバー内にあるフォルダとファイル...
発言  γ  - 19/7/9(火) 7:04 -

引用なし
パスワード
   >一応完成したのは良いのですが、
ご自分で作成したように書いていますが、
ht tp://pg-sample.sagami-ss.net/?eid=1
こちらのコードをコピペしただけですよね。

更新日時とサイズについては、
フルパスに対して、FileDateTime,FileLenというVBAに組込の関数を
使えば可能です。難しくも無いので、コードは示す必要もないでしょう。

ところで、私が紹介した井上さんのサイト記事は読んだのでしょうか?
更新年月日とサイズも表示するサンプルになっています。
それを参考にする積もりはないのですか?

もっとも、井上さんのコードをそのまま使ってなにか支障ありますか?
もともとフリーソフト大賞に選ばれた
ht tp://www.asahi-net.or.jp/~ef2o-inue/download/sub09_010.html
の簡易版でもあるので、そのまま使用しても全く問題ないはずです。

# 紹介したコードにある機能を参考にすることなく、
# 出典を隠した別の他人作成のコードに、機能追加してくれとか、
# 質問にあたっての取り組み方がちょっと安直過ぎませんか?
# 少なくとも出典を明示すべきでしょう。
# それが作者に対する礼儀でもあるでしょう。

【81019】Re:サーバー内にあるフォルダとファイル...
発言  Romi  - 19/7/9(火) 20:59 -

引用なし
パスワード
   γ さん

大変失礼いたしました。
ローカルルールを失念しておりました。
ご参考にいただいたサイト記事は拝見いたしました。
しかし、途中で上手く起動しなくて断念しました・・
(確か「ファイルパスが見当たりませんと出ました」)
ゆえに別のコードを使った次第です。
この度は大変失礼なことをしたことをお詫び申し上げます。

【81026】Re:サーバー内にあるフォルダとファイル...
発言  γ  - 19/7/17(水) 7:08 -

引用なし
パスワード
   もう読んでいないでしょうけど、
一応コメントしておきます。

>ローカルルールを失念しておりました。
ローカルルールとはVBA質問箱基本ポリシーのことでしょうけど、
どの箇所を指していますか?

他人のコードをさもご自分が書いたかのように発言するのは、
ここだけのローカルルールでもなんでもありませんよ。
大げさにいえば、信義則違反です。

最初の質問もネット上の記事の無断引用ですね。URLは敢えて書きませんが。
これは著作権法違反の状態です。

基本ポリシーでは、引用にあたって著者の承諾をとれと言っていますが、
実際上は、出典が明記されていれば、違反を問われることはなかろうと
想像はします。
単に、こちらのサイト運営者のディスクレーマーと見て良いでしょう

なお、私の回答も他人のコードの紹介という手抜きなので
50歩100歩かもしれませんが、
URLの引用は原則として著作権法違反にはなりません。



> ご参考にいただいたサイト記事は拝見いたしました。
> しかし、途中で上手く起動しなくて断念しました・・
> (確か「ファイルパスが見当たりませんと出ました」)
> ゆえに別のコードを使った次第です。

別のサイトの記事を引用するまえに、
上記の点についてコメントを返していただければよかったですね。

InputBoxを使った最初のコードのことを言っているのでしょうけど、
それは単に入力を誤った可能性があるでしょう。
そもそも、それは結果表示に何の工夫もしていないので、注目するものではありません。

最後にある「つなぎ線」を使ったものに注目して欲しかったのです。
それはダイアログを使ってフォルダを選択するものですから、
間違いようがないはずです。(ネットワーク上のものも対象です。)

# つなぎ線を入れる処理は結構むずかしいです。
# 自力で到達するのはベテランでも手を焼くものかと思います。
# 一行一行理解することはとても有益なものではあります。
# たぶんあなたの目的は単に使うことでしょうけど。

5 / 13331 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free