映画”MATRIX”の世界だぜ |
前回に続いて、ドライブとフォルダの階層構造を書き出すコードの続きです。
先回は、エクセルでマクロを書き出して、シートにツリーを表示させました。
これは、DOSコマンドの"tree"を利用して、出力を配列に流し込み処理をする。
次に、この配列に見合うだけの範囲、”Ramge”を作り、一挙に書き出しました。
ただ、実態はDOSコマンドが必要不可欠で、ならばDOS上でデータ保存したい。
無理なのかなあとネットでググっていたら、何と保存の記述が紹介されている。
そんなに難しい代物でもないので、紹介しておきますが、マクロの実行と同じ。
しかも、エクセルはシートに書き出すのに時間が掛かりますが、こちらは爆速。
先ず、ウインドウ上の”ここに入力して検索”にCMDと打ってEnterキーを押す。
コマンドプロんプの徒画面が出たら、”tree T:\ /f >C:\index.csv”と打ちます。
C:\Users\HogeHoge>tree T:\ /f >C:\User\HogeHoge\Documents\index.txt
”tree”の後ろには検索したいパスを入力して、その後ろに引数の”/f”も付けます。
これで検索する階層内のファイル名も書き出してくれますが、次は保存の指定。
引数”/f”にスペースで空けて、”>C:\index.csv"とパス付きでファイル名指定だ。
これで、Enterキーを押せば、パスの先にファイルが保存されていると言う分け。
ファイル拡張子を”csv”にしているのは、エクセルで簡単に読み出せるからです。
呆気にとられるほどですが、ファイルサイズやタイムスタンプまで分からない。
そんな場合は、エクセルで読み出したワークシートを使ってコードを書こうか。
一方、配列の個々の要素をワークシートの縦方向でセルに書き出す工夫のお話。
この時、縦横を入れ替える配列のワークシート関数、”Transpose”を使用する。
だから、VBAで、”WorksheetFunction.Transpose”と書きますが、便利です。
これもサンプルコードをあげておきますので、試しに動かして確認して下さい。
というわけで、ワークシートで縦横の項目を入れ替えて表示するには便利だな。
今まで使い道の少なかった関数なのですが、配列は読んで字の通り、列が横方向へつながるイメージで、これをシート上の列項目に、縦方向へ要素として転移あして貼り付けるには、必要不可欠だと言うのが分かったのでした。
Dim arr As Variant, i As Long
arr = Array("abc", "def", "ghi", "jkl", "mno")
Range("A1", Cells(UBound(arr) + 1, 1)).Value _
= WorksheetFunction.Transpose(arr)
End Sub
0 件のコメント:
コメントを投稿