こんばんわ。

以下のように、Functionで引数に配列を指定して、戻り値も配列で取得したいのですが、方法としては以下のようにしかできないのでしょうか?

-------------------------
'配列を宣言
dim Ary() as string
dim AryRet() as string '戻り値の配列

Call Get_Ary(Ary(),AryRet())
-------------------------

Function Get_Ary(Ary() as string , AryRet() as string)
'Ary()を参照して、AryRet()を取得する
End Function

という風に書いているのですが、Functionのところを以下のように
書くのは無理でしょうか?
うまく取れないというのはやっぱ無理なのかな・・

-------------------------
'配列を宣言
dim Ary() as string
dim AryRet() as string '戻り値の配列

AryRet() = Get_Ary(Ary())


Function Get_Ary(Ary() as string) As string

'Ary()を参照して、AryRet()を取得する
'それを関数の戻り値とする
Get_Ary = AryRet(index)

End Function

このように書くと、配列の最後のインデックスの値だけ取れてしまう
ようなんですが、、やっぱ配列で返すというのは上記のやり方でないと
無理なのでしょうか?

詳しい方ご教示願います。

A 回答 (2件)

VB6.0以降ならば以下の方法でできると思います。


(.netは使った事がないのでよくわかりませんが・・・)

Function Get_Ary(Ary() as string) As string()

戻り値の型に()をつければ配列で戻すことが可能です。
    • good
    • 0

過去問に同じ内容がありましたよ。



http://oshiete1.goo.ne.jp/kotaeru.php3?q=69579
    • good
    • 0

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

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

QFunctionの戻り値を2次元配列にする方法

VB.NETを使いはじめた初心者です。
Functionの戻り値を2次元配列にして
データを取得したいのですが、
「Doubleの1次元配列はDoubleから派生していないためDoubleの1次元配列の1次元配列の値をDoubleの2次元配列に変換できません」とエラーがでます。

どのように変更すればよいでしょうか。
ご教授願います。


Function f1 As Double()()

Dim temp(2,3) As Double
・・・・・
Return temp
End Function

Aベストアンサー

こんにちは、じゃんぬねっと です。

っていうか、多次元配列と多段階配列は違いますよ。

> Return temp

は、f1()() == temp(,) とやっているのと同じです。

QFunctionの戻り値を配列にしたいのですが

vbを始めたばかりですがよろしくお願いします。

Functionの戻り値を配列にしたいのですが

Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer()
fnc(0) = a + b
fnc(1) = a - b
End Function
というような使い方はできないのでしょうか?
一つのFunctionで二つの計算結果をかえすには
どうしたらよいのでしょうか?
お願いします。

Aベストアンサー

ローカル変数を使えば可能だと思いますよ

VB6.0の場合
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  fnc = ar
End Function

VB.NETなら
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  return ar
End Function

VB.NETでも fnc = ar と言った記述も出来ます

呼び出し側では 動的配列として返り値を受けます
dim results() as Integer
results = fnc( 5, 3 )
と言った具合です

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

QFunction プロシージャの戻り値にバグ?

いつも拝見させていただいてます。
今回Excel VBAでタイムスケジュールを作成したところ、まったくわけのわからないエラーが発生してしまい途方に暮れており、皆様のお力をお借りしたく投稿させていただきます。

エラーの内容は簡単に言うと Function プロシージャの戻り値がなくなってしまう(0になっている)ことです。

ESC = ESColumn(EventStart)

----------------------------------

Function ESColumn(TimecoluConv As Date) As Integer

Select Case TimecoluConv

Case "8:00:00"
ESColumn = 2

Case "8:10:00"
ESColumn = 3

Case "8:20:00"
ESColumn = 4

・・・
End Select
End Function

と、このようなコードで入力された時間を数値に変換しているのですが、
繰り返し処理をしているといきなり戻り値が0になってしまいます。

今回は8:00を6回取得した後、8:10を変換しようとしたら戻り値が0になっていました。
戻り値を使用して、セルを選択するため、そのタイミングでエラーになります。

なぜ繰り返し処理の途中で発生するのでしょうか。
解説と対策をご教示していただけると大変助かります。

よろしくお願いします。

いつも拝見させていただいてます。
今回Excel VBAでタイムスケジュールを作成したところ、まったくわけのわからないエラーが発生してしまい途方に暮れており、皆様のお力をお借りしたく投稿させていただきます。

エラーの内容は簡単に言うと Function プロシージャの戻り値がなくなってしまう(0になっている)ことです。

ESC = ESColumn(EventStart)

----------------------------------

Function ESColumn(TimecoluConv As Date) As Integer

Select Case TimecoluConv

Case "8:00:00"
ESColumn = 2

Case "...続きを読む

Aベストアンサー

Format関数のヘルプを見てもらえばわかることですが
この書式指定では、時間部分は24時間制の2ケタです。

Select Case Format(TimecoluConv, "HH:mm:ss")

Case "08:00:00"
ESColumn = 2

Case "08:10:00"
ESColumn = 3

Case "08:20:00"
ESColumn = 4

・・・
End Select
End Function

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます


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

おすすめ情報