最近、メインサイト(以下)の更新が滞っている。
トップページ - You.Activate
当初はhtmlの学習も兼ねてテキストエディタで作ったサイトなのだが、ブログの快適さに慣れた後では記事を一本上げるだけでも結構面倒くさい。
かといってWordpressを導入するにはレンタルサーバーのプランをアップグレードしないといけないし、仮に導入したとしてテンプレートをカスタマイズして思い通りのデザインを作り上げるには本格的に勉強しないといけない。
どうしたものかと悩んだ挙句、「そうだ、Word VBAを使おう」という結論に至った。
Word自身、html出力機能はいちおう付いているが、Wordが吐き出すhtmlコードは次のようにごちゃごちゃしており、非常に残念なコードである。タイトルで「まともな」と謳ったのは、標準のhtml保存機能で吐き出されコードがまともじゃないからである。
私のサイトは次のような見出し構造になっている。
記事部分のソースは次のように各段落をh2、h3、pタグで括っているだけで、文字の強調にはemタグを使用しているシンプルなものだ。
今回はWord VBAを使って、Word文書をこのようなシンプルなhtmlコードに変換してみようと思う。
さて、まずWordで記事を作成する。
このとき、個別に書式は設定せず、必ず既存のスタイルを使用する。
スタイルセットは何でも良いが「シンプル」を選んだ。どのみちスタイルはCSSで指定するので、Word上の見栄えはここでは関係ない。
各段落に対し、スタイルを割り当てていく。
そしてWordのNormalテンプレートに標準モジュールを追加し、次のコードを書く。
Sub WordParagraphToHTML() Dim p As Paragraph Dim Bold As Boolean For Each p In ActiveDocument.Paragraphs Select Case p.Style Case "見出し 1" Debug.Print Debug.Print "<h3>"; Case "表題" Debug.Print "<h2>"; Case Else Debug.Print "<p>"; End Select Dim c As Range For Each c In p.Range.Characters If Not Bold And c.CharacterStyle = "強調太字" Then Debug.Print "<em>"; Bold = True ElseIf Bold And c.CharacterStyle <> "強調太字" Then Debug.Print "</em>"; Bold = False End If If Not c = vbCr Then Debug.Print c; Next Select Case p.Style Case "見出し 1" Debug.Print "</h3>" Case "表題" Debug.Print "</h2>" Case Else Debug.Print "</p>" End Select Next End Sub
これを実行すると、イミディエイトウインドウにアクティブな文書に対するhtmlが出力される。
<h2>マクロとVBA</h2> <h3>マクロについて</h3> <p>マクロの正式名称は、Macro Instruction…直訳すると、大きな命令という意味になります。その名のとおり、<em>いくつかの小さな命令を集めて、ひとつの大きな命令として扱えるようにしたもの</em>がマクロです。</p> <p>現実世界にも似た例はあります。たとえば洗濯機だと、水を注ぐ、洗う、すすぐ、脱水するという4つの命令が、洗濯するという1つの命令に集約されています。洗濯マクロとは呼びませんが、考え方は似ています。</p> <h3>VBAについて</h3> <p>マクロは小さな命令の集まりであると書きましたが、Excelに日本語で命令しても動かないので、Excelに理解できる言葉で書いてあげる必要があります。その<em>マクロを記述するための言葉</em>がVBA言語です。</p> <p>Excelにマクロの記録という機能がありますが、あれはエクセルの操作を自動的にVBA言語で記録してくれる機能であって、その機能だけを指してマクロと呼ぶのは間違いです。</p> <h3>VBA言語と、Excel VBA</h3> <p>Excel VBAは、純粋なVBA言語とExcelの操作に大別できます。一般的にはこれらをあわせてExcel VBAと呼びますが、セルの操作などは純粋なVBAの命令ではなく、Excelがもともと備えている機能をVBAから呼び出しているに過ぎません。</p> <p>/</p> <p>Excel関連の命令はExcel操作の種類の数だけありますので、全部覚えることはできませんし、その必要もありません。</p> <p>対して純粋なVBAは、覚えることは数えるほどしか無く、あとはそれらをどう組み合わせるかを考えることがメインになってきます。これは日本語の「てにをは」に相当するくらい基本的な部分で、まずVBAを覚えないと役に立つマクロは作れません。</p> <p><em>覚えなければいけないのはVBAの方で、Excelの操作は都度調べるものである</em>と割り切ってください。Excelの操作は、よく使うものは自然に覚えますので問題ありません。</p> <p>このサイトで配布している入門教材では主に純粋なVBA言語について解説しています。</p>
あと改良するなら、テキストへ直接出力したり、セクション外のコードをテキストテンプレートから読み込んだりといったことができるが、とりあえずやりたいことはできたので以上でおしまい。