[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『構造化された・・・とは?』(ム所暮らし十年) エクセルについての質問ではなく、プログラミング一般の質問ですので 場違いかもしれません、もしそうならお詫びのうえ、捨て置くか、管理人権限で 削除していただくようお願いいたします。
HelpでGoSubの項をよんでいましたら、終りのほうに、これを使用しないほうが より構造化された云々、とありましたが、構造化の意味がわかりません。 当方、フォートランをコーディングシートに鉛筆舐め舐め書いて、次は、出始めの ベーシックを我流で使っていた程度のレベルです。(ロータス123は、サンプルコードを 寄せ集めて、当座を凌いでおりました。) 適当な参考書を教えていただくだけでもよいのですが、お願いいたします。
>これを使用しないほうが >より構造化された云々、とありました VBAでは、Gosubステートメントはあまり使いません。 何故なら、これより洗練されたステートメントCall があるからです。 でも、VBAより、はるか昔のN88-Basicの時代では、 このGosub を使わないと構造化プログラミングの体をなさなかったのです。 Gosubは、その名残だと解釈してください。
>構造化の意味がわかりません これは、構造化プログラミングという言葉があるということが前提での 構造化された というワードだと思います。
では、この構造化プログラミングとは・・・。
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/Intro2Basic/Structure.html
リンク先にあるようにダイクストラという人が40年以上前に提唱した理論です。
構造化プログラミングの詳細は、リンク先を見ていただくとして・・・。
この構造化プログラミングの定義の一つに
階層構造を作る
というのがあります。
例
Sub ichinoseの認証() Dim a, b, c, d a = Application.InputBox("あんた名前は?") If a = "ichinose" Then b = Application.InputBox("としは?") If b = "函館で死んだ" Then c = Application.InputBox("昨日、何してた?") If c = "生きてた" Then Range("a1").Value = "おかえり" Else MsgBox "お前誰だ?" End If Else MsgBox "年齢じゃあねえ、土方のことを聞いたんだよ" End If Else MsgBox "おとといきやがれ" End If End Sub
これ、If 〜 Then 〜 Else 〜 end if の階層構造になっています。
でも、階層も三つも四つもとなると、要するに何をしたいのかがわかりませんよね? 昔は、この要するに何をしているのかをわかりやすくするために Gosub ステートメントを使いました。
Sub ichinoseの認証2() Dim a, b, c, d Dim 判定 As Boolean a = Application.InputBox("あんた名前は?") If a = "ichinose" Then GoSub ichinoseであるかの細かいチェック If 判定 = True Then Range("a1").Value = "おかえり" Else MsgBox "おとといきやがれ" End If Exit Sub ' ' ichinoseであるかの細かいチェック: 'Out 判定 true ichinoseである false ichinoseじゃあない 判定 = False b = Application.InputBox("としは?") If b = "函館で死んだ" Then c = Application.InputBox("昨日、何してた?") If c = "生きてた" Then 判定 = True Else MsgBox "お前誰だ?" End If Else MsgBox "年齢じゃあねえ、土方のことを聞いたんだよ" End If Return End Sub
プロシジャーichinoseの認証より、ichinoseの認証2の方が
同じ事をするのにステップ数が多いですが、それでもわかりやすいプログラムを 書きなさい ということを私は、教えられました。
が、前述したように今では、この役をGosubより、Callで行った方がより、 わかりやくなるので・・・、
Helpには、
>GoSub...Return ステートメントを使うよりも、独立した 1 つのプロシージャ (Sub プロ >シージャまたはFunction プロシージャ) を作成して呼び出す方が、より構造化された方 >法といえます。
とあるのです。 その理由は、また他の場面で機会があったらね ちゃんとあるんですよ、理由は・・・!!
人のコードが読めないと困るので Gosubの機能は確認していただいて、 ご自分のコードには、同じ事象では、Call を使うようにしてください。
同じように古いステートメントに
While...Wend ステートメント というのがあります。
今では、 Do 〜 Loopを使うのが一般的です(機能が豊富)。
追伸 >フォートラン 私もプログラミング言語の最初がこれでした。 フォートラン 77というのでした。 もう30も前なので印象だけですが、構造化しにくい言語だったなあ
ichinose
ご教示、ありがとうございます。さっそくダイクストラの本を注文しました。 プログラミングはすべて我流で、自分が使うためだけの小さなプログラムを組むことが ほとんどで他人が使用するための見やすさ、使いやすさなど考えたことがありません。 今回、会社の人間が使うためのプログラムを組むことになり、結果をだす部分より 表示の仕方や入力ミスの対応やら、操作のわかり易さ等々、周辺部分でずいぶんと長く なったうえに、管理は他人がするという事態で、いまごろ「わかりやすいプログラム」 とは、などと考えこんでしまっています。
前回、教えていただいたコードを複数列に対応させることに成功しました。 (私にとっては画期的) 今日は、名簿に追加をするさいに、検索用の表に直接、入力しないようにするための 追加、訂正用のコードを組む予定です。そのほうが、安全でわかり易いという意見がで たからですが、どの端末でも使えるようにするのか、変更した結果の同期をど うするか、プログラミング以前の問題に悩んでいます。きっとプロはコード自体より このような問題に時間を食っているのでしょうね
>女流小説家の作品で新撰組をネタにしたものはあったかな・・・
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.