戻り値ってなんですか?値を返すってどういうことですか?
よろしくお願いします。。。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

itohhといいます。

例を挙げて説明します。
Len関数というものがあるのはご存じですよね。
a=Len("abcdef")
としたらば、
aには、文字列"abcdef"の文字数”6”が代入されます。
これは、Len関数が6という戻り値を返したということです。

この場合は、数値を返す関数ですが、その他に文字列や真偽(True/False)を返す関数もあります。
もちろん、自分で作成した関数でもFunctionとすれば、戻り値を返すことは可能です。

自分で作成する関数では、どういう値を(戻り値を)返すと便利かを考えて関数を作るように
してみてください。
例えば、100個の数値が入っているテーブル(配列)の平均値を戻り値として返す関数なんてい
うのは、どうでしょうか?
(関数の中で100個の数値を足し算してその値を100で割った値を戻り値とする。)

こんな説明で判るでしょうか?
頑張って勉強してください。(=^_^=)
    • good
    • 0
この回答へのお礼

ありがとうございました!

勉強になりました V(^0^)

お礼日時:2002/02/09 11:56

「戻り値」は「関数」の戻り値のことを言っておられると思います。


ある本によると、「ある値を与えるとそれを基に計算などの処理をして結果を返す機能」とあります。add(a,b)というa,bを与えてその和を計算させる関数(サブルーチン)を定義(プログラムを作ったと)すると、c=add(a,b)とメインルーチンにかくと、cにはa+bの結果が入るのはご存知でしょう。
イメージとしてはaddという自動製造機にaとbとの材料を投げ込むとcが放出口からポロリとかえってくるイメージでしょうか。それで「戻す」となり、「戻り値」となるのでしょうか。あるいはReturnValueのReturnの第一訳の「行って戻る」から来るのかもしれません。サブルーチンには値を戻さないで、状態をセットするなどの処理だけするものもあるのですが、C言語では、値を戻すほうを本則と考えて、戻さないものをわざわざ「Void」としたりするルールにしている。メインルーチンからサブルーチンに飛んで、終わるとメインルーチンの飛び出した次ぎの行へ「戻って」くるから、Returnなのだと思います。
関数とサブルーチンやクラスの違いは今後私も気をつけて勉強します。
    • good
    • 0
この回答へのお礼

ありがとうございます! 
かなりわかりました m(__)m

お礼日時:2002/02/09 11:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q関数で複数の値を戻り値として返す方法

こんにちは初歩的な質問ですいませんが、VB6.0にて関数を
呼び出して、求めた値を戻り値として返す方法は知ってい
ますが、2つ又は3つの値を返したい場合、どうやればよい
のでしょうか?

よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

ByRefで指定した(通常は省略している)引数に返せばいいと思います。
こんな感じで。


a = 100
b = 10
ret = Keisan(a As Double, b As Double, Tashi As Double, Hiki As Double)
MsgBox Tashi
MsgBox Hiki


***** プロシージャ部 *****

Public Function Keisan(a As Double, b As Double, resP As Double, resM As Double) As Long

  resP = a + b
  resM = a - b

End Function


あとは、戻り値を配列やユーザー定義型にするとか。
それか、グローバル変数を用意しておいて、それを介するとかでしょうか。

QFunctionで戻り値を複数返す方法

Functionで戻り値を複数取得したいのですが
うまくいきません。(NULLの使い方が不正ですとエラー)

戻り値に配列を使う場合
呼び出し側はどのように記述すればいいでしょうか?

<呼び出し側>

Private Sub a()
wkkekka1 = 処理結果(Kensu, Houhou)(0) ⇒ ここでエラー
wkkekka2 = 処理結果(Kensu, Houhou)(1)
wkkekka3 = 処理結果(Kensu, Houhou)(2)

End Sub


<関数>
Public Function 処理結果(ByRef lngKensu As Long, ByRef strHouhou As String)

Dim kekka(3) As Double

If lngKensu = 1000 and strHouhou = aaaaaa then
kekka(0) =  0.1
kekka(1) =  2
  kekka(2) =  300
Else
↓ (省略)
    ↓
End If

処理結果 = kekka

End Function

Functionで戻り値を複数取得したいのですが
うまくいきません。(NULLの使い方が不正ですとエラー)

戻り値に配列を使う場合
呼び出し側はどのように記述すればいいでしょうか?

<呼び出し側>

Private Sub a()
wkkekka1 = 処理結果(Kensu, Houhou)(0) ⇒ ここでエラー
wkkekka2 = 処理結果(Kensu, Houhou)(1)
wkkekka3 = 処理結果(Kensu, Houhou)(2)

End Sub


<関数>
Public Function 処理結果(ByRef lngKensu As Long, ByRef strHouhou As String)

Dim kekka(3) As Double...続きを読む

Aベストアンサー

関数 処理結果の戻り型を As Double() と定義します
呼び出し元で
Dim arKekka as double()
arKekka = 処理結果(Kensu, Houhou)
で受け取り
wkekka1 = arKekka(0)
wkekka2 = arKekka(1)
wkekka3 = arKekka(2)
といった具合にして見ましょう

