アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。ExcelVBAで「一番大きな値を持つ変数名を返す」として質問致します。
タイトルは「…値を返す」としましたが、実は「…値を持つ変数名を返す」なのです。以下に要点を記します。

例えば…
Sub mySub()
Dim my1,my2,my3,myMax '全てInteger型です。
my1=1
my2=2
my3=3
myMax=Application.WorksheetFunction.Max(my1,my2,my3)
MsgBox=myMax
End Sub

上の記述ですと、MsgBox に渡される値は my3 に格納されている 3 となりますが、Max値である 3 の値が格納されている変数名my3 を
MsgBox に表示させるためには、どのような考え方があるでしょうか?

If や Select Case などでコツコツと条件分岐をさせて導き出すしか方法はありませんか?
コードが短くなるように何らかの関数を用いる手法があれば嬉しいのですが…ご教示の程、よろしくお願い致します。

A 回答 (1件)

ユーザにとって「変数名」は意味を持たないはずなので、コードで変数名を取得するようなことは、しないと思いますが…


同種のデータを大量に扱う場合、通常は、配列に入れておいて、変数名の
代わりにインデックス番号を扱うと思います。

>If や Select Case などでコツコツと条件分岐をさせて導き出すしか方法はありませんか?
前出の配列という概念が、ご質問の回答ではないかと思いますが。
例えばaという配列に数値が入っていて、その最大値とインデックスを取るなら
 For i = LBound(a) To UBound(a)
  If a(i) > aMax Then aMax = a(i): aIndex = i
 Next i
 MsgBox (aIndex & " , " & aMax)
みたいな感じ。

どうしても、同質の変数名ではなく、個別の名称にしたければ(実態は変わってしまいますが)、連想配列で変数名(もどき)を代入しておくという方法もあるけど、その名前は計算上まったく必要ないはずなので、わざわざやることもないですね。

質問の意味を取り違えていましたら、無視してください。
    • good
    • 0
この回答へのお礼

fujillinさん、早速のご教示をありがとうございました。

>質問の意味を取り違えていましたら、無視してください。
否、全くご回答頂いた通りの意味なのです。

実は…実際に必要性に迫られた問題では無く、ふと、思いついた疑問だったのですが…
頂いた「インデックス番号を利用する」という考え方で、疑問は終止いたしたいと思いました。感謝いたします。

お礼日時:2009/02/06 00:30

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