ExceH＝よるネットワーク計画法（1）グラフの表示と接続行列
古林 隆
l日l…lltlll…ltt…………lllll…llll…ll…ll…l…ll…l…ll……lll…l…ll…l…lll……llll……ll……lll…l…ll…l…ll………l…lll……ll………l…lll……l……lllll……llll…lllll……llll……llll……ll……州……llH……l…………‖……lllll…l0．はじめに時系列データなどを表にして，その上で合計や比率を計算したり，結果を棒グラフなどで表示したりするのに，Excelがよく使われている．また，図形描画を用いて，建物の簡単な平面図や作業の流れ図を描くこともできるし．マクロ（プログラム）を作成すれば，備え付けのツールだけではできない計算を実行するこ

図1 NPlのシートともできる．
このように，Excelは，いろいろな使い方ができる「実行」の順にクリックして，マクロを実行すると，が，ネットワークのデータを表（セル）に書き込んで，二点を結ぶ無向の枚が表示される．図5は，有向の枝それを入力し，ネットワークを描くマクロを作成するを表示したものである．ここで，セルの数値を変えてと，点の位置や大きさなどが気にいらなければ，デーマクロを再実行するときは，「図形描画」の中の「オタを変えることによって，簡単に絵を描き変えることブジェクトの選択」（「矢印」のアイコンをクリック）ができるし，計算結果（最短路などの最適解）を示すで，一度表示した図を選択して，それを削除（「はさネットワークを自動的に（マウスをあちこち動かしてみ」のアイコンをクリック）する必要がある．

お絵かきをしなくても）出力することもできる．
そこで，Excelのマクロで作成した最短路問題や最なお，以下では，無向の枝を線分，有向の枝を矢線と言い換えることがある．

小木問題などのネットワーク計画法を紹介する．
◆プログラムの説明

1．点と枝の表示

図3に示した三つのサブルーチンの機能，引数の意

はじめに，二点とそれらの間を結ぶ枝（線）を表示

味は，次のとおりである．

するマクロを示す．

［NPl］図1に示すように，二点の座標と枝の向きの有無（1：有，0：無）をセルに書き込むと，それらを結ぶ枝を表示する．
メインプログラムを図2に，その中で呼びだすサブルーチンプログラムを図3に示す．

図4に示すように，セルB4，C4に一番目の点のSub npl（）

点と枝の表示Dim xl，yl，X2，y2，Z，r．Cn，CS，Ca As［ntegxl＝Cells（4．2）：yl＝Ce＝s（4，3）
x2＝Cells（5，2）：y2＝Cel［s（5，3）
z＝Cells（4，5）
「＝10： Cn ＝ 5：CS ＝ 4：Ca ＝ 2

Ⅹ座標，y座標，セルB5，C5に二番目の点のⅩ座

1f z ＝ O Then

標，y座標，E4に0を書き込んで，「ツール」→「マEIse

CaL［arrow（xl，yl，X2，a C「nnC C︶ ︶

r r

V一 y

1 2

1999年4 月号

X X〒184−8584 ′ト金井市梶野町3−7−2

CaH node（2，l∵Endlf
Ca［L node（l，こばやし たかし 法政大学︶

2yクロ」→「マクロ」（または「VisualBasic Editor」）→

Callsegment（xl，yl，X2，y2，CS）

End Sub

図2 NPlのメイン・プログラム© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

（31）209・こ∴㌧ ∴．‥′● ・・．・・．．．）
・∴ ∴・こ・∵−：Jしナ・・∴ ・・∴∴・：三十、：・、・・ト∴・・ご∴・∴＝．・、 √S℡蓋ec七藁on．Shap￠Range．Fi5トドo㌻eCo蚤or．ScれemeCoioモ′ ニC

こ・・ ∫・ま．：∴：こ．・∴

鮎服㍑酬馴乱馴嘲押侮叩酢−『＝川。温①閤はSe虚￠C七ioむ1．Characters．†e丸七 ＝Cれ㌻＄（48＋圭）
酬凍摘 爵副偲離ル即．酢■馴㈹．S義之e てニ 篭3

臥適 Ⅵ伸輔翫適卜凱飽、−・・∴ニ：．．・Jモ ー′‥・．．ヒ・ご 〜∴・∴・．・、ト．・‥こ・∴・ト恒・：ミ・、∴し；こ：こ∴．二〜ノつ・、 ．ニ亡・‥・．

