自動ファイルリスト作成の第3段!完結編です☆
先日の記事で、手動でファイルリストを整形しましたが、今回はマクロで自動で整形する方法をご紹介します。イメージ的には、ワンクリックで↓のようになります(^^)
最初にマクロを組むにしても、分からない!という方!大丈夫です!
中身はどうでも良く、上のように整理できれば良い!ってことでしたら、下記2章のコードだけコピペして実行しちゃってください!
それが、一番の時短です😁
また、それぞれ何が書かれているのか?をご覧になりたい方は、それ以降もお読み頂ければ、それぞれのコードの中身を可能な限り分かるように書いてみたので、是非ご覧頂ければと思います👍
先日の記事で、手動でファイルリストを整形しましたが、今回はマクロで自動で整形する方法をご紹介します。イメージ的には、ワンクリックで↓のようになります(^^)
最初にマクロを組むにしても、分からない!という方!大丈夫です!
中身はどうでも良く、上のように整理できれば良い!ってことでしたら、下記2章のコードだけコピペして実行しちゃってください!
それが、一番の時短です😁
また、それぞれ何が書かれているのか?をご覧になりたい方は、それ以降もお読み頂ければ、それぞれのコードの中身を可能な限り分かるように書いてみたので、是非ご覧頂ければと思います👍
複数階層のディレクトリ内のファイル情報を取得する方法
先日、バッチファイルを活用して、複数階層のディレクトリのファイル情報を取得する方法は↓に整理しています😁
下記、記事の[バッチファイル用のコードをコピー] > [テキストファイルにペースト・保存] > [拡張子を『.bat』に変更]>[ダブルクリック]で、ファイル情報を取得できます。
複数階層にある全ファイルのリストを自動で作成する方法①(バッチファイルで情報抽出編)
下記、記事の[バッチファイル用のコードをコピー] > [テキストファイルにペースト・保存] > [拡張子を『.bat』に変更]>[ダブルクリック]で、ファイル情報を取得できます。
複数階層にある全ファイルのリストを自動で作成する方法①(バッチファイルで情報抽出編)
自動でファイルリストを整形する方法
マクロのコード一式
細かいことは不要で、純粋にコード情報が欲しい方は、
[↓をコピー]>>[Excelを開いて[alt]+[F11](画面がグレーでしたら、[挿入]>>[標準モジュール])]>>[貼り付け]>>[マクロ]>>[実行]で整形完了です!
[↓をコピー]>>[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列)に所々隙間(空白行)があるので、実際何行目まで作業をさせれば良いかが分かり難いので、自動化する作業は、以下としました。
では、ココからそれぞれの作業のコード内容について解説します。
自動化する上で、何をしたいかと言うと、「抽出したファイルの不用な情報を削除し、ディレクトリが記述されている個所にハイパーリンクを設置」したいと考えました。
ただ、処理をしたい列の中(今回の例で言えばB列)に所々隙間(空白行)があるので、実際何行目まで作業をさせれば良いかが分かり難いので、自動化する作業は、以下としました。
- 対象となる行数(最後の少数)を計数する。
- 不要な行を削除する。
- 不要な文字を削除する。
- スペース区切りで文字列を分ける。
- ハイパーリンクをつける。
では、ココからそれぞれの作業のコード内容について解説します。
最後の行数を数える
今回のケースでは、行末を数えたい対象に、空白行があるので上から下に検索して、最後の行を抽出しようとすると、最初の空白行の数が抽出されてしまいます。
そこで、マクロで最終行を取得する際には、対象とする列の一番最後の行数から、上方向に検索して最後の行数を抽出します。
使うコードは、以下となります。
①はあくまでもセルの場所を示していて、②はそこからどの向きに動くか・止まるかを指示し、③行の数を表示する。と言う内容です。
このうち、『Rows.Count』はシートの行数(Excel2007以降であれば、1048576行)、『xlUp』は上向きを示しています。
従いまして、この関数を日本語で訳すとすると…
『Cells(Rows.Count, 2).End(xlUp).Row』
『セルB1048576から上方向に動いて最初に止まった行』
という意味になります。
そこで、マクロで最終行を取得する際には、対象とする列の一番最後の行数から、上方向に検索して最後の行数を抽出します。
使うコードは、以下となります。
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』で全ての行を調べ、不用な行に含まれる文字があれば、削除する。」といった作業をします。
具体的には、↓となります。
これは、情報の載っている最後の行から、上方向に1つずつ検索し、もし(if)、不用な行にある文字が0でなければ(InStr(セルの値, "不要文字") <> 0)、その行を削除する(Range(i & ":" & i).Delete)。
といった内容です。
このコードでは、少しでも記述する行数を減らすために、『Or』で条件を繋いでいます。
具体的には、↓となります。
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(対象セル, "対象文字列", "置換後の文字列")』でできますので、具体的には↓のようなコードです☆
ただ、文字の削除については、『置換』機能を使用します!置換は『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で記述しますが、具体的には、
実際のコードは以下の通りです!
こちらも、全行に実施したいので、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)で設定できます。
そこで、今回具体的に設定したコードは以下の通りです!
ハイパーリンクは、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秒前後で以下のように整形されたと思います♪
マクロボタンの作り方は、以下のページの3章に記述しています。のでぜひご覧ください☆
実は簡単!?Excelのマクロを使ってみる!!
これで完成です!!
是非とも、完成したマクロボタンをクリックしてみてください☆
1秒前後で以下のように整形されたと思います♪
まとめ
如何でしたでしょうか!
前回、手動での作成方法をご紹介した、ファイルリストについて、マクロでワンクリックで完成する方法をご紹介しました。
このように、マクロを使うと色々と自動化できることが多いので、ぜひトライしてみてください。
また、今もマクロって難しいそう…って感じられているようでしたら、コチラの記事もご覧いただけますと、マクロのイメージも変わるかもしれません\(^o^)/
是非ご覧ください☆
前回、手動での作成方法をご紹介した、ファイルリストについて、マクロでワンクリックで完成する方法をご紹介しました。
このように、マクロを使うと色々と自動化できることが多いので、ぜひトライしてみてください。
また、今もマクロって難しいそう…って感じられているようでしたら、コチラの記事もご覧いただけますと、マクロのイメージも変わるかもしれません\(^o^)/
是非ご覧ください☆
0 件のコメント:
コメントを投稿