TOP > 統合アドイン > 制作秘話
***********************************************************************************************
動静表作成ツール 制作秘話
Copyright(C) 2013 by しげるがもげる
***********************************************************************************************
◆はじめに
このドキュメントには、制作に関わっての作者の思いや苦労が書いてあります。
技術的な細かいことに興味のない方は、読み飛ばしてください。
エクセルでマクロを組んでみようかなと思われる方は、読むと参考になる部分があるかもしれません。
◆制作秘話
あるとき、ワードの表をエクセルにコピーしたら、表の形が崩れてしまいました。
最初は、ひとつひとつ手作業でやっていたのですが面倒くさくなってきて、
「こんな機能があったら便利だろうなあ。」と思って作り始めました。
◆工夫や苦労など
<選択範囲から左上の行位置と列位置、右下の行位置と列位置を取り出すユーザー定義関数>
作り始めたときは、選択した範囲をもとに、「 For Each Tmp in Slection 〜 Next Tmp 」という
構文を使っていましたが、これだと行や列が次の行や列に変わったときの処理が難しくなったり、
参照する順番を変更することができなかったので、結局、行の範囲と列の範囲を取得して
For 〜 Next文で処理するようにしました。
そして、範囲を渡すと位置を返すユーザー定義関数を作ろうと思ったのですが、
@左上の行位置、A左上の列位置、B右下の行位置、C右下の列位置 の4つはほぼ同じ処理をするので
1つの基本形を作って、スイッチをつけて、返す値を選択できるようにしました。
Function RC位置(範囲 As Range , スイッチ As Interger)As Long
(スイッチは、1→左上のR位置、2→左上のC位置、3→右下のR位置、4→右下のC位置)
<見た目と同じような感じになるようデータを結合する>
極力、見た目と同じような感じになるよう、データ結合するようにしました。
そのためには、セルの中で改行がある場合、単なるセルデータの結合だけではうまくいきません。
改行ごとにデータを分割して、1行目同士を結合し、2行目同士を結合し・・・と処理をしなければなりません。
そこで、Split関数を使うことにしました。
この関数は、指定した文字で、全体の文字列を分割し、配列に代入してくれる優れものです。
受け取る側の変数は、Variant型で宣言しておかないとダメなんですが、これひとつで簡単に処理ができました。
<データ内の改行の個数に合わせて、配列変数を設定する>
配列の大きさは、改行の個数によって変わってきます。
それで、動的配列を宣言し、Preserveを使ってセルの分割したデータを保持しながら広げていくようにしました。
また、実際に結合の処理をしようと思うと、行全体の値を格納するための配列が必要になってきます。
そのとき、どこからどこまで処理をすればいいのかわからなくなるので、LBound関数やUBound関数を使って
配列の下限や上限を求めて計算しました。
<アドインとして使えるようにする>
今回初めてアドインとして使うものを作りました。アドインを登録したときに、このマクロが使える
ようにするためには、イベントプロシージャを使います。
Private Sub Workbook_AddinInstall()
この中に書くことで、アドインを登録したときに、右クリックにメニューを追加して使えるようにしたり、
削除したときにメニューから削除したりと、そんな処理ができるようになりました。
◆最後に
ここまで、熱心に読んでくださってありがとうございました。
プログラムを組んだことのない方には、わかりにくい内容だと思いますが、これを機会にエクセルの
マクロに興味を持っていただければ、と思っています。
エクセルは、本当に楽しいツールです。自分の思いや考えが表現できます。
そんなエクセルに、日々、感謝です。