前提
以前作成したSubプロシージャを使ったプログラムをFunctionプロシ―ジャで置き換えようとしています。
質問
- 以下の二つのコードはFunctionプロシージャに置き換えられるのか、置き換えられないのかどちらなのか教えていただきたいです。
該当のソースコード
Sub
1Dim nCount As Integer 2 For nCountnCount = 1920 To 2020 Step 5 3 DoEvents 4 ActiveWorkbook.Worksheets("Sheet1").Range("H4") = nCount 5 Application.Wait (Now + TimeValue("0:00:01")) 6 DoEvents 7 Next 8 End Sub
Sub
1 ActiveWorkbook.Worksheets("Sheet1").Range("H4") = 1920 2End Sub
VBAのSubプロシージャとFunctionプロシージャの違いは理解できてますか?
また、なぜFunctionプロシージャへの置き換えが必要なのでしょうか?
(例えば、ワークシートのセルを介さずに値を引き渡す必要が出てきたとか)
何故「置き換えようとしてい」るのでしょうか?目的次第かと思いますが。
SubプロシージャとFunctionプロシージャの主な違いは、前者が戻り値が返せず、後者は返せるという理解で正しいでしょうか。また、Functionプロシージャへの置き換えが必要なのは、大学の課題でFunctionプロシージャを使ったプログラムを提出し、紹介するためです。そこで、以前作成したSunプロシージャのプログラムをFunctionプロシージャで置き換えて改め、比較して紹介することで、Functionプロシージャの利便性をわかりやすく伝えようと考えていました。改めて質問しますが、このSubプロシージャはFunctionプロシージャに置き換えられるという認識で正しいでしょうか。
> 以前作成したSunプロシージャのプログラムをFunctionプロシージャで置き換えて改め、比較して紹介する
質問のコードは引数がないようなので比較にはならないかと思います。
比較するのならば参照渡しと値渡しで戻り値を返す、などの方が良いのではないでしょうか?
両プロシージャとも中途半端に例示されているので、Functionに置き換える利便性が遡及できるかどうかは判断できませんね。まあ、2つ目の方はこの程度であればFunctionに置き換えられるでしょう(そこは質問者さんも判断できているのではないかと)。
1つ目の方は、内部でタイマーを使っているのでイベント処理的なものですよね。私としてはFunctionにする意味があるのかが疑問ですね。そもそも何を戻り値にするのでしょうか?元の処理でもセルの内容を書き換えているので、Functionにしたときに「何を返す」が明確になっていない(複数の値をとりますよね?)ので、これだけでは何とも言えないです。
まぁ、仮に上のコードを関数転用するなら処理自体を
セルに入れるデータ計算して配列に格納→一括転記に切り替えて
引数:for分の始点終点
戻り値:配列
にしてfor分内の処理を行う関数を作るって感じでしょうか…。
functionの利点を比較例示するならもっと単純に列番号ABCを数値に変換する関数とかでいいと思うんですけどね
お三方とも的確なご指摘ありがとうございます。再考し、このプログラムではないプログラム(Functionプロシージャの良さがより伝わるプログラム)を作成しようと思います。少々無理のある質問失礼いたしました。
回答1件
あなたの回答
tips
プレビュー