質問する
0

Calcマクロの参照渡し

質問日 2019-02-15 14:41:16 +0200

cxe01263 のGravatar画像

updated 2019-02-15 17:32:37 +0200

nogajun のGravatar画像

下記マクロを実行するとyの値が変化しません。 皆さんの環境ではいかがでしょうか。(どこか間違っている?)

バージョン: 6.1.5.2 (x64) Build ID:
90f8dcf33c87b3705e78202e3df5142b201bd805
CPU threads: 4; OS:Windows 10.0; UI
render: GL; ロケール: ja-JP (ja_JP);
Calc: CL

Sub Main
    Dim x, y, z As Integer
    x = 1: y = 2
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
    Get_S(x, y)
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
    z = Get_F(x, y)
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
End Sub

Sub Get_S(ByVal a  As Integer, ByRef b  As Integer)
    a = -3: b = -2
End Sub

Function Get_F(ByVal a  As Integer, ByRef b  As Integer) As Integer
    Dim c As Integer
    c = a + b
    a = -3: b = -2
    Get_F = c
End Function
edit retag flag offensive close merge delete

1 Answer

0

回答日 2019-02-15 18:17:51 +0200

himajin100000 のGravatar画像

updated 2019-02-15 19:51:20 +0200

他の件にも取り掛かっているので、ちょっとすぐにはExcel VBAでどのような挙動になるかはわからないし、StarBasic側のバグの可能性も十分あるが、とりあえず、関数の引数の型と呼び出し側の変数の型が一致するときは参照渡しが成功しているのを6.3系で確認した。なお、「Dim a, b As Integer」のaの型はVB.NETではIntegerであり、VBA/StarBasicでは、Variantであることに注意が必要

Sub Main()
    Dim x As Integer
    Dim y As Integer
    Dim z As Integer
    x = 1
    y = 2
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
    Get_S x, y
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
    z = Get_F(x, y)
    Msgbox("x = " & x &" : "& "y = " & y &" : "& "z = " & z)
End Sub
Sub Get_S(ByVal a As Integer, ByRef b As Integer)
    a = -3: b = -2
End Sub
Function Get_F(ByVal a  As Integer, ByRef b  As Integer) As Integer
    Dim c As Integer
    c = a + b
    a = -3
    b = -2
    Get_F = c
End Function
edit flag offensive delete link もっと

Comments

ご指摘の通り

Dim x, y, z As Integer

Dim x As Integer
Dim y As Integer
Dim z As Integer

の3行に分割したら意図通り参照渡しになりました。記述をさぼったらあかんのですね。 お騒がせしてすみませんでした。

ところでここのBBSはHTML形式で記述でしょうか?表示結果が改行されずに悩んでいたのですが <br> を入れたら改行しました。

cxe01263 のGravatar画像cxe01263 ( 2019-02-16 07:39:33 +0200 )edit

以前Markdown系だと聞きました。

himajin100000 のGravatar画像himajin100000 ( 2019-02-16 08:27:23 +0200 )edit

質問とコメントのコードが見づらかったので整形しています。 どこかに、ここの使い方を書いたほうがいいのかなぁ。

ここの書き方は、Markdownという記法で書きます。 対応していないものもありますが、書き方はこちらをご覧ください。

書き方がわからない場合は上にアイコンがあるので、ソースコードを書く場合は貼り付けたあと、その部分を選択して、0101と並んでいるアイコンをクリックするとコードの記述になります。

nogajun のGravatar画像nogajun ( 2019-02-16 08:45:35 +0200 )edit
ログイン/サインアップして回答する

質問ツール

2 followers

Stats

Asked: 2019-02-15 14:41:16 +0200

Seen: 67 times

Last updated: Feb 16