複数階層にある全ファイルのリストを自動で作成する方法③(Excelマクロで自動整形)

Excel VBA マクロ 時短 方法

t f B! P L

自動ファイルリスト作成の第3段!完結編です☆

先日の記事で、手動でファイルリストを整形しましたが、今回はマクロで自動で整形する方法をご紹介します。イメージ的には、ワンクリックで↓のようになります(^^)

最初にマクロを組むにしても、分からない!という方!大丈夫です!
中身はどうでも良く、上のように整理できれば良い!ってことでしたら、下記2章のコードだけコピペして実行しちゃってください!

それが、一番の時短です😁

また、それぞれ何が書かれているのか?をご覧になりたい方は、それ以降もお読み頂ければ、それぞれのコードの中身を可能な限り分かるように書いてみたので、是非ご覧頂ければと思います👍

複数階層のディレクトリ内のファイル情報を取得する方法

先日、バッチファイルを活用して、複数階層のディレクトリのファイル情報を取得する方法は↓に整理しています😁

下記、記事の[バッチファイル用のコードをコピー] > [テキストファイルにペースト・保存] > [拡張子を『.bat』に変更]>[ダブルクリック]で、ファイル情報を取得できます。
複数階層にある全ファイルのリストを自動で作成する方法①(バッチファイルで情報抽出編)

自動でファイルリストを整形する方法

マクロのコード一式

細かいことは不要で、純粋にコード情報が欲しい方は、

