190 第二 部 ノ 表グラフサー ビス Sub Text input Change() form hyo. Grid hyo. Text = Text input. Text End Sub 入力ウインドウをアクテイプにしたまま、 まり、テキストボックスの値と、選択中のセルの値は連動して変化するということです。 テキストボックスの変更された値は、選択中のセルに反映されるようにしています。つ Change イベントは、テキストボックスの値が変更されるたびに発生します。 Sub Text input KeyDown (keycode As lnteger , shift As lnteger) 4.4 3 す。 トに記述してあります。 KeyDown は、文字キー以外のキー操作に対応するイベントで 入力ウインドウ (form inp. frm) に配置してあるテキストボックスの KeyDown イベン キー操作に応じて選択セルを移動する 0 0 0 Select Case keycode Case key return If form hyo. houkou ( 0 ) . Checked = True Then On Error Resume Next form hyo. Grid hyo. LeftCol = form hyo. Grid hyo. LeftCol 十 1 form hyo. Grid hyo. C01 = form hyo. Grid hyo. C01 十 1 On Error Resume Next form hyo . Grid hyo . TopRow = form hyo . Grid hyo . To- Else pRow 十 1 If form hyo. Grid hyo. Row = 0 Then form hyo. Grid hyo. Row = form hyo. Grid hyo. Row ー 1 form hyo. Grid hyo. TopRow = form hyo. Grid hyo. TopRow ー 1 On Error Resume Next Case key up End If form hyo. Grid hyo. C01 = form hyo. Grid hyo. C01 form hyo. Grid hyo. LeftCol = form hyo. Grid hyo. LeftC01 On Error Resume Next If shift = 1 Then Case key left End If form hyo. Grid hyo. Row = form hyo. Grid hyo. Row 十 1
196 graph. Graph 1. LegendText = form hY0. Grid hY0. Text graph. Graph 1. LabelText = form hY0. Grid hY0. Text 第二 部 → 0 → ノ 表グラフサー Text ビス form hyo. Grid hY0. Row = r For c = 1 To form graph. Graph 1. NumPoints form hyo. Grid hY0. COI form graph. Graph 1 . GraphData = form hY0 . Grid hY0 . Next c Next r Next i Else form hyo. Grid hyo. Row = 1 For i = 1 To form hyo. Grid hyo. Cols form hyo. Grid hyo. C01 - 1 If form hyo. Grid hyo. Text If i > 1 Then ' Then Exit For form graph. Graph 1 . NumSets form graph . Graph 1 . Num- For i = 2 To form hyo. Grid hyo. Rows form hyo. Grid hyo. Col = 0 Next i End If Sets 十 1 form hyo. Grid hyo. Row = i If form hyo. Grid hyo. Text ー If i > 3 Then ' Then Exit For form graph . Graph 1 . NumP0ints form graph . Graph 1 . NumPoints 十 1 End If Next i form form form Next i form form れ For i = 1 To form graph. Graph 1. NumSets form hyo. Grid hyo. Row = 1 1 1 form hyo. Grid hyo. COI = 0 graph. Graph 1. ThisSet hyo. Grid hyo. C01 - For i = 2 To form graph. Graph 1. NumPoints 十 1 hyo. Grid hyo. Row = i graph. Graph 1. ThisPoint ー 1 Next i NumSets = 1 To form graph. Graph 1. NumP0ints * form graph. Graph 1 .
イイプログラムの行う主な処理と、 . 対応するコード form hyo. Grid hY0. Row = 1 End If Case key right If shift = 1 Then On Error Resume Next 191 form hyo. Grid hyo. LeftC01 = form hyo. Grid hyo. LeftC01 十 1 form hyo. Grid hyo. C01 = form hyo. Grid hyo. COI 十 1 End If Case key down On Error Resume Next form hyo. Grid hyo. TopRow = form hyo. Grid hyo. TopRow 十 1 form hyo. Grid hyo. Row = form hyo. Grid hyo. Row 十 1 End Select 0 form input. Text input. Text = form hyo. Grid hyo. Text End Sub セルへのデータの入力・訂正は、基本的にはマウスでセルを選択し、入力ウインドウを 使い行います。しかし、補助的にでもキーポードでのセル移動も行えなければ、やはり不 便なときもあります。 上記のコードは、入力ウインドウをアクテイプにしたまま、キーポードで選択セルを変 更するためのものです。 どのキー押したかによる分岐 Select Case keycode Slelect Case は、続けて記述してある変数や条件式の値によって処理の分岐を行えるス テートメントです。この場合には、 keycode 、すなわち何のキーを押したかが処理を分岐 Case key return ②リターンキーを押したときの処理の一部 する条件となります。 If form hyo. houkou ( 0 ) . Checked = True Then ューバーのコントロール配列「 houkou ( ) 」のどちらが選択状態にあるかを調べ、「リ form hyo. Grid hyo. COI = form hY0. Grid hY0. COI 十 1 form hyo. Grid hyo. LeftC01 = form hyo. Grid hyo. LeftC01 十 1 On Error Resume Next
プログラムの行う主な処理と、対応するコード form hyo. Grid hyo. Row = 1 Then If gu ( 0 ) Graph 1. NumSets ー Graph 1. NumPoints = 2 Dim i, C, r On Error Resume Next Sub Form Activate ( ) きにも行われる処理です。 graph. Graph 1. LegendText = form hyo. Grid hyo. Text graph. Graph 1. LabelText = form hY0. Grid hY0. Text 0 2 級 For i = 1 To form hyo. Grid hyo. Cols 195 form hyo. Grid hyo. Col 1 If form hyo. Grid hyo. Text If i > 2 Then ' Then Exit For form graph . Graph 1 . NumP0ints form graph . Graph 1 . 0 NumPoints 十 1 For i = 2 To form hyo. Grid hyo. Rows form hyo. Grid hyo. Col = 0 Next i End If form hyo. Grid hyo. Row = i If form hyo. Grid hyo. Text ー If i > 2 Then ' Then Exit For Sets 十 1 → form graph. Graph 1 . NumSets form graph . Graph 1 . Num- End If 0 0 Next i form れ form Next i form form form Next i For i = 1 To form graph. Graph 1. NumPoints form hyo. Grid hyo. Row = 1 hyo. Grid hyo. Col = i graph. Graph 1. ThisP0int ー form hyo. Grid hyo. C01 = 0 1 For i = 2 To form graph. Graph 1. NumSets 十 1 1 graph. Graph 1. ThisSet hyo. Grid hyo. Row = i = 2 To form graph. Graph 1. NumSets 十 1 For i = 1 To form graph. Graph 1. NumPoints * form graph. Graph 1. NumSets
202 第二部イ表グラフサービス ThisPoint が 3 になったところで、 1 に戻ります。 これは、グリッド側から見ると、次のように数値データを設定していることになりま ー GraphData に数値データを設定するときの順番 す。 表クラフサーヒス 方イル旧編集旧設定 ( 工 ) グデ 0 1 月 2 月 3 月 5 ロロ 望 52 ] 55 ロ 備品脅 交際費 消耗品費 0 第 これを、 ForæNext ステートメントを二つ組み合わせることで行っているのが、前述 のコードです。 0 列方向が x 軸のときのデータの取得 これは、列方向を X 軸とするときにデータを調べるコードです。さきほどの行方向を X 軸にするときとほば同じ手順を、処理方向だけを変えて行っています。 Else form hyo. Grid hyo. Row = 1 For i = 1 To form hyo. Grid hyo. Cols form hyo. Grid hyo. Col 1 If form hyo. Grid hyo. Text If i > 1 Then End If Then Exit For form graph. Graph 1. NumSets = form graph. Graph 1. NumSets 十 1 Next i form hyo. Grid hyo. C01 = 0 For i = 2 To form hyo. Grid hyo. Rows form hyo. Grid hyo. Row = i ” Then Exit For If form hyo. Grid hyo. Text If i > 3 Then form graph. Graph 1. NumP0ints = form graph. Graph 1. NumP0ints 十 1 ・ End If Next i form hyo. Grid hyo. Row = 1
イイプログラムの行う主な処理と、対応するコード For i = 1 To form graph. Graph 1. NumSets form graph. Graph 1. LegendText = form hY0. Grid hY0. Text 1 form graph. Graph 1. ThisSet ー form hyo. Grid hyo. Col 1 203 Next i form form form Next i form hyo. Grid hyo. C01 = 0 For i = 2 To form graph. Graph 1. NumPoints 十 1 hyo. Grid hyo. Row = i graph. Graph 1. ThisP0int ー 1 graph. Graph 1. LabelText = form hyo. Grid hyo. Text 0 form graph. Graph 1. GraphData = form hY0. Grid hY0. Text form hyo. Grid hyo. Row = c For c = 2 To form graph. Graph 1. NumPoints 十 1 form hyo. Grid hyo. C01 - For r = 1 To form graph. Graph 1. NumSets For i = 1 To form graph. Graph 1 . NumPoints * form graph. Graph 1. NumSets End If Graph 1. DataReset = 5 If gu(9) < > ”” Then 凡例を消す End If Next i Next r Next c 配列変数「 gu ⑨」には、次のようなメニューで凡例を消す設定をしたときにだけ値が代 入されます。上記のコードは、その場合の処理です。
イイプログラムの行う主な処理と、対応するコード 193 します。「 On ErrorResumeNext 」を使うと、そうした状態を回避できます。ただし、ど こにでも使って良いというものではなく、発生するエラーが限られていて、想定できる場 合に限られます。でなければ、プログラムにとって致命的なエラーをも見過ごすことにも なりかねません。なお、「 On Error Resume Next 」のスコープ ( 有効範囲 ) は、その Sub プロシージャの中だけです。他の Sub プロシージャで発生したエラーを無視することは ありません。 3 リターンキーでアクテイプセルを下方向に移動する Else On Error Resume Next form hyo. Grid hyo. TopRow = form hyo. Grid hY0. TopRow 十 1 form hyo. Grid hyo. Row = form hyo. Grid hyo. Row 十 1 End If これは、メニューバーのコントロール配列「 houkou ( 0 ) 」にチェックマークがない場合、 すなわち houkou ( 1 ) にチェックマークがある場合の処理です。「リターンキーで下方向に (D) 」が選択されているときということになります。 「リターンキー」で右方向に ( R ) 」の場合と同様ですが、今度はグリッドの上端に表示す これに 1 を加えると、 これで、グリッドが下に On Error Resume Next If shift = 1 Then : Case key left 0 左カーソルキーの押されたときの処理 アクテイプセルが下のセルに移動します。 Row プロバティは、アクテイプセルの行番号を表すものです。 移動することになります。 るセル行番号を表す TopRow プロバティに 1 を加えています。 End If form hyo. Grid hyo. C01 = form hyo. Grid hY0. C01 form hyo. Grid hyo. LeftCol = form hyo. Grid hY0. LeftC01 左カーソルキーが押されたときの処理を行います。 調べて、その場合にのみ「 End If 」までの処理を行っています。 SHIFT キーを押しながら 「 If shift = 1 Then 」で、 SHIFT キーと同時に左カーソルキーが押されたかどうかを
199 イイプログラムの行う主な処理と、対応するコード る ) ます。実際のデータ項目の数を NumPoints プロバティに代入します。 Then ExitFor 」は、アクテイプセルに値がない場 「 If form hyo. Grid hyo. Text = 合には、 ForæNext ステートメントによる繰り返しを終了するというコードです。 ・ FoevNext ステートメントの繰り返しを終えるタイミング こにアクテイプセルが移動した時点で For—Next ステートメントによる 繰り返しを終える 方イル旧編集旧 設定 ( I ) グデ ( 印 1 月 2 月 3 月 4 月 備品費 7 韜 6 63 日 6 5 ロロ 1442 ロ 交費 292 ロ・ 1 門日ロ 375252 74 ロロ 消耗品費日ロ日ロ 12195 1 ロ 55 ロ 643 ロ 表クラフサーヒス 0 データ系列数を数える form hyo. Grid hyo. COI = 0 For i = 2 To form hyo. Grid hyo. Rows form hyo. Grid hyo. Row = i If form hyo. Grid hyo. Text ー ' Then Exit For If i > 2 Then End If form graph. Graph 1. NumSets = form graph. Graph 1. NumSets 十 1 Next i データ項目のときと同じ手順でデータ系列の数をカウントします。 Row プロバティを固定して、 ForæNext ステートメントによる繰り返しを行います。 3 データ項目名を調べる form hyo. Grid hY0. Row = 1 For i = 1 TO form graph. Graph 1. NumP0ints form hyo. Grid hY0. COI ー form graph. Graph 1. ThisP0int Next i 1 1 form graph. Graph 1. LabelText = form hY0. Grid hY0. Text
ー 94 、第 - : 二部 表グラフサービス イ 3 上カ ーソルキーの押されたときの処理 Case key up On Error Resume Next form hyo. Grid hyo. TopRow = form hyo. Grid hyo. TopRow ー 1 form hyo. Grid hyo. Row = form hyo. Grid hyo. Row ー 1 If form hyo. Grid hyo. Row = 0 Then form hyo. Grid hyo. Row = 1 End If TopRow プロバティと Row プロバテイから 1 を引くことで、グリッドに表示されてい るセル範囲の変更と、アクテイプセルの移動を行っています。 後半の 3 行は、アクテイプセルが行番号 0 のセルに移動してしまった場合の処理です。 表グラフサービスで使っているグリッドは、 1 行目をセル幅変更用の項目セルにしていま す。データの入力が行えないようになっているので、行番号 0 のセルにアクテイプセルが 移動してしまった場合に、行番号 1 のセルをアクテイプセルにしています。 ・グリッドにおける行番号の振られ方 方イル旧編集旧設定 ( 工 ) グデ ( 印 表クラフサービス 0 1 号号 番番 行行 証 アクテイプセルの値を入力フォームに表示 form input. Text input. Text = form hYO. Grid hYO. Text グリッドに表示するセル範囲と、アクテイプセルの変更を行った後に アクテイプセル の値を入力フォームのテキストボックスにコピーしています。 グラフの表示 グラフフォーム (form gra. frm) の Activate イベントに記述しています。表フォーム のグラフメニューがクリックされるだけでなく、グラフフォームがアクテイプになったと 4.4 4
200 第二部イ表グラフサービス LabeIText プロバティは、データ項目名を表します。また、 ThisPont プロバティはグ ラフの項目位置を表します。 ThisPoint 1 ThisPoint 3 ThisPoint 2 ThisPoint LabelText LabelText LabelText 項目 A 項目 B 項目 C ThisPoi nt プロバティの値を切り替えることで、同じ LabelText プロバティが複数の項目名を持つ。 データ項目の数は NumPoints プロバティでカウント済みです。その数分 For—Next ステートメントを繰り返して、 ThisPont プロバティごとに LabelText プロバティを設 定していきます。 0 凡例を設定する form hyo. Grid hyo. CoI For i = 2 To form graph. Graph 1. NumSets 十 1 form hyo . Grid hyo. Row = i form graph. Graph 1. ThisSet ー form graph. Graph 1. LegendText = form hyo. Grid hyo. Text Next i LabelText 項目 D 1 ThisSet プロバティと LegendText プロバティの関係も、 ThisPoint プロバティと LabeIText プロバティの関係と同じです。 ThisSet プロバティの値を切り替えることで、 LegendText プロバティは複数のデータ系列名を持ちます。 LegendText プロバティに設定したデータ系列名は、凡例としてグラフに挿入するこ とができます。 グラフにする数値データを設定する For i = 1 To form graph. Graph 1. NumPoints * form graph. Graph 1. NumSets For r = 2 To form graph. Graph 1. NumSets 十 1 form hyo. Grid hyo. Row = r For c = 1 To form graph. Graph 1. NumPoints form hyo. Grid hyo. CoI = c form graph. Graph 1. GraphData = form hyo. Grid hyo. Text Next c