- 締切済み
Subプロシージャとクラスの違い
こんにちは。 VB初心者で、本やネットで勉強しています。 現在VB入門編レベルの本を読んでいるのですが、Subプロシージャとクラスの違いがよくわかりません。 どちらも関数のような感じ?何がどう違ってどう便利なの?って悩んでます。 勉強し始めたばかりで、あまり専門的な用語は分からないので、出来ましたら 初心者でも分かるようにご回答いただけると嬉しいです。 よろしくお願いします。
- Marine888
- お礼率48% (13/27)
- Visual Basic
- 回答数11
- ありがとう数2
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
1、Subプロシージャ・・・・・・・・・・・・ ある処理を行うコードのまとまり。 戻り値なし。 2、Functionプロシージャ・・・・・・・・ ある処理を行うコードのまとまり。 処理結果を戻り値として返す。 3、クラスモジュール・・・・・・・・・・・・ 幾つかの複雑な処理をコードのまとまり。 プログラマは、そのインスタンスを利用してプログラムを簡便化する。 例えば、次はフォームに配置したテキストボックスに独自イベントを発生させて、それに対応した処理を行うクラスモジュール Class1 です。標準モジュールはCallして利用しますが、【サブフォームのコード】を見て判るようにクラスモジュールの場合は Set myClass1(i) = New Class1 myClass1(i).Cmd = ctr とインスタンスを宣言して活用しています。 【クラスモジュール Class1】 Option Compare Database Option Explicit Private WithEvents myCmd As TextBox Private m_intIndex As Integer Public Property Get Cmd() As TextBox Set Cmd = myCmd End Property Public Property Let Cmd(ByVal cmdNewValue As TextBox) Set myCmd = cmdNewValue myCmd.OnEnter = "[イベント プロシージャ]" myCmd.OnExit = "[イベント プロシージャ]" End Property Public Property Get Index() As Integer Index = m_intIndex End Property Public Property Let Index(ByVal intNewValue As Integer) m_intIndex = intNewValue End Property Private Sub myCmd_Change() MsgBox "" End Sub Private Sub myCmd_Click() MsgBox "" End Sub ************************************** 【サブフォームのコード】 ************************************** Option Compare Database Private myClass1(100) As Class1 Private Sub Form_Open(Cancel As Integer) Dim ctr As Object Dim i As Integer i = -1 For Each ctr In Me.Controls If ctr.ControlType = 109 Then i = i + 1 If i > 2 Then Set myClass1(i) = New Class1 myClass1(i).Cmd = ctr End If End If Next End Sub PS、やっぱり、JavaかC#をやらないと実感できないかも・・・。
- 1
- 2
関連するQ&A
- subプロシージャ
2次方程式a*x^2+bx+c=0えお解くプログラムを考える。メインプロシージャmain1がsubプロシージャread1,solve1,display1を1回ずつ呼び出す。プロシージャread1で変数a,b,cにinputboxで整数値を入力する。プロシージャsolve1では、まず判別式D=b^2-4*a*cを計算して、D>0の場合にはx1、x2に実数解x1=(-b+sqr(D)/(2*a)、x2=(-b-sqr(d)/(2*a)を求める。D<0の場合はx1に実部-b/(2*a)を、x2に虚部sqr(-D)/(2*a)を求める。プロシージャdisplay1は入力された3つの整数値とsolve1で得られた2つの変数x1.x2の値を判別式Dの符号に応じてMsgbox関数で表示する。 以上のプログラムをモジュールレベル変数を用いてつくりなさい。 Sub read1() '問10(1) Dim a As Integer, b As Integer, c As Integer a = InputBox(" aの値を入力して") b = InputBox(" bの値を入力して") Sub solve1() D = b ^ 2 - 4 * a * c If D > 0 Then x1 = (-b + Sqr(D)) / (2 * a) x2 = (-b - Sqr(D)) / (2 * a) Else x1 = -b / (2 * a) x2 = Sqr(-D) / (2 * a) Sub display1() End Sub ここまでやったのですがこの先どうやるかわかりません。 おしえてください。 あとモジュールレベル変数ってなんですか?
- ベストアンサー
- Visual Basic
- Functionプロシージャの便利さがわかりません
私はVBAコードを作る時は、もっぱらsubプロシージャーを使ってしまうのですが、 http://excelvba.pc-users.net/fol5/5_4.html を参考に、 Functionプロシージャとsubプロシージャの違いを確認してみたのですが、 Functionプロシージャの便利さがわかりません。 *********************************** Sub Test() SubプロシージャとFunctionプロシージャのテスト i = 1 Call Subプロシージャ(i) i = Functionプロシージャ(i) MsgBox "Functionプロシージャ結果:" + CStr(i) End Sub Sub Subプロシージャ(ByVal i As Integer) MsgBox "Subプロシージャ結果:" + CStr(i) End Sub Function Functionプロシージャ(ByVal i As Integer) As Integer i = i + 1 Functionプロシージャ = i End Function *********************************** Functionプロシージャは、 (ByVal i As Integer) As Integer のように、、二回もデータ型(Integer)の指定をしなくてはいけないのでしょうか? リンク先の説明には、 「SubプロシージャとFunctionプロシージャの違いは Subプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、 戻り値を返すという関数としての役割を果たすことができる点です。」 と記載されてますが、 それはSubプロシージャでも出来てますよね? サンプルコードにおいてのFunctionプロシージャの便利さを教えてください。
- ベストアンサー
- オフィス系ソフト
- 初歩的な質問なのですが、サブルーチン、プロシージャについて
初めてプログラミングを行おうと思っています。 そこで、VBを使って行おうと思っているのですが、 全てが初めてなので、まずは本を読んでいるところです。 本の中で、サブルーチンやプロシージャという言葉がよく出てくるのですが、サブルーチンは処理のかたまり、プロシージャは処理の命令と軽く考えていたのですが、本の中に、『サブルーチンにはFunctionプロシージャとSubプロシージャの2種類がある』と書いてあり、それ以来、私にはサブルーチンもプロシージャも同じものに思えてしまいます。人に聞いたところ、『全然別ものだよ』という答えしかありませんでした。これは、どう違うのでしょうか?? また、SubプロシージャのSubはサブルーチンを示すとあり、益々、理解できなくなりました。 恐れ入りますが、サブルーチン、プロシージャ、Functionプロシージャ、Subプロシージャとは何かについて、おわかりの方がいらっしゃいましたらご教授ください。 宜しくお願い致します。
- ベストアンサー
- Visual Basic
- プロシージャが大きすぎます!
Excel2000のVBAでフィルターオプションの連続操作をマクロで作成しているのですが、60回以上フィルターオプションを実行できるように記述したのですが、 長すぎてしまい、マクロを実行すると 「プロシージャが大きすぎます」と表示され実行できなくなります。ヘルプやHPを参考にして調べてみると、プロシージャを短くすればよいことはわかったのですが、SUBでプロシージャを短くし、その後、そのSUBで区切ったものを連続実行するためにはどのようにすればよいのでしょうか? VBAを勉強したばかりで、見当違いの質問かもしれませんが、補足いたしますので、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- クラスの設定について
変数をクラスに設定するときのコードの書き方ですが、 sub プロシージャー名() dim m as クラス名 set m = new クラス名 ・・・・ end sub と sub プロシージャー名() dim m as new クラス名 ・・・・ end sub とかいても(簡単なプログラムでは)同じ働きをするのですが 違いはあるのでしょうか。
- ベストアンサー
- Visual Basic
- Functionプロシージャではなぜプロシージャ名=○○という文章が多いのか
VBAを初めて使っています。 勉強してはいるのですが、混乱していて あまり理解できていません。 「Functionプロシージャとsubプロシージャの違いは、戻り値を返すか返さないか」という事までは知識としてわかったのですが、 ・・・サンプルプログラムをながめてみても、どう使えば良いのかまだわかりません。 大変愚問かと思われ申し訳ないのですが、Functionプロシージャの中で、 プロシージャ名=○○ というかたちがよく見られるのはなぜでしょうか。 Function abc abc="hello" というような。 多分これがわかればFunctionプロシージャの使い方が わかってくるのでは、と思っているのですが・・・。
- ベストアンサー
- Windows NT・2000
- クラスモジュールについて
VBを勉強し始めた初心者です。 標準モジュールについては何とかわかるようになってきましたが、クラスモジュールについては、ほとんどわかりません。 クラスモジュールの意味や、プログラム法について初心向けにわかりやすく書いた本等がありましたら、ご紹介下さい。
- ベストアンサー
- Visual Basic
- VB6.0 VB.NET2003とのクラスの違い
こんにちは VB6.0でデータベースのソフトを作成しています。 当初VB6.0はVB.NETと違い完全なオブジェクト指向言語ではないと聞いていたので、 フォームの画面ごとに検索、追加、更新、削除、入力チェック,印刷のコードを書いていこうとしました。 しかし、最近そうでもないことがわかりました。 そこで、画面ごとではなく機能ごとに検索、追加、更新、削除、入力チェック,印刷のクラスモジュールをつくり、 どこに何が書かれているかわかるようにコーディングしたいと思います。 VB.NET2003は学生のころやっていたのですが、VB6.0は最近やりだしたのでよくわかっていません。 VB6.0の入門書をみてもクラスについては2~3ページしか触れていません。 VB.NET2003にはできるがVB6.0にはできないクラスの大きな違いを教えてください。 いまのところコンストラクターとオーバーロードはできないということだけわかっています。
- ベストアンサー
- Visual Basic
- 初心者が読めるジャズギター教則本、DVD
ギター超初心者のjazzinnと申します。先日、「ジャズギター道場 入門編」というDVDを買って頑張って理解しようと観てたのですが入門編というわりにあまりにレベルが高くて途中で挫折してしまいました。 本当のジャズギター初心者でもわかりやすい教則本、DVDのお勧めはありますか?ちなみにジャズギターで使われる用語、テクニックなどは一切わかっていません。よろしくお願いしますm(_ _)m
- ベストアンサー
- 楽器・演奏
お礼
ありがとうございます。 本当に初心者で、やっぱり難しいです。。。