エクセル

li要素とh3要素を自動作成(VBAでの文字列操作の練習)

エクセル

[PR]当サイトはアフィリエイト広告を利用しています。

はじめに

エクセル関数をVBAで再現するという方針でここまでVBA入門コーナーをやってきましたが、これまでやった内容である程度解説したので、「あとはご自身の課題にカスタマイズしましょう」という段階です。

ここからはあまりエクセル関数にこだわらずに、練習になりそうな例題をやっていくことにします。

今回はhtmlのli要素とh3要素を自動作成するという内容です。

ブログを運営していると、今回の小見出し一覧としてul要素にli要素を配置して、小見出しにジャンプするということをやりたくなります。

小見出しはh3要素です。

htmlタグを自動で付与したい

例えば前回の記事「VBAで関数を使ってみる」では最初の目次は次のようなhtmlで構成されています。

(ワードプレス移行にともない、目次をul要素で作成するのはやめました。ご了承ください。ワードプレスならテーマにもよりますが、自動で目次とH2・H3とのリンク作成をやってくれます)

<ul>
<li><a href="#jump1">はじめに</a></li>
<li><a href="#jump2">エクセル関数で求める場合</a></li>
<li><a href="#jump3">VBAで求める場合</a></li>
<li><a href="#jump4">定義したFunction関数はシート上でも使える</a></li>
<li><a href="#jump5">関数のスコープ</a></li>
<li><a href="#jump6">まとめ</a></li>
</ul>

それに対して記事中に次のようなh3要素を埋め込んでいます。

<h3 id="jump1">はじめに</h3>
<h3 id="jump2">エクセル関数で求める場合</h3>
<h3 id="jump3">VBAで求める場合</h3>
<h3 id="jump4">定義したFunction関数はシート上でも使える</h3>
<h3 id="jump5">関数のスコープ</h3>
<h3 id="jump6">まとめ</h3>

手作業でこのli要素とh3要素を入力するのは結構手間です。

そこで要素の中身、例えば「はじめに」や「関数のスコープ」だけ入力して、タグ付けは自動で実行できれば作業が軽減されます。

今回はこの処理をやっていきます。

なおhtmlの解説は長くなるので割愛します。

<h3>小見出し</h3>

のようなブロックでくくっていくものだ、くらいにお考え下さい。

エクセル関数で行う場合

C3からC8に要素の中身を入力します。

次にD3からD8に1から6まで連番で入力します。

ここは1と2を入力したらオートフィルで下に引っ張れば6まで入力できます。

E3に次のように入力します。

=”<li><a href=””#jump”&TEXT(D3,”@”)&”””>”&TEXT(C3,”@”)&”</a></li>”

F3に次のように入力します。

=”<h3 id=””jump”&TEXT(D3,”@”)&”””>”&TEXT(C3,”@”)&”</h3>”

そしてE3とF3でそれぞれの列をオートフィルで下に引っ張ります。

これで各列をコピーしてブログのhtml入力欄に張り付ければ、リストと小見出しが一気に入力できます。

それではE3とF3に入力した式の中身を見ていきましょう。

●文字列は「&」でつなぐ

文字列同士を結合するのは「&」で行います。

=”<li><a href=””#jump”&TEXT(D3,”@”)&“””>”&TEXT(C3,”@”)&“</a></li>”

●ダブルクォーテーションは「“”

文字列をダブルクォーテーションで囲むと文字列としてエクセルが認識しますが、ダブルクォーテーションそのものを入力したいときはダブルクォーテーションを二つ続けて入力します。

つまり「”あいう”」でエクセルには文字「あいう」が表示され、文字列「あいう」と認識されますが、文字列「あい”う」と認識させたいときは「”あい””う”」と入力するということです。

=”<li><a href=“”#jump”&TEXT(D3,”@”)&“”>”&TEXT(C3,”@”)&“</a></li>”

●数値を文字列に変換するのはTEXT(変換したい数値,”@”)

数値はそのままでは文字列結合できないので数値を文字列に変換します。

ちなみにTEXT(C3,”@”)の部分はC3と入力するだけで済むのですが、C3に数値が入ってくる場合もあるので一応文字列変換を通しています。

=”<li><a href=“”#jump”&TEXT(D3,”@”)&“”>”&TEXT(C3,”@”)&“</a></li>”

VBAで求める

まずA3セルに次のように入力します。

=COUNTA(C3:C8)

これで小見出しが何個あるか数えます。この部分は小見出しの量に応じて設定し直す必要がありますが、いちいちすべて手入力するよりはましだと思います。

コード入力欄に次のように入力します。

Sub createhtml()
    Dim p As Integer
    p = Range("A3").Value
    Dim i As Integer
    For i = 1 To p
        Cells(2 + i, 8).Value = "<li>" & "<a href=""" & "#jump" & Replace(Str(i), " ", "") & """>" & Cells(2 + i, 3).Value & "</a>" & "</li>"
        Cells(2 + i, 9).Value = "<h3 id=""jump" & Replace(Str(i), " ", "") & """>" & Cells(2 + i, 3).Value & "</h3>"
    Next i
End Sub

セルに入力する文字列の規則は上でやったような規則に従うのですが、次の部分だけ解説します。

Replace(Str(i), ” “, “”)

まず

Str(i)

ですが、これは数値iを文字列に変換する関数です。

関数といってもVBAに初めから搭載されている関数で、こちらが定義する必要はありません。

同様に

Replace(文字列, ” “, “”)

で文字列の空白を空文字に置き換えています。

なぜこんなことをするかというと、どうもStr関数の仕様らしく、変換後の文字列に空白が自動入力されるようなのです。

これを空白なしで詰めたかったので、空白を削除する目的でReplace関数を使いました。

あとは長々とした文字列結合が続くだけです。

まとめ

今回はhtml要素のliとh3を組み合わせるためのタグ付けをなるべく自動化するという内容でした。

文字列操作は結構プログラミングでは出てくるので、慣れていけるとプログラミングの幅が広がります。

どこからどこまでを自動化できるか見極める目を養いましょう。