0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【VBA】Excelの表をTeXにコピペするときに楽をしたい

Last updated at Posted at 2023-12-14

はじめに

TeXでレポートを作っているとき、Excelで作った表などを貼り付けたいことがしばしばあったので少し楽できるようにしました.もうこういう記事はたくさんあるんだろうな

「なんでもいいからはやくやり方を教えろ」という方は最後の 「アドイン設定」をお読みください.

何が面倒だったのか

まず、(いうほどでもないのですが)何がそんなに面倒だったのか書きます.

TeXのtabular

TeXでは表を次のような書き方であらわします.

tablarの例
	\begin{tabular}{|l|c|r|} % l 左寄せ / c 中央寄せ / r 右寄せ
		\hline % 横線を入れる
		一つ目 & 二つ目 & 三つ目 \\
        \hline&&\\
        \hline
		A & B & C \\
        \hline
		1 & 2 & 3 \\
		\hline
	\end{tabular}

結果は次のような表になります.
image.png

Excelの表

一方で、Excelの単純な表(つまりセルの結合などがない表)は以下のような感じになります.
image.png
これを、普通に選択してTeXで(正確にはテキスト形式で)貼り付けすると次のようになります.

表をそのまま貼り付けると…
一つ目	二つ目	三つ目
あ	い	う
A	B	C
1	2	3

これだとわかりにくいかもしれませんが、タブ文字で右のセルへの移動、改行で次の行への移動をあらわしています.

これをパワーでTeXにするなら、

  • タブを探して & にかえる
  • 改行部分の最後に \ をつける
    という作業をすればよいだけですね.

はい.やっていられません.

VBAなしで楽をしたいときはどうするか

では今まではどうしていたのかというと、
Excelのセルに=A1 & " & " ... と打って結合をしていました.
例えば先ほどの例だと
image.png
このように書くことで実現できます.
他にもCONCAT関数を使うことでもう少し楽ができますが、やっぱり面倒です.

アドインの設定

このようなことがあって、「VBAを書いてアドインにしてしまえば楽だなぁ」と思ったわけです.はい.凡人の発想です.

とりあえずアドインのファイルを作る

  1. Excelを起動し、空白のファイルなど何でもいいのでファイルを「名前を付けて保存」します.このときにExcelアドイン(*.xlam)を選んでおきます.
    image.png
  2. 作ったファイルの置く場所はWindowsでは C:\Users\ユーザーの名前\AppData\Roaming\Microsoft\AddInsでうまくいくらしいです.
    image.png
    これでアドインのファイルは準備完了です.

Excelファイルは閉じないで続けます.
もし、保存したあとにExcelを閉じてしまった場合も、C:\Users\ユーザーの名前\AppData\Roaming\Microsoft\AddInsにあるxlamファイルを開けば問題ありません.

開発タブの有効化

Excelには隠されたコマンドがあります.
(子供心をくすぐる機能?です)
Excelにて[ファイル]>[オプション]を開き、[リボンのユーザー設定]から開発のチェックボックスにチェックを入れたら[OK]を押します.
image.png
これでExcelのリボンに開発タブが増えます.

VBAを書く

Visual Basicボタンを押すと新しいウィンドウが開いてびっくりします.
image.png
ここから、標準モジュールを作ります.
image.png
オブジェクト名を変えてわかり易くしてもいいです.
image.png
このコードの部分にプログラムを書きます.

こちらが全文です.

好きなモジュール名(好きな名前.xlam)

Option Explicit '変数の宣言を強制(バグやTypoを減らす)

'選択したものをTeXのtablarにあわせて文字列で返す関数
Function toTexTableFormat(target As Range) As String
    
    Dim sel As Range
    Dim ret As String
    ret = ""
    
    '引数が空
    If target = Nothing Then Exit Function
    
    'それぞれに & をつけて結合
    For Each sel In target
        ret = ret & sel.Value & "  &  "
    Next
    
    '最後は \\ に変えて戻り値設定
    toTexTableFormat = Left(ret, Len(ret) - 5) & "  \\"
    
End Function

細かい説明は省きますが、
「引数で1行分を受け取り、セルの間には & を、行の最後には \ を入れたものを返す」という単純なものです.
貼り付けたらこの部分で保存しておきましょう.

プログラムの保存が出来たらVBEは閉じてしまって問題ありません.

Excelのブックとは別物なのでVBE(新しく開いてびっくりしたウィンドウ)で保存します.

アドインをONにする

では編集が終わったExcelはいったんすべて閉じ、新しくExcelのブックを開きましょう.
ブックが開いたら[開発タブ]の[Excelアドイン]から先ほど作ったxlamファイルを選びます.
image.png
これで準備が完了しました.

使用例

では使ってみましょう.
image.png
これを貼り付けると…

関数の結果を貼り付けると…
一つ目  &  二つ目  &  三つ目  \\&&\\
A  &  B  &  C  \\
1  &  2  &  3  \\

はい.いい感じに出力されていますね.(横幅が増えたのはTeX上での見やすさのためにスペースを入れたためです)

感想

案外記事として書くと面倒でした.
でもこれで大分快適になると思います.
タブン.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?