
https://www.moug.net/tech/exvba/0150033.html
http://officetanaka.net/excel/vba/statement/Call …
VBAですが、
これらのページに
subやfunctionの呼び出し時のcallを省略できると書かれてあります。
二つ質問なのですが
call無しでsubを呼び出した際に
引数が二つ以上あると呼び出せないように思うのですが
これは仕様でしょうか?
functionの呼び出しは通常
abc = myFunction(123)
のようにして得られた結果を変数に格納するような形で使われますが
Call myFunction(123)
や
myFunction 123
のような形で使ってもエラーが出ません
このような形で使う場合
どのような用途で用いられるのでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
artooさんが答えられている事の補足となります
>どのような用途で用いられるのでしょうか?
実際に使用されている例としてはMsgBox関数が該当します
これはOKボタン等のボタンを押した事を返しますが、通常受け取り用の変数は設定しないと思います
この様に返り値が必要であったり、不要であったりするケースの場合もfunctionで定義すべきとなります
No.2
- 回答日時:
> 括弧をつけると2つ以上だと実行できないのですが
質問文の2つ目のURLのページに書いてありますが、callを書かないときは引数全体を囲う括弧は付けません。
引数1つの時にエラーにならなかったとすると、例えば、式で、
x = (y)
のように不要なところに無意味に括弧を付けても良いと言うことで、エラーになっていないのでは無いかと思います。
なお、文法の基本的なことを調べる際には、誰か知らない人が過去に書いたページを参考にするので無く、まず最初はVBAエディタ付属のヘルプを見ることをお勧めします。間違ったことが書いてあることは無いので。
マニュアルを読み慣れておらず、ヘルプを読んでもわかりにくいときに、はじめて検索です。
>返り値を受け取らないのであればどちらも同じになってしまうと思うのですが合っていますでしょうか?
そういうことですね。
No.1
- 回答日時:
>call無しでsubを呼び出した際に引数が二つ以上あると呼び出せないように思うのですがこれは仕様でしょうか?
いいえ。そんなことはありません。引数が二つ以上でも正常に呼び出せます。
>このような形で使う場合どのような用途で用いられるのでしょうか?
普通はそういうのをやらないと思いますが、あるとすると、「本来はSubで書くべき処理なんだけど、処理成功・失敗などの結果を返値で返すことにして、Functionで書いてみた。でも、今回は返値のチェックが必要じゃ無い。」というようなケースでしょうか。
別の言語の例ですが、Cではprintfという文字列出力関数があります。これは普通は返値をチェックせずに使うことが多いです。VBでいうとSubで書かれているかのような利用ですね。ただ、返値として「出力した文字数およびエラーの有無」を返すので、それが必要な場合は返値を変数に代入したりします。このときはFunction的な使い方。
普通:
printf("%d",123); ・・・・・・ "123"という文字列を出力
返値利用:
x = printf("%d",123); ・・・・・"123"という文字列を出力し、xには3が代入される。出力時にもしエラーがあればxには負の数が代入されるので、正常に出力されたのかエラーで出力できなかったのか区別できる
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) VBAに関する質問です 2 2022/03/30 22:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) 初歩的な質問ですがよろしくお願いします。 Excelのユーザーフォームを作成 ユーザーフォーム内から 5 2022/04/06 20:52
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
ブール関数
-
cout と cerrの違い
-
コンセントの電力は入力と出力...
-
TV出力ポートをOFFにすれば良い...
-
4Kの外部モニターに出力すると...
-
ActiveReportsでPDFを出力した...
-
vba 環境依存文字によるDocuwor...
-
CPUの温度を出力するプログラム...
-
テキストファイルから特定の文...
-
MMDでavi出力が出来ない
-
スマホの画面をそのままスクリ...
-
KEYENCEのシーケンスプログラム...
-
C++の’ \\n’と ’endl’ の違いに...
-
printf関数の書式指定について
-
Windows Formアプリからコンソ...
-
VBAでテキスト出力時のスペース...
-
海外の110Vの電気製品を日本で...
-
excel vbaでテキストの文字検索
-
VBSciptでテキスト出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
MMDでavi出力が出来ない
-
コンセントの電力は入力と出力...
-
Windows Formアプリからコンソ...
-
Accessのテーブルからcsv出力す...
-
プログラムについての質問です...
-
VBAのExecメソッドで画面を非表...
-
cout と cerrの違い
-
アクセスでエクセルに出力する...
-
COBOLのMOVEで桁数が異なる場合
-
C# 標準出力のencodingをutf8に...
-
CRC16計算について
-
4種類(A4縦、A4横、A3縦、A3横)のヘ...
-
TV出力ポートをOFFにすれば良い...
-
C#でアクセス権限の取得方法が...
-
【UWSC】WEBページ中の特定文字...
-
KEYENCEのシーケンスプログラム...
-
【ExcelVBA】最終行の取得で困...
-
ListViewの複数選択について
おすすめ情報
括弧を外すと2つ以上でも使えるのですが
括弧をつけると2つ以上だと実行できないのですが
そうはなっていませんか?
Excel2010ですけど。
有効な例
Macro1 abc xyz
無効な例
Macro1 (abc xyz)
あと二つ目のご回答に関してですが
subとfunctionの違いは返り値の受け取り方だけなので
返り値を受け取らないのであればどちらも同じになってしまうと思うのですが合っていますでしょうか?