ヘンなことからコツコツと

情報系にうとい主がいろいろ書くかもしれない

【VBA】フォルダ内のファイル一覧を,サブフォルダも含めて高速に取得する

 サブフォルダも含めてファイルリストを取得したいとき,すぐ思いつくのはFile System Object(FSO)を使う方法だろうが,データ数が多かったり,フォルダの階層が複雑だと正直おそい.

 特にサーバ上にあるフォルダ内を参照する場合は,環境にもよるが,泣きそうなぐらいおそい.

 私の知る限り,最も高速なのは,下記のように,Windows Script Host(WSH)のdirで取得する方法だと思う.

 マクロ有効ファイルの「A1」セルにフォルダパスを貼り付ければOK.

 ちなみにWindowsでは,当該フォルダを「Shift」+右クリックでパスをコピーできる(これすごい便利).

 

 当初は付け焼き刃と思っていたが,意外と3年間は重宝している.

 まぁこのやり方だとフルパスでしか取得できないため,ファイル名だけを欲しかったり,両方必要だという人は,コードをちょこっと変えたらできるので,いろいろいじってほしい.

 

 このコードのポイントは,下記3つ.

  • 一旦コマンドプロンプトでファイルリストをテキスト形式でデスクトップに出力(csvでもいいね)(気分的に目に見えるデスクトップに保存)
  • ファイルリストをExcelで開いて全部コピー(エクセルはこういうのは得意)
  • ファイルリストは削除(邪魔だからね)

Sub sample()
  Call Search_Files(Range("A1").Value)
End Sub

Sub Search_Files(Path As String)
  Dim WSH, sCmd As String
  Dim dPath As String
  Dim wTXT As Workbook
  Dim rEnd As Long
  
  Set WSH = CreateObject("WScript.Shell")
  dPath = WSH.SpecialFolders("Desktop") & "\"
  sCmd = "dir " & path & " /b /a-d /s > " & dPath & "filelist.txt"
  WSH.Run "%ComSpec% /c " & sCmd, 0, True
  Set WSH = Nothing
  
  Set wTXT = Workbooks.Open(dPath & "filelist.txt")
  rEnd = Cells(Rows.Count, 1).End(xlUp).Row
  Range("A1:A" & rEnd).Copy ThisWorkbook.Worksheets(1).Range("B1:B" & rEnd)
  wTXT.Close savechanges:=False
  Kill dPath & "\filelist.txt"
  Set wTXT = Nothing
End Sub

TeXを用いた半角カタカナを含むpdfの作成方法

TeX Forumの以下の質問およびその回答を参考にした.

https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2280

 

---

本文に半角カタカナの文字列を含むソースファイルをタイプセットして,半角カタカナを含むpdfを作成する方法である.

 

1. サンプルソースファイル

hoge.texという名前で,以下のファイルを作成した.


%hoge.tex
\documentclass[a4j, uplatex]{jsarticle}
\begin{document}
あアア
だダダ
ぱパパ
\end{document}

2. タイプセット方法

今回私はソースをTeXShopで作成した.

環境設定... -> 内部設定の設定プロファイルから,upTeX(ptex2pdf)を選ぶ.

それを適用し,いつも通りタイプセットを行うとうまく行った.

 

もしくは,ターミナルから

ptex2pdf -u -l hoge.tex

とすればできるかと思う.

 

ptex2pdfの使い方は以下のURLから

https://texwiki.texjp.org/?ptex2pdf

 

3. その他の方法

以下のリンク先で議論が行われている.

参考までに

https://github.com/kmuto/review/issues/182