Excel VBAでワークシート上の表をLaTeX形式に変換するマクロを作ってみた
12月に入ってから、 の勉強を始めました。
ってなんぞや? という方は、以下のサイトをご参照ください。
こちらのサイトを参考にさせていただき、 W32TeX というディストリビューションをインストールしました。
現在、W32TeX に付属しているエディタ TeXworks にちまちまとコマンドを打ち込んでは結果を確認するという感じで、試行錯誤しているところです。
TeXworks の基本的な使い方も上記のサイトで解説されていたので、順を追って手を動かし、思うようにならないところは以下のサイト
を参照させていただいたり、ググってコマンドを調べたりして、のんびりやっていますが、思ったよりも簡単というか、ハードルが低い感じがします。めんどくささとしては、HTMLで文章を作成する感じとそう変わらないかな、と。
しかしながら、HTMLでもそうでしたが、表組みは でもとても面倒です。
ここだけは、Mcirosoft WORD の WYSIWYGには敵いませんね。
には、CSVやExcel形式から 形式への変換ツールが紹介されていますが、Webアプリを試してみたところ、機能面でもの足りなかったり、使い勝手がよくなかったりして、正直イマイチでした。
と言って、スタンドアロンアプリやLaTeXパッケージをインストールするのはちょっと面倒ですし、いちいち使い心地を確かめる気にもなれません。
というわけで、例によってVBAで作っちゃいました。
これが、想定していた以上に手強かったため、機能としてはだいぶ限定的になってしまいましたが、とりあえず現時点での私のニーズは満たしているので、他の誰かにも役立つかもしれないと思って、公開することにしました。
ざっと検証はしましたが、不具合あるかもです。オープンソースにしてありますので、不具合や改善点などありましたら、ぜひ教えてください。
では、今回作ったマクロの使い方と特徴をご案内しましょう。
- Excelファイル「Convert_to_LaTeX」を開きます。[有効にする]を忘れずに。
-
それとは別に、変換元となるブックを開きます。
データ元:政府統計の総合窓口 - 変換したい範囲を選択して、
- [開発]タブ→[マクロ]をクリック
-
フォームが開きますので、お好みに合わせて設定→【変換】をクリック
-
テキストファイルが開きますので、内容を エディタにコピペしてください。
特徴その1:
「Convert_to_LaTeX」ファイルの保存先と同じフォルダに「Excel_to_LaTeX」というファイル名のテキストファイルが生成されます。このファイルは【変換】を実行するたびに上書きされます。 -
セルの結合に multirow パッケージを使用していますので、必ず
\documentclass{} と \begin{document} の間に \usepackage{multirow} を記述しておいてください。→タイプセットします。
-
仕上がりはこんな感じ。
特徴その2:
選択範囲の先頭行は、見出しとして自動的(強制的)にセル内で中央寄せされます。見出しが複数行にわたる表には対応していませんので、ご了承ください。
特徴その3:
データ範囲のセル配置は、ワークシート上の設定に合わせて自動的に反映されます。
標準のとき :数値なら右寄せ、空欄は中央寄せ、それ以外は左寄せ
左寄せのとき :左寄せ
右寄せのとき :右寄せ
それ以外のとき:中央寄せ -
選択範囲内に罫線(普通のと二重罫線)がある場合は、
自動的に にも反映されます。
特徴その4:
選択範囲内に罫線(普通のと二重罫線)がある場合は、何もしなくても に反映されます。
太線や細線、破線等には対応していませんので、ご承知おきください。 -
選択範囲内に結合セル(横方法または縦方向)がある場合は、
自動的に にも反映されます。
特徴その5:
選択範囲内に結合セル(横方向または縦方向)がある場合は、何もしなくても に反映されます。
ただし、複数行×複数列のセル結合
( ↑ こんなの)には対応していませんので、ご注意ください。 -
特徴その6:
上の書式設定とかは同じ設定を繰り返し使うことが多いと思ったので、【変換】の実行時に、設定内容をブック「Convert_to_LaTeX」のワークシート上に保存するようにしました。
以上、特徴をまとめると、
「見出しが1行で、罫線は普通のと二重罫線のみを用い、複数行×複数列のセル結合はしない」という条件に従うなら、ワークシート上の書式設定のうち、セル配置・罫線・セル結合が自動的に に反映されるマクロ
ということになります。
ワタシ的には相当がんばりましたが、いかがでしょうか?
もちろん、制約は多いですし、ワークシート上の書式は他にもあります(フォントカラーとか)ので、できれば今後もバージョンアップしていきたいと思いますが、まずはここまで。