may the VBA be with you

Excel VBAとか業務自動化とか

はてな記法 テーブル作成マクロ ができるまで

はじめに

はてな記法では | (縦線)を使うことで簡単に表を作ることができます。

すごく便利ですが、手打ちだとさすがに限界がありますので、Excelの表からテーブルを作成できるようにしてみましょう。

やりたいこと

f:id:vba-belle-equipe:20160302111917p:plain

上のようなExcelの表があります。*1

これを

人物名 役職 役者
千石 武 ギャルソン 松本 幸四郎
原田 禄郎 パトロン 筒井 道隆
磯野 しずか シェフ・ド・キュイジーヌ 山口 智子
三条 政子 バルマン 鈴木 京香
水原 範朝 ディレクトール 西村 雅彦
梶原 民生 メートル・ド・テル 小野 武彦
稲毛 成志 シェフ・パティシエ 梶原 善
大庭 金四郎 ソムリエ 白井 晃
和田 一 コミ 伊藤 俊人
畠山 秀忠 スー・シェフ 田口 浩正
佐々木 教綱 プロンジュール 杉本 隆吾
ジュラール・デュヴィヴィエ ガルド・マンジェ ジャッケー・ローロン

のように表示したいとして


はてな記法

|*人物名|*役職|*役者|
|千石 武|ギャルソン|松本 幸四郎|
|原田 禄郎|パトロン|筒井 道隆|
|磯野 しずか|シェフ・ド・キュイジーヌ|山口 智子|
|三条 政子|バルマン|鈴木 京香|
|水原 範朝|ディレクトール|西村 雅彦|
|梶原 民生|メートル・ド・テル|小野 武彦|
|稲毛 成志|シェフ・パティシエ|梶原 善|
|大庭 金四郎|ソムリエ|白井 晃|
|和田 一|コミ|伊藤 俊人|
|畠山 秀忠|スー・シェフ|田口 浩正|
|佐々木 教綱|プロンジュール|杉本 隆吾|
|ジュラール・デュヴィヴィエ|ガルド・マンジェ|ジャッケー・ローロン|

と書くとできます。

ので、Excelの表からこのテキストを作るマクロを作ってみましょう。

やってみる

今回は、途中経過を見せながら、一気に完成形まで行ってみたいと思います。

1行表示させる
Sub makeTblTxt()
  Dim i As Long, j As Long
  Dim str As String
  For j = 1 To 3
    str = str + "|" & Cells(1, j)
  Next
  Debug.Print str & "|"
End Sub
  • 縦、横にfor文を使う時は、縦に「i」、横に「j」を使うことが多いです(おそらく一般的?)
  • イミディエイトウインドウに出るテキストをコピーすれば事足りるので、テキストファイルに出力等せずに「Debug.Print」で済ませています
指定行繰り返す
Sub makeTblTxt()
  Dim i As Long, j As Long
  Dim str As String
  For i = 1 To 13
    str = ""
    For j = 1 To 3
      str = str + "|" & Cells(i, j)
    Next
    Debug.Print str & "|"
  Next
End Sub
  • 「str = ""」を入れないと、文字列がどんどん長くなってしまいますので気をつけましょう
  • 「Cells(1, j)」のままだとずっと1行目の情報が表示されます(ありがち)
見出し行だけちょっと変える
Sub makeTblTxt()
  Dim i As Long, j As Long
  Dim str As String
  For i = 1 To 13
    str = ""
    For j = 1 To 3
      If i = 1 Then
        str = str + "|*" & Cells(i, j)
      Else
        str = str + "|" & Cells(i, j)
      End If
    Next
    Debug.Print str & "|"
  Next
End Sub
  • 単純に1行目なら「|*」をつけるようにしています

まとめ

マクロの基本という感じがして、なかなかよかったですね。

最後のがとりあえずの完成形ですが、わかりやすく改善点が残っています。


が、

それはまた、別の話...

*1:表の情報はWikipediaを参照しています