2006 年 5 月 4 日 22 時 18 分

入り口のインタフェース


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


Excel は縦横にセルが並んだワークシートを持つ。
ののぐらむなどには丁度いい構造をしているため、
問題は容易にワークシート上に入力することができる。

まず最初に設計する必要があるのは、
Excel からプログラムを実行する入り口だ。

いろんな問題に対応できるようにするため、
プログラムの起動はマクロの実行から行ないたい。
マクロには引数が渡せないため、
問題の解答欄の範囲を選択してから呼び出す決まりにしよう。

では、実装を始めよう。
まずは Excel を起動し、新しいブックを作る。
心配性なので、puzzle.xls などと名前をつけて保存。
ツール⇒マクロ⇒Visual Basic Editor で VBE を開く。

プロジェクトエクスプローラのツリーに、
VBAProject (puzzle.xls) があるので、
アイコンを選択し、プロパティウィンドウの
(オブジェクト名)を「Nonogram」とかに変えておこう。

マクロは引数なしの Sub ルーチンであるため、
挿入⇒標準モジュールを選択肢、
プロジェクトに標準モジュールを追加する。
上記同様に、名前は、「Macros」などにしておこう。

さて、コードを書いていこう。
まずは、「Option Explicit」一番上に書いておく。
Visual Basic 開発の鉄則だ。

まずは、起動コードを作ろう。
名前は、「Solve」としておこう。

Public Sub Solve()
End Sub

プロシージャには引数がないため
解答範囲を選択しているセル範囲として受け取る。
選択範囲は Selection プロパティで取得できる。

Selection プロパティは Object 型だが、
ワークシートのセル範囲が選択されていた場合、
Range クラスのインスタンスが格納されている。

Range クラスは非常に数多いメソッドやプロパティを持ち、
複雑なクラスであるので、ヘルプを眺めても理解しにくい。
なので、必要なものだけを覚えておけば十分だ

セル範囲の幅は、Columns.Count で取得できる。
同様に高さは、Rows.Count で取得できる。

Call MsgBox("幅: " & Selection.Columns.Count)
Call MsgBox("高さ: " & Selection.Rows.Count)

ではここまで書いて試してみよう。
Excel に戻り、適当な範囲を選択して、
マクロを実行してみる。

ツール⇒マクロ⇒マクロ(もしくは、Alt+F8)を押し、
Solve を選んで実行する。
幅と高さのメッセージが表示された。

========== 標準モジュール: Macros ==========

Option Explicit

Public Sub Solve()
    Call MsgBox("幅: " & Selection.Columns.Count)
    Call MsgBox("高さ: " & Selection.Rows.Count)
End Sub

========== end of Macros ==========



Copyright (c) 1994-2007 Project Loafer. All rights reserved.