2024年7月20日土曜日

VBAでDOSコマンドを使う方法なんだが、フォルダの階層構造を書き出す課題で実験してみた(その二) ー WScript.Shell(VBAマクロ)

映画”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”と書きますが、便利です。

これもサンプルコードをあげておきますので、試しに動かして確認して下さい。
というわけで、ワークシートで縦横の項目を入れ替えて表示するには便利だな。

今まで使い道の少なかった関数なのですが、配列は読んで字の通り、列が横方向へつながるイメージで、これをシート上の列項目に、縦方向へ要素として転移あして貼り付けるには、必要不可欠だと言うのが分かったのでした。
          
Sub 一次元配列からセルにデータ入力_縦方向()            
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 件のコメント:

コメントを投稿