Dim A As Integer
・
・
・
・
Call Function1
If A = 20 Then Function1 = Function1 + 1
If Function1 = 20 Then MsgBox "てすとてすと"
End Sub
────────────────────────
Function Function1() As Integer
・
・
・
・
Function1 = Cells(1,1)
End Function
────────────────────────
このような記述で、If A = 20 Then Function1 = Function1 + 1
の左辺のFunctionが引っかかり
コンパイル エラー:
代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなければなりません。
なるエラーが発生します。
2つ目のIfではエラーが起こりません。
どういうことなのでしょう。関数の呼び出しと誤解される記述なのでしょうか。
関数名というより戻り値としての扱いを意図していました。
ご教授くださると幸いです。
No.5
- 回答日時:
代入式と式の違いです。
直感的にわかるのは
If A = 20 Then Function1 = Function1 + 1
と
If Function1 = 20 Then MsgBox "てすとてすと"
の=を<>に置き換えられるか考えてみてください。
If A = 20 Then Function1 <> Function1 + 1
と
If Function1 <> 20 Then MsgBox "てすとてすと"
では、下はあり得ますが、上はあり得ません。
丁寧にありがとうございます。
両者の違いが理解できました。
関数で戻ってきた値を参照はできるが
変数と異なりそこに代入はできないわけですね。
No.3ベストアンサー
- 回答日時:
関数の中で、関数名=値、は戻り値の設定としての意味がありますが、あなたの書き方の場合、再帰呼び出しと捉えらる書き方になります。
関数名=値、の記述は最後に一回にし、さらに、値は変数に変えるのが普通。
ネットにサンプルはいくらでもあります。
ちょっと調べてみましょう。
あなたのような書き方をしている人がいない事が分かります。
さらに言うと、こういう書き方ができるのはVBAだけで、一般的はプログラムでは、returnで戻り値を返します。
VBA独特の間違いとも言えます。
ご返答ありがとうございます。
元々1つ目のIfがなく、2つ目のIfの部分でFunction1 = 20が成立した時のみMsgboxに当たる処理がしっかりなされてしまっていたので
(再帰的に呼び出すなどはされず、なぜか完全に関数名が変数として扱えてしまっていたので)
関数名は変数として使えると誤解してしまいました。
No2の方がおっしゃるエラーが発生してくれればよかったのですが、このケースではそうならないようです。
関数名というのは呼び出し元のプロシージャでは呼び出すときの1度だけ用いるものなのですね。
No.2
- 回答日時:
なにをやりたいのでしょうかね?
変数名と関数名がゴチャゴチャになってます。
「Function ○○」~「End Function」の内では「○○」は変数名として扱われますが、外ではあくまでも関数名なので代入は出来ません。ちなみに「2つ目のIfではエラーが起こりません。」ですがVBAでは全てのエラーを表示するのではなく、最初に見つかったエラーだけを表示します。試しに「If A = 20 Then Function1 = Function1 + 1」を「'」でコメントアウトすれば、今度は「If Function1 = 20 Then MsgBox "てすとてすと"」でエラーが出る筈です。
ご返答ありがとうございます。
Functionプロシージャの処理が終わった後は、呼び出し元のプロシージャにおいて関数名が"戻り値"という変数になるものと誤解していました。
尚、コメントアウトしても2つ目のIfではなぜかエラーがでません。1つ目のIfの右辺部分もでません。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAで、MsgBox の変数の利用について
Access(アクセス)
-
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
6
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
7
ウォッチ式の文字数制限について
Visual Basic(VBA)
-
8
エクセルVBA フォーム上でOnkeyがうまく出来ない
Excel(エクセル)
-
9
VBAで文字列を数値に変換したい
Excel(エクセル)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
12
戻り値がクラスオブジェクト
Visual Basic(VBA)
-
13
マクロをマクロを使ってコピーしたい
その他(Microsoft Office)
-
14
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
17
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
F9キーを実行するVBスクリ...
-
エクセル関数式=ABSで#VALUE!...
-
マクロで"#N/A"のエラー行を削...
-
ApplicationとWorksheetFunctio...
-
現在、QueryTableが設定されて...
-
Python openpyxlを使用したセル...
-
VBA GoTo Error 処理が上手くい...
-
WindowsでのPythonの挙動について
-
Excel vbaについての質問
-
【VBA】ワークブックを開く時に...
-
UWSCでエラー発生時の対処法に...
-
VBA データ(特定値)のある最...
-
#N/Aの文字を削除するには
-
筆王画面が終了できない
-
実行時エラー'-2147467259(8000...
-
Maximaでのエラーメッセージ
-
IMEの単語登録について
-
paizaで下記コードを提出すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
エクセル関数を教えてください
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
【VBA】ワークブックを開く時に...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
マクロの「SaveAs」でエラーが...
-
WindowsでのPythonの挙動について
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
エクセルVBA 「On Error GoTo...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
おすすめ情報