Se】ection．ShapeRange．L汗帽．Weight＝2＃Se∃ect㌫on．ShapeRange．Line．ForeCojor．SchemeCoさor ＝c翫摘卜凱胞∴ ・・．．．・こ ∴ こ ∴．・ ∴副 ＝＝乳那（（x⑳山Xず）A2♯（卵∵∵押）八2）「・・・−、xx◎…（野＊xザ♯喝＊x◎）：yye＝（p輝yザ♯q率y￠）
XXf：二 Xe 十 Xf−XXe：〜′yfニ＝ye十 yf−yye‥・・さ∴ここ・− ン惑・・・ご・．ご、ニ・、∴一己．■・・−∴・三 ∴：！： ：・ご −∴ ミ∴

Seiection．ShapeRange、Line．Weight＝2＃
Se竜ec七重on．ShapeRange，Line▲ForeCoior，SchemeCoJor：＝Sekect巨α甘ShapeRange．LineEndArrowhea【羞Styie＝msoArrowheadTriangle
Select毒on．ShapeRange．Line．EndArrowheadLengthニ＝msoArrowheadLengthMedium
Se，ecticm．ShapeRange．Line、EndArrowheadWid七h＝msoArrowheadWidthMedjun
軌痛巨凱地
図3 サブル」テン ・プログラム

色番号と色の対応は，衷1のとおりである。

くサブプ♭通草ン mode〉

機能 点（悶）を表示する。

〈サブル出テン segmemt〉

引数i，Ⅹ，y，『9 C

機能 二点を結ぶ線分を表示する。

引数 Ⅹe9 ye，Ⅹf，yf，C

i：点の番号
Ⅹ：Ⅹ座標）紀：線分の始点（一端）のⅩ座標

y：y座標

ye：始点のy座標

r：半径Ⅹf：線分の終点（他端）のⅩ座標

c：色番号

yま：終点のy座標

座標（Ⅹ，y）を中心にして，半径rの円を描き，c：色番号中を色番号cの色で塗りつぶす。点の番号も表示する。

匡川ト ニNPlの実行例（1）那帽（32）

図5 NPlの実行例（2）© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

オペレーションズuリサーチ

表1 色番号と色色番号2

色3

たは0が書き込まれるので，
45

6z＝Cells（4，5）

7

白 赤 緑 二∃三 日 黄 紫 プb 二亡二によって，それを一度変数Zに入れて，Z＝0であれば，サブルーチンSegmentを呼び出し，そうでなけ

座標（Ⅹe，ye）と座標（xf，yf）の間を結ぶ線分

れば（z＝1であれば），サブルーチンarrowを呼びを色番号Cの色で表示する。

出している．なお，点の表示（サブルーチンnodeの〈サブルーチン arrow〉呼び出し）が後になっていることに注意されたい．

機能 二点を結ぶ矢線を表示する．

（矢線の表示だけであれば，点の表示が先でもよい．）

引数 Ⅹe，ye，Ⅹf，yf，r，C

なお，点の色は，黄色（色番号cn＝5），線分の色はxe：矢線の始点（根元）のⅩ座標

青（同cs＝4），矢線の色は赤（同ca＝2）になって昨：始点のy座標いる．

Ⅹf：矢線の終点（先）のⅩ座標

X座標は，左端が0であり，右が正の向きである．

yf：終点のy座標列との関係は，列の幅によって変わるから，適当に決r：点の半径：めて，後で変更すればよいが，幅5がだいたい座標間c：色番号隔100に対応している．y座標は，上端が0であり，座標（xe，ye）から座標（Ⅹf，yf）へ向かう矢線を色番号Cの色で表示する．

下が正方向である．行の高さ10が，だいたい座標間隔100に対応している．図1では，列の幅を7．5，行の高ここで，矢線が点と重ならないようにするために，さを15とした．

長さを短くしてあることに注意されたい．
これらのプログラムは，→度お絵かき（図形描画）◆図形描画による図形の変更をしたときの「マクロの記銀」から，不要の部分を削一度表示した図形（点や枝）は，「図形描画」で除して作成した．必要なことがどこに書いてあるのか「オブジェクトの選択」をすれば，変更できる．点のがわかりにくい市販の解説書を読むよりはるかに手取色を変えたいときは，「塗りつぶしの色」を，杖の色り早い．

を変えたいときは，「線の色」をクリックすればよい．

次に，図2のプログラムでセルに書き込んだデータを読みとる部分を説明する．

また，図形全体を移動したいときは，マウスを図形に近づけて，4方向への小さい矢印が表示されたら，マセルは，Cellsという名前の2次元配列の要素に対ウスをドラッグすれば（押したまま動かせば）よい．

