適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

【Group-Object】自分のパソコンのExcelファイルの拡張子の割合を調べてみる【PowerShell小ネタ】

ExcelでどのくらいVBA使って開発したんだろう・・・?

自分のパソコンの中にどのくらいのExcelファイルがあって、そのうちどのくらいがVBAを使っているんだろう?

ふと気になったので、調べてみました。

(PowerShellを使って、xls*という拡張子のファイルがどのくらいあるか調べてみました。)

【結果】xlsmのExcelファイルが多かった

PowerShellでコマンドを実行した結果、こんな感じで表示されました。

やっぱりマクロ有ファイルが一番多かった。

f:id:shinmai_papa:20210911233145p:plain

このように拡張子ごとに、どのくらいの割合でファイルがあるのかパッと調べられると便利ですよね。

え?そんな需要ない?

いや、きっとできれば便利ですし、ぜひ調べてみてください!!

気を取り直して・・・。

様々なオブジェクトをグルーピングするときは、Group-Objectコマンドレットを使うと簡単に調べることができます。

Group-Objectコマンドレットを使ったワンライナー

Get-ChildItem、Where-Object、Group-Objectコマンドレットを組み合わせた、Excelファイルの拡張子ごとの数を調べるワンライナーです。

 
$groupObj=Get-ChildItem-Path 'C:\' -Recurse -ErrorAction SilentlyContinue|Where-Object{$_.Extension -like '.xls*'}|Group-Object -Property Extension

まず、Get-ChildItemコマンドレットでCドライブを再帰的に調べます。

Get-ChildItemコマンドレットでは、システムファイル等のファイルにアクセスしようとすると、権限によってはアクセスを拒否されることがあるので、エラーメッセージを抑制するため、

-ErrorAction SilentlyContinueを付与しています。

次にWhere-Objectコマンドレットで拡張子を絞ります。

ワイルドカードを使ってxlsを含む拡張子に絞っています。

最後にGroup-Objectコマンドレットに結果を渡します。

Group-Objectコマンドレットでは、グルーピングしたいプロパティを-Propertyパラメータで指定します。

ここではExtension、つまり拡張子でグルーピングしています。

これで拡張子ごとの数が調べられました!

f:id:shinmai_papa:20210911233145p:plain

終わりに

Excelの拡張子ごとの数を調べるワンライナーの紹介でした。

エントリー的には、ネタの域を出ないですが、まじめな話Group-Objectコマンドレットを使いこませれば、Excel不要でPowerShell上で複雑な処理が実現できます。

その辺は別の記事で深堀したいと思います。

というわけで、ここまでお読みいただき、ありがとうございました。