3個の結果を返すなら変数kekkaの宣言は
dim kekka(2) as Double
としましょう

Qバッチで戻り値を返したい

VisualBasic6.0
バッチ処理で戻り値に数値を返したいのですが、
Main()でどう記述すればよろしいのでしょうか?
理由
バッチ(VB)でエラーになっているのに正常終了してしまい、ジョブスケジューラが異常終了しないため、
バッチ側でエラーコードを返せば異常終了になるんじゃないかということで検討しています。
VBもJP1も知識不足ですのでどなたかアドバイスおねがいします。

Aベストアンサー

VB6の標準exeではリターンコードの返却はできませんね。

>VBもJP1も知識不足です

JP1のジョブスケジューラは良くしりませんが、間にリターンコードを返すことができるexe(VC++等で作成)を利用して、VBアプリが終了するときにそのexeにSendMessage()等でステータスを返すようにすればいいんじゃないでしょうか。

Q動的配列に値を返す関数

Split関数のように動的配列に値を返す関数を作成しようとしているのですが、
作り方が全くわからず途方に暮れています。

Function 関数名()(引数1,引数2)

などと関数名の後に()を付けたりしてみたのですが、
コーディング時にエラーとなってしまいます。

何か良い方法はないでしょうか?

Aベストアンサー

動的配列を戻り値とする関数の形式は以下のような形です。

Function 関数名(引数1,引数2) As 戻り値型()

例)文字列を1文字ずつに分解して配列にして返す
Function ExFunc(DatBuf As String) As String()
Dim ii As Integer
ReDim RetBuf(Len(DatBuf) - 1) As String
For ii = 1 To Len(DatBuf)
RetBuf(ii - 1) = Mid(DatBuf, ii, 1)
Next
ExFunc = RetBuf
End Function

Qエクセルのフォームに値を返す方法について

バーコードリーダでバーコードを読み、それに該当する商品を商品リストから探し出して表示させたいと考えています。

【エクセルのフォームの概要】
(1)バーコードNo用の「textbox1」→txtbox1
(2)商品表示用の「textbox2」→txtbox2
(3)商品リストのA2~E1000までデータが入っていて、商品名はその一覧表の左から3番目です。

見よう見まねで色々検討しているのですが、どうしてもできません。下記のように考えていますが、何も表示されません。ご指導の程宜しくお願い致します。

Dim RangeA As Range
Dim Ansform As String
Set RangeA = Worksheets("商品リスト").Range("A2:E1000")
On Error Resume Next
Ansform = Application.WorksheetFunction.VLookup(txtbox1.Value, RangeA, 3, False)
txtbox2.Text = Ansform

初めてマクロ(VBA)の世界に入ってきたため、さっぱりわかっていません。突然組みだしてもさっぱり前に進まないので、バーコードリーダーを使った商品管理をエクセルでするような事例がどこかのサイトに出ていましたら教えていただけませんか?(検索をかけてもうまく見つかりません。)

バーコードリーダでバーコードを読み、それに該当する商品を商品リストから探し出して表示させたいと考えています。

【エクセルのフォームの概要】
(1)バーコードNo用の「textbox1」→txtbox1
(2)商品表示用の「textbox2」→txtbox2
(3)商品リストのA2~E1000までデータが入っていて、商品名はその一覧表の左から3番目です。

見よう見まねで色々検討しているのですが、どうしてもできません。下記のように考えていますが、何も表示されません。ご指導の程宜しくお願い致します。

Dim RangeA As Range
D...続きを読む

Aベストアンサー

Sheet1にテキストボックスを2つ貼り付けて実験しました。
Sheet1のシートモジュールのTextBox1のKeyDownイベントに
(編集モードでダブルクリックして、GeneralをTextBox1、
DeclalationをKeydounを選ぶ)
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim RangeA As Range
Set RangeA = Worksheets("商品リスト").Range("A2:E1000")
On Error Resume Next
TextBox2.Text = Application.WorksheetFunction.VLookup(Val(TextBox1.Value), RangeA, 3, False)
End If
End Sub
商品リストのA2:E1000に(B列と第5行以下行は省略)
1234お菓子
1235せんべい
1236あめ
テキストボックス1で「1234」を入れてENTERキーを押すと
テキストボックス2が「お菓子」と出ました。
ただバーコードリーダーから入るデータが、Enter押しと同じか自身が無いが。
この質問の解決は、ご回答1-3の路線に疑問を持っている。イベントと結び付けないとダメなのでは。
そうであれば、質問者にとっては、VBで熟達しているなら別ですが、手に余る質問と思う。問題として中級以上の質問でしょう。
ーー
追記
UserForm1上にテキストボックスを2つ貼り付けてやってみても
同じコードで同じ結果になりました。

Sheet1にテキストボックスを2つ貼り付けて実験しました。
Sheet1のシートモジュールのTextBox1のKeyDownイベントに
(編集モードでダブルクリックして、GeneralをTextBox1、
DeclalationをKeydounを選ぶ)
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim RangeA As Range
Set RangeA = Worksheets("商品リスト").Range("A2:E1000")
On Error Resume Next
TextBox2.Text = Application.WorksheetFunction.VLookup(Val(TextBo...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報