EXCELで血統表を作ろう!

レベル11  もっとすごいマクロに挑戦  その1

−インブリード馬を表示する−

EXCELで血統表を作ろう!  目次へ
トップページへ


【血統表中のインブリード】

レベル9までで5代血統表が作れるようになったと思いますが,この血統表,何か物足りない気がしませんか?
そうです,インブリード(クロス)になっている馬がどれかわからないんです.

よく見る血統表では,インブリード馬の馬名が太字になっていたり,文字の色が変えてあったりして,一目で何がインブリードになっているのか(あるいはインブリードがないのか)がわかるようになっています.

どの馬がインブリードになるのかは,それぞれの馬(血統表)によって異なりますので,今までのように関数で対応するのはほとんど不可能です.
そこで,血統表の中からインブリード馬を探し,その馬名のフォントを変えるマクロを組んで本格的な血統表を作成してみましょう.


【インブリード馬を表示するには】

「血統表中のどの馬がインブリードになっているか」を調べるには,表の中のすべての馬の名前を調べ,重複しているものをリストアップすればいい...
ような気がしますね.

しかし,このようなやり方で重複馬をすべてインブリードと見なして表示させると,次のような血統表になってしまいます.
青の太字がインブリード馬です)


*ノーザンテースト     牡 栗毛 1971年生

 Northern Dancer
     鹿毛 1961







 Lady Victoria
     黒鹿毛 1962
 Nearctic
     黒鹿毛 1954



 Natalma
     鹿毛 1957
 Nearco
     黒鹿毛 1935

 Lady Angela
     栗毛 1944
 Pharos
 Nogara
 Phalaris
 Scapa Flow
 Havresac
 Catnip
 Hyperion
 Sister Sarah
 Gainsborough
 Selene
 Abbots Trace
 Sarita
 Native Dancer
     芦毛 1950

 Almahmoud
     栗毛 1947
 Polynesian
 Geisha
 Unbreakable
 Black Polly
 Discovery
 Miyako
 Mahmoud
 Arbitrator
 Blenheim
 Mah Mahal
 Peace Chance
 Mother Goose
 Victoria Park
     鹿毛 1957



 Lady Angela
     栗毛 1944
 Chop Chop
     鹿毛 1940

 Victoriana
     栗毛 1952
 Flares
 Sceptical
 Gallant Fox
 Flambino
 Buchan
 Clodagh
 Windfields
 Iribelle
 Bunty Lawless
 Nandi
 Osiris
 Belmona
 Hyperion
     栗毛 1930

 Sister Sarah
     黒鹿毛 1930
 Gainsborough
 Selene
 Bayardo
 Rosedrop
 Chaucer
 Serenissima
 Abbots Trace
 Sarita
 Tracery
 Abbots Anne
 Swynford
 Molly Desmond


*ノーザンテーストは Lady Angela:3×2 のインブリードを持ちますが,重複する馬の名前をすべてインブリードとしてしまうと,Lady Angela の両親やそのまた両親までインブリードということになり,本当のインブリード馬がどれかわからなくなってしまいます.
また,Lady Angela の父親以外に Hyperion が含まれていれば,これは当然 Hyperion のインブリードを持つことになりますが,この場合との区別がつきません.
したがって,単純に重複する馬を選び出すだけでは,正しく表示できないことになります.

では,ある馬とその子供を1つの組として,組ごとの比較で調べる方法を考えてみましょう.

Lady Angela とその子供を1つの組とすると,血統表中には Lady Angela の組が2つ存在します.

    Lady Angela − Nearctic
    Lady Angela − Lady Victoria

この2組は,親は同じですが子供は異なります.
このような場合,親をインブリード馬と見なします.
親と子が全く同じ組合せはインブリードではないと考えれば,Lady Angela の父親である Hyperion の組

    Hyperion − Lady Angela
    Hyperion − Lady Angela

はインブリードにはなりません.

このように,血統表中のある馬とその子供を1つの組として考え,

    親が同じで子が違うとき,その親はインブリード馬である

とすれば,正しくインブリード馬を選ぶことができます.


【プログラムの流れ】

インブリード馬を探す方法がわかりましたので,これをメインの部分とし,マクロ全体を考えていきます.

1.表のフォントを元に戻す(初期化)
まず最初に,血統表中の馬名のフォントを元に戻します.
...というと何か変な気がしますが,このマクロは新しい血統表を作成するたびに動かすものですから,前のマクロの結果(フォントの変更)が残っていると,あとで作成した表のフォント変更が正しく行われなくなります.
そのため,最初に表全体のフォントを元に戻す操作が必要になります.
ここでは,

    フォント名=MS 明朝
    スタイル=標準(太字なし)
    サイズ=11(ポイント)

の設定を初期値とします.
インブリード馬の表示は次のようになります.

    フォント名=MS ゴシック
    スタイル=太字
    サイズ=12(ポイント)

2.変数の宣言
血統表の馬名は毎回異なりますから,馬の名前を直接マクロに書き込み,比較することはできません.
そこで,名前をつけた「仮の箱」を用意しておき,箱の名前を使ってマクロを記述します.
この仮の箱は「変数」と呼ばれます.変数はその名の通り,「値が変わる数」で,数学の“”(エックス)や“”(ワイ)のように,そのときどきで違う値を代入して使う記号だと考えてください.
必要な変数を用意し,それぞれの変数に違う名前をつけ,変数に入る値の種類を限定することを「変数の宣言」といいます.

3.変数に値を代入する
変数に名前をつけたら,その変数に実際の馬の名前を代入します.
このときも,“ノーザンテースト”のような具体名を直接マクロに記述することはできませんから,「Aという変数には,このセル番地に入っているデータを入れなさい」「Bという変数には,あのセル番地に入っているデータを入れなさい」−−というように指示します.

4.親子の組を比較する
いよいよメインプログラムの記述です.
変数を2つ使って親子の組を作り,2つの組で親同士が同じかどうか,子同士が同じかどうかを比較します.
親が等しくかつ子が異なるときは,親をインブリード馬とし,親に当たる変数のフォントを変更します.この条件に当てはまらないときは,何もしません.
このように,条件によって異なる処理をさせる場合には,EXCELの関数で用いられる“IF”と同じように働く“If”というキーワードを使います.


プログラムのだいたいの構造はわかりましたか.
では,いよいよ次のレベル12で実際のマクロを書いてみましょう.



レベル12へ
EXCELで血統表を作ろう!  目次へ
トップページへ


address=http://cosmarr.com