[↓をコピー]>>[Excelを開いて[alt]+[F11](画面がグレーでしたら、[挿入]>>[標準モジュール])]>>[貼り付け]>>[マクロ]>>[実行]で整形完了です!
     Sub 情報の整理()
     '使用する文字の設定--------------------------------------------
      Dim tmp As Variant
      Dim lRow, iCol As Long
      Dim h, i As Long
      Dim hypling As Hyperlink
      Dim str As String
      
     'ココから実施内容----------------------------------------------
     '行数を数える。
      lRow = Cells(Rows.Count, 2).End(xlUp).Row
      
     '不要な情報(行)の削除
       Application.ScreenUpdating = False    '作業中の画像変更無し。
       For i = lRow To 3 Step -1
           If _
             InStr(Cells(i, 2).Value, ".lnk") <> 0 Or _
             InStr(Cells(i, 2).Value, ".db") <> 0 Or _
             InStr(Cells(i, 2).Value, "個のファイル") <> 0 Or _
             InStr(Cells(i, 2).Value, "ドライブ") <> 0 Or _
             InStr(Cells(i, 2).Value, "ボリューム") <> 0 Or _
             InStr(Cells(i, 2).Value, "バイトの空き領域") <> 0 Or _
             InStr(Cells(i, 2).Value, "ファイルの総数") <> 0 Or _
             Cells(i, 2).Value = "" Then
               Range(i & ":" & i).Delete
           End If
       Next i
       
     '不要な文字の削除
      For i = lRow To 3 Step -1
       If InStr(Cells(i, 2).Value, " のディレクトリ") <> 0 Then
         Cells(i, 2).Value = Replace(Cells(i, 2), " のディレクトリ", "")
       End If
      Next i
       
     '文字列の分割
     '空白区切りでセルを分割して定置
      For i = lRow To 3 Step -1
        tmp = Split(Cells(i, 2), " ")
        For h = LBound(tmp) To UBound(tmp)
          Cells(i, h + 2) = tmp(h)
        Next h
      Next i
      
     '不要な空白のセルの削除
      For i = lRow To 3 Step -1
        iCol = Cells(i, Columns.Count).End(xlToLeft).Column
        For h = iCol To 2 Step -1
          If Cells(i, h) = "" Then
            Cells(i, h).Delete shift:=xlToLeft
          End If
        Next h
      Next i
      
     '相対パスでハイパーリンクを設定する場合は、以下をコメント解除
     '(文頭の『'』を削除)
   '   For i = lRow To 3 Step -1
   '     If InStr(Cells(i, 2).Value, ":\") <> 0 Then
   '       str = Cells(i, 2).Value
   '         Cells(i, 2).Value = Replace(Cells(i, 2), Left(str, 3), "")
   '     End If
   '   Next i
      
     '各ディレクトリへのハイパーリンクを設定
      Application.ScreenUpdating = False
      With ActiveSheet.Hyperlinks
        For i = lRow To 3 Step -1
          If InStr(Cells(i, 2).Value, "\") <> 0 Then
            .Add Anchor:=Cells(i, 2), Address:=Cells(i, 2).Value
          End If
        Next i
      End With
      
      Application.ScreenUpdating = True    '作業中の画像再表示。
   End Sub
  

【コード解説】マクロで自動化したいこと。

上記で記述しているコードの内容について解説します。

自動化する上で、何をしたいかと言うと、「抽出したファイルの不用な情報を削除し、ディレクトリが記述されている個所にハイパーリンクを設置」したいと考えました。

ただ、処理をしたい列の中(今回の例で言えばB列)に所々隙間(空白行)があるので、実際何行目まで作業をさせれば良いかが分かり難いので、自動化する作業は、以下としました。

  1. 対象となる行数(最後の少数)を計数する。
  2. 不要な行を削除する。
  3. 不要な文字を削除する。
  4. スペース区切りで文字列を分ける。
  5. ハイパーリンクをつける。

では、ココからそれぞれの作業のコード内容について解説します。

最後の行数を数える

今回のケースでは、行末を数えたい対象に、空白行があるので上から下に検索して、最後の行を抽出しようとすると、最初の空白行の数が抽出されてしまいます。

そこで、マクロで最終行を取得する際には、対象とする列の一番最後の行数から、上方向に検索して最後の行数を抽出します。

使うコードは、以下となります。
      
      lRow = Cells(Rows.Count, 2).End(xlUp).Row
      
    
このコードは、①『Cells(行数,列数)』、②『End(向き)』、③『Row』の3つで構成されていて、
①はあくまでもセルの場所を示していて、②はそこからどの向きに動くか・止まるかを指示し、③行の数を表示する。と言う内容です。

このうち、『Rows.Count』はシートの行数(Excel2007以降であれば、1048576行)、『xlUp』は上向きを示しています。

従いまして、この関数を日本語で訳すとすると…
『Cells(Rows.Count, 2).End(xlUp).Row』
『セルB1048576から上方向に動いて最初に止まった行』

という意味になります。

不要な行を削除する

不要な行は、「『For〜Next』で全ての行を調べ、不用な行に含まれる文字があれば、削除する。」といった作業をします。

具体的には、↓となります。
    
    For i = lRow To 3 Step -1
      If _
        InStr(Cells(i, 2).Value, ".lnk") <> 0 Or _
        InStr(Cells(i, 2).Value, ".db") <> 0 Or _
        InStr(Cells(i, 2).Value, "個のファイル") <> 0 Or _
        InStr(Cells(i, 2).Value, "ドライブ") <> 0 Or _
        InStr(Cells(i, 2).Value, "ボリューム") <> 0 Or _
        InStr(Cells(i, 2).Value, "バイトの空き領域") <> 0 Or _
        InStr(Cells(i, 2).Value, "ファイルの総数") <> 0 Or _
        Cells(i, 2).Value = "" Then
          Range(i & ":" & i).Delete
      End If
    Next i
    
  

これは、情報の載っている最後の行から、上方向に1つずつ検索し、もし(if)、不用な行にある文字が0でなければ(InStr(セルの値, "不要文字") <> 0)、その行を削除する(Range(i & ":" & i).Delete)。

といった内容です。

このコードでは、少しでも記述する行数を減らすために、『Or』で条件を繋いでいます。

不要な文字を削除する

文字を削除する際の書き方は、基本的に行の削除の方法と同じです。

ただ、文字の削除については、『置換』機能を使用します!置換は『Replace(対象セル, "対象文字列", "置換後の文字列")』でできますので、具体的には↓のようなコードです☆
    
      For i = lRow To 3 Step -1
        If InStr(Cells(i, 2).Value, " のディレクトリ") <> 0 Then
          Cells(i, 2).Value = Replace(Cells(i, 2), " のディレクトリ", "")
        End If
      Next i
      
    

空白で文字区切りを実施する

続いては、文字列を空白の場所で区切って、それぞれのセルに分けていこうと思います!

こちらも、全行に実施したいので、For~Nextで記述しますが、具体的には、
  • Split(対象セルの位置, 区切り文字)を使って、分割した文字列(配列)を下記の場合はtmpに保存
  • tmpの文字の数について、LBound、UBound関数を使って抽出し、Forでどこからどこまで記述する必要があるかをExcelに教える
  • その数分だけ、各セルに入れ込む。
といった作業をしていきます。

実際のコードは以下の通りです!
      For i = lRow To 3 Step -1
        tmp = Split(Cells(i, 2), " ")
        For h = LBound(tmp) To UBound(tmp)
          Cells(i, h + 2) = tmp(h)
        Next h
      Next i
     コード

ディレクトリへのハイパーリンクを付ける

続いては、個人的にはこのファイルリストで最も重要なハイパーリンクの設定です!

ハイパーリンクは、Hyperlinks.Add(Anchor:=設定するセルの位置, Address:=設定するURL)で設定できます。

そこで、今回具体的に設定したコードは以下の通りです!
      With ActiveSheet.Hyperlinks
        For i = lRow To 3 Step -1
          If InStr(Cells(i, 2).Value, "\") <> 0 Then
            .Add Anchor:=Cells(i, 2), Address:=Cells(i, 2).Value
          End If
        Next i
      End With
    

マクロ実行ボタンを設置する

ここまででも、全く問題ないのですが、折角ですのでマクロを実行するボタンを設定しましょう

マクロボタンの作り方は、以下のページの3章に記述しています。のでぜひご覧ください☆
実は簡単!?Excelのマクロを使ってみる!!
これで完成です!!

是非とも、完成したマクロボタンをクリックしてみてください☆
1秒前後で以下のように整形されたと思います♪

まとめ

如何でしたでしょうか!

前回、手動での作成方法をご紹介した、ファイルリストについて、マクロでワンクリックで完成する方法をご紹介しました。

このように、マクロを使うと色々と自動化できることが多いので、ぜひトライしてみてください。

また、今もマクロって難しいそう…って感じられているようでしたら、コチラの記事もご覧いただけますと、マクロのイメージも変わるかもしれません\(^o^)/

是非ご覧ください☆

QooQ

Blogger