エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成します、
サブフォルダ以下も全て取得し、一覧表示します、
いよいよ、大詰めです、
今回は罫線を引きましょう。
一見すると、かなり複雑な線を引かないといけないように見えます。
規則性を見つけて下さい。
サブフォルダの縦の空白ばかり見ていると、どうして良いか解らなくなってしまいますよ。
では、シンキングタイム
順番に飲んで待ってます。
見つかりましたか。
「森を見て木を見ず」、「木を見て森を見ず」と言います。
まず、上図をぱっと見て、森を見たはずです。
では、次は、木を見て下さい。
適当な真ん中くらいの1行だけ(前後の行を隠しても良いでしょう)を見て下さい。
これを2~3行比べて下さい。
以下、思考の過程です。
規則性は、
1.どのセルも左には罫線がある
2.文字(フォルダ名、ファイル名)のあるセルは、上にも罫線がある
3.上罫線は、最後まで続いている
4.サイズ、更新日時の左罫線は細線である
では、どんな引き方をすれば良いか。
手作業で線を引くとしたら、
1.文字(フォルダ名、ファイル名)を入れるセルから更新日時までを選択し、
左罫線と上罫線を引く
2.文字を入れるセルより左側のセルを全て選択し、
左罫線と中央縦罫線を引く
3.サイズ、更新日時を全て選択し、
左罫線と中央縦罫線を細線で引く
4.全範囲を選択し、外枠四辺に罫線を引く
これをプログラミングすれば良いのです。
そう、最初は、上の手作業をマクロの記録したものを使用すれば良いでしょう。
Selectionを変更すれば良いです。
そして、不要な部分を削除していけば出来上がります。
以下、作成したプログラムです。
Sub GetDirFiles(ByVal objFolder As Folder, ByRef i As Long, ByRef j As
Long)
Dim objFolderSub As Folder
Dim objFile As
File
'最終列が増えた場合は、サイズの前に1列追加する
If j > ColMax
Then
Columns(j).Insert Shift:=xlToRight
ColMax = j
End
If
'サブフォルダの取得
For Each objFolderSub In
objFolder.SubFolders
Cells(i, j) = objFolderSub.Name
Call
SetLine1(i, j)
i = i + 1
Call GetDirFiles(objFolderSub,
i, j + 1)
Next
'ファイルの取得
For Each objFile In
objFolder.Files
With objFile
Cells(i, j) =
.Name
Cells(i, ColMax + 1) = WorksheetFunction.RoundUp(.Size / 1024,
0)
Cells(i, ColMax + 1).NumberFormatLocal = "#,##0
""KB"""
Cells(i, ColMax + 2) = .DateLastModified
Cells(i,
ColMax + 2).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss"
Call
SetLine1(i, j)
i = i + 1
End
With
Next
'オブジェクトの解放
Set objFolderSub = Nothing
Set objFile
= Nothing
End Sub
'フォルダ名、ファイル名の行の罫線
Sub SetLine1(ByVal i As Long, ByVal j As Long)
If j > cnsCol
Then
With Range(Cells(i, cnsCol), Cells(i, j -
1))
.Borders(xlEdgeLeft).LineStyle =
xlContinuous
.Borders(xlInsideVertical).LineStyle =
xlContinuous
End With
End If
With Range(Cells(i, j), Cells(i,
ColMax + 2))
.Borders(xlEdgeLeft).LineStyle =
xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
End
With
End Sub
まずは、一覧部分の罫線からです。
引数で行番号、列番号を渡しています。
If j > cnsCol Then
With Range(Cells(i, cnsCol), Cells(i, j -
1))
.Borders(xlEdgeLeft).LineStyle =
xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
End
With
End If
2.文字を入れるセルより左側のセルを全て選択し、
左罫線と中央縦罫線を引く
に相当します。
cnsColは開始列、j - 1は現在列の左になります。
With Range(Cells(i, j), Cells(i, ColMax + 2))
.Borders(xlEdgeLeft).LineStyle =
xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
End
With
1.文字(フォルダ名、ファイル名)を入れるセルから更新日時までを選択し、
左罫線と上罫線を引く
に相当します。
jは現在列、ColMax + 2は更新日時の列になります。
マクロの記録では、
.LineStyle = xlNone
が複数記述されますが、これは罫線を引かない指定なので、
もともと罫線が無いのですから不要です。
マクロの記録を使用したら、このような不要な記述を消していきます。
それだけでも、結構すっきりしたプログラムができあがります。
では残りの、見出し部分や、サイズ、更新日時の罫線です。
以下のプログラムでは、サイズ、更新日時の文字を設定したり、
また、外枠の罫線は、メリハリをつけて少し太くしています。
Sub ファイル一覧取得()
Dim objFSO As FileSystemObject
Dim strDir As
String
Dim i As Long, j As Long
strDir = Cells(cnsRow,
cnsCol)
'FileSystemObjectのインスタンスの生成
Set objFSO = New
FileSystemObject
'フォルダの存在確認
If Not objFSO.FolderExists(strDir)
Then
MsgBox ("指定のフォルダは存在しません")
Exit Sub
End
If
'表示領域を初期設定
Range(Rows(cnsRow),
Rows(Cells.SpecialCells(xlCellTypeLastCell).Row)).Clear
Cells(cnsRow,
cnsCol) = strDir
'開始行列
i = cnsRow + 1
j = cnsCol
ColMax =
cnsCol
'再帰処理モジュールのコール
Call GetDirFiles(objFSO.GetFolder(strDir), i,
j)
'オブジェクトの解放
Set objFSO =
Nothing
'列幅を調整
Range(Columns(cnsCol),
Columns(Columns.Count)).ColumnWidth = 3
Range(Columns(ColMax),
Columns(ColMax + 2)).EntireColumn.AutoFit
'サイズ、更新日時の罫線設定
Call
SetLine2(Range(Cells(cnsRow, ColMax + 1), Cells(i - 1, ColMax +
2)))
'見出し行の外枠罫線
Call SetLine3(Range(Cells(cnsRow, cnsCol),
Cells(cnsRow, ColMax + 2)))
'一覧部分の外枠罫線
Call
SetLine3(Range(Cells(cnsRow + 1, cnsCol), Cells(i - 1, ColMax +
2)))
'見出しの書式設定
Cells(cnsRow, ColMax).Font.Bold = True
With
Cells(cnsRow, ColMax + 1)
.Value = "サイズ"
.HorizontalAlignment =
xlRight
End With
With Cells(cnsRow, ColMax + 2)
.Value =
"更新日時"
.HorizontalAlignment = xlRight
End
With
'指定フォルダに移動しておく
Cells(cnsRow, cnsCol).Select
End
Sub
'サイズ、更新日時の罫線設定
Sub SetLine2(ByRef myRange As Range)
With
myRange.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight =
xlHairline
End With
With
myRange.Borders(xlInsideVertical)
.LineStyle =
xlContinuous
.Weight = xlHairline
End With
End
Sub
'外枠罫線、少し太く
Sub SetLine3(ByRef myRange As Range)
With
myRange.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight =
xlMedium
End With
With myRange.Borders(xlEdgeTop)
.LineStyle =
xlContinuous
.Weight = xlMedium
End With
With
myRange.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight =
xlMedium
End With
With myRange.Borders(xlEdgeRight)
.LineStyle
= xlContinuous
.Weight = xlMedium
End With
End
Sub
特段の解説は必要無いでしょう。
罫線の種類、太さ等々は、マクロの記録で確認すれば、直ぐに分かります。
プロパティも単語を見れば理解できるでしょう。
これで罫線も引けて、ほぼ完成です。
罫線の記述はどうしても長くなりますので、このようにSubモジュールにした方が、
「可読性」「保守性」が良くなります。
メインのモジュールは「森」です。
細かいSubモジュールが「木」です。
森も木も両方とも見易くしておく必要があります。
「森」には、どのような「木」が、どのような配置にあるかが分かるようにします。
大きな「木」は、さらに、「枝」の形毎に分類していきます。
まずは、違いを見つけるのではなく、同じ部分を見つけるようすれば良いでしょう。
その後に、違いを見つけて個別に対処します。
今回のように、罫線を引くモジュールは、それだけをSubモジュールにし、
一か所に集めておいた方が良いでしょう。
罫線を変更したい場合は、それぞれが関与するので、まとめて見られるようにしておきます。
さて、いよいよ次回は最終回です。
最後の仕上げです、使えるマクロにする為には、重要な作業になります。
同じテーマ「ファイル一覧を作成」の記事
エクセルでファイル一覧を作成.№1(概要)
エクセルでファイル一覧を作成.№2(Dir関数1)
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成.№10(完成)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- ファイル一覧を作成
- エクセルでファイル一覧を作成.№9(罫線)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。