応している．1番目の添え字は，行番号，2番目の添したがって，点の座標を決めるときに，絶対的位置をえ字は，列番号（ABCの順に，1，2，3，……があまり気にする必要はない．

対応）である．たとえば，セルB4に50を書き込むと，Cells（4，2）の値は，50になる．

点毎に位置を変えることも可能であるが，それに接続している枝は，一緒に移動しないから，一部の点のCellsは，普通の配列と同じように使えるが，セルに数値を書き込むことは，データの入力（read文，scan文などの実行）に当たるから，一度プログラムで使う変数に入れておくほうが，プログラムがわかりやすいし，他の言語に変換するときも楽である．
図1では，セルB4，C4に一番目の点のⅩ座標，y座標を書き込むので，位置を変えたいときは，座標を変えて，もう一度マクロを実行したほうがよい．

2。点対点接続行列
次に，有向グラフを表示し，その点対点接続行列を出力するマクロを示す．
ここで，点対点接続行列とは，大きさ（次数）が点Ⅹ1＝Cells（4，2）の数であり，要素が次のように定まっている正方行列

yl＝Cells（4，3）

G＝（g（i，j））である．

により，変数Ⅹ1，ylにその点のⅩ座標，y座標が入点iから点jに向かう枝が存在するとき，る（記憶される）．同様に，変数Ⅹ2，y2に二番目のg（i，j）＝1，存在しないとき，gG，j）＝0

点のⅩ座標，y座標が入る．とする．

セルE4には，枝の向きの有無にしたがって，1ま1999年4 月号［NP2］図6に示すように，点の数n，枝（矢線）© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

（33）211

Sub np2（）

点対点種続行列Di汀r r、［¶，主．∴ kJr C11．Ca As hteger
肌m x（瑠0），y（瑠0），e（20），f（20）As 8n七倍g即じⅧ1g（1010）。As hteger
lrニ〇e卜s（勘り「＝Ce巨s（4，2）
m封 箋 ＝ニ1Tの『X（り ニニ侮日蟻（3＋i。菰）：V（呂）＝Ge日日s（3十 ㍉ 5）
闊ex七i
机紺k ＝瑠 Wの 汀農（吐く）＝払巴＝s（3＋k」ブ）：f（k）＝Ge＝s（3＋k，8）
Nexて ぺ−】二 佗： Cn 二 5：Ca 二 4
ゲラブこ汁）表示

Fo′二 て To r〇∂こnOde（i．x（りy（i）．「．cn）㈹位X七 箋『馴■lく ＝＝ 瑠 釣っ 打

白 ＝二e（k）：」＝ず（k）㍍品川 a㌢『￠W（x（i），y（i），×（j）．y（j）．「，Ca）Ne）、て kタ 接続行列の作成
Fo卜・ミ ニ1To rl
机㍍」＝『「k〉 ng（巨 j）ニ岱Nex〔の数m，各点のⅩ座標，y座標，各校の始点e9 終点

摘ex七 巨F即 k ＝1甘o m

fをセルに書き込むと，グラフを表示し，その点対点

気 ＝e（k）：j＝＝f（k）：g（眉，j）＝瑠Nex七 k接続行列を指定されたセルに出力する。
プログラムを作成する前に，衷2のような入出力に使用する変数とセル番号の対応表を用意しておくとよ

接続行列の出力For ∴ 二1To rl
翫膵」＝ 頂「は》nG但＝s（22＋ 量，2＋」）＝g（i，」）Nexlこ ＿し1

プログラムを闘7に示す（サブルーチンはNPlと同じである）。各点のⅩ座標，y座標は，それぞれ

錮exせ．占［nd SしJb

図7 NP2のプログラム

配列Ⅹ9 yに9 各校の始点，終点は9 それぞれ配列e，fに記憶されている。点対点接続行列は，配列gに作成されるが，要素g（i，j）を出力する（書きこむ）セルの行番号は9 22＋ま，列番号は，2＋jであるから，Ce且且s（22＋i9 2十j）＝g（i，j）と蕃8ナばよい。
実行例を園8に示すひ（列の幅は9 例1の2／3になっ（次号に続く）ている冊）表2 入出力に使う変数とセル番号の対応
変数
n

点の数
枝の数

Ⅹ（i）

点iのⅩ座標y（i）

点iのy座標

e（k）

枝kの始点

f（k）

枝．kの終点g（i，j）那帽（34）

接続行列の（i，j）要素3十k，822十i，2＋j© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

図8 NP2実行列

オペレーションズ。リサーチ