質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

679閲覧

このSubプロシージャをFunctionプロシージャに置き換えることはできるのか

pythonmuzukasi

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/01/18 10:20

編集2023/01/18 10:27

前提

以前作成した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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

archiver

2023/01/18 10:36

VBAのSubプロシージャとFunctionプロシージャの違いは理解できてますか? また、なぜFunctionプロシージャへの置き換えが必要なのでしょうか? (例えば、ワークシートのセルを介さずに値を引き渡す必要が出てきたとか)
meg_

2023/01/18 11:43

何故「置き換えようとしてい」るのでしょうか?目的次第かと思いますが。
pythonmuzukasi

2023/01/18 12:15

SubプロシージャとFunctionプロシージャの主な違いは、前者が戻り値が返せず、後者は返せるという理解で正しいでしょうか。また、Functionプロシージャへの置き換えが必要なのは、大学の課題でFunctionプロシージャを使ったプログラムを提出し、紹介するためです。そこで、以前作成したSunプロシージャのプログラムをFunctionプロシージャで置き換えて改め、比較して紹介することで、Functionプロシージャの利便性をわかりやすく伝えようと考えていました。改めて質問しますが、このSubプロシージャはFunctionプロシージャに置き換えられるという認識で正しいでしょうか。
meg_

2023/01/18 12:39

> 以前作成したSunプロシージャのプログラムをFunctionプロシージャで置き換えて改め、比較して紹介する 質問のコードは引数がないようなので比較にはならないかと思います。 比較するのならば参照渡しと値渡しで戻り値を返す、などの方が良いのではないでしょうか?
archiver

2023/01/18 13:51

両プロシージャとも中途半端に例示されているので、Functionに置き換える利便性が遡及できるかどうかは判断できませんね。まあ、2つ目の方はこの程度であればFunctionに置き換えられるでしょう(そこは質問者さんも判断できているのではないかと)。 1つ目の方は、内部でタイマーを使っているのでイベント処理的なものですよね。私としてはFunctionにする意味があるのかが疑問ですね。そもそも何を戻り値にするのでしょうか?元の処理でもセルの内容を書き換えているので、Functionにしたときに「何を返す」が明確になっていない(複数の値をとりますよね?)ので、これだけでは何とも言えないです。
pig_vba

2023/01/18 14:56

まぁ、仮に上のコードを関数転用するなら処理自体を セルに入れるデータ計算して配列に格納→一括転記に切り替えて 引数:for分の始点終点 戻り値:配列 にしてfor分内の処理を行う関数を作るって感じでしょうか…。 functionの利点を比較例示するならもっと単純に列番号ABCを数値に変換する関数とかでいいと思うんですけどね
pythonmuzukasi

2023/01/18 14:59 編集

お三方とも的確なご指摘ありがとうございます。再考し、このプログラムではないプログラム(Functionプロシージャの良さがより伝わるプログラム)を作成しようと思います。少々無理のある質問失礼いたしました。
guest

回答1

0

自己解決

質問内容はご指導により解決いたしました。このSubプロシージャのプログラムをFunctionプロシージャにしても、「何を返す」が明確になっていません。つまり、このSubプロシージャがFunctionプロシージャに置き換えることができる出来ないというより、置き換えるメリットがあまりないということです。具体的には、コメント欄をご覧ください。

投稿2023/01/18 15:09

編集2023/01/19 03:30
pythonmuzukasi

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問