VBAからClosedXMLに変えよう

現場でExcelを使い、VBAでマクロを使っている人も多いのではないでしょうか。今回はVBAより速く処理を作れる「ClosedXML」を取り上げていきます。 置き換えていく価値があるのか?について注目していきたいと思います。
「カワリニ」編集部

こんにちは、普段はゲームプログラマをしているエルです!
今回はClosedXMLというライブラリを使用した感想になります。
エクセルのセルを参照するマクロを作成するのにVBAはよく使われていますが、ClosedXMLで書いた場合段違いに速くなります!
是非使用を検討してみてはと思います。

ClosedXMLとは

Excel用の.xlsxファイルの作成方法として、MicroSoftが提供している「Open XML SDK」を使うと、MicroSoft Officeのファイル(Excel,Word,PowerPoint)をプログラムから操作することができ、新規作成をすることが可能になります。
しかし、汎用的な作りになっているため、そのまま使用すると煩雑なコードが必要なっています。

今回紹介する「Closed XML」は、サードパーティ製ですがExcelのみを対象とした分、簡潔に使いやすくなっています。

また、C#で処理を作成出来るため、VBAと比べ速く処理される点も大きい利点です。

 

Excelが無くてもExcelファイルが作成・編集できる

ClosedXMLは.xlsxファイルを作成・編集することが出来ますが、その際にExcelが無くても処理を実行することが出来ます。

多くの場合は出力結果を確認するために、MicroSoft Officeはインストールされているはずですが、仮にない場合でも問題なく実行できます。

家のPCにはMicroSoft Officeがインストールされていない場合でも、使用することが出来るため家で学習をしたい際も対応できるようになっています。

 

導入の仕方

導入する方法はとても簡単で、VisualStudioでC#の空のプロジェクトを作成した後、NuGetで検索する方法が一番簡単です。

オープンソースなため、拡張したい場合はGitHubからソースコードをダウンロードする必要がありますが、既存の機能を使用したい場合はNuGetからインストールするのがすぐに使用できて良いでしょう。   


プロジェクトから右クリックで、NuGetパッケージの管理に飛ぶと検索が出来るので「ClosedXML」で検索しましょう。


選択するとインストールのボタンがありますので、押します。
押した後にダイアログが出てくるので、「はい」を押して進めます。


追加が終わると、プロジェクトの参照の中に追加されるのを確認したら、使える状態となります。

 

.xlsxファイルを新規作成してみる

最初にClosedXMLで.xlsxファイルを新規作成する場合のコードを書いてみます。

空のコードで.csファイルを作成した後に、
using ClosedXML.Excel;
を追加します。

その後はbatファイルで呼ぶために画像のように記述すると、.xlsxファイルが出力されるコードを作れます。

あとはbatファイルから、exeファイルを呼び出し、引数を渡し実行することで.xlsxファイルを出力することが出来ます。

 

10000行のセルを処理した時の速度は

それでは10000行に対して変更を加えた際の速度を計測してみたいと思います。


今回はA列・B列・C列、に対して、文字の入力・背景色・文字色を変更する対応を10000行に加えてみます。

これを実行した結果が↓の画像になります。

出力されたファイルを見てみると、ちゃんと変更が加えられています。


重要な結果としては、かかった時間は「約1.62秒」でした。

30000個のセルに対する処理をしたと考えると、とても速く終わっています。

 

VBAから置き換える価値あり

今回テストコードを書いてみて、ClosedXMLの速度を計測してみました。

VBAからC#で記述するClosedXMLに移行するのは、慣れていない人からすると簡単ではないかもしれませんが、改善される速度を考えると置き換えていく価値はあります。

今現場でExcelを使用していて、マクロをVBAで組んでいる場合、ClosedXMLでの処理に置き換えていく提案をしてみてはいかかがでしょうか。

 

 

ギルドプロジェクトでは、現在会社で使用しているサービスに代替する機能やSaaSの提案・導入など、現場での業務効率化を代行する「カワリニ」というサービス展開しております。
問い合わせは無料で対応させていただいております。
社内SEがおらず専門ではない方が対応を任されている場合や、社内で専門性が足りない業務は外部に委託したかった等ありましたら、お気軽にお問い合わせください。

カワリニに相談する