- ベストアンサー
ExcelVBAで一番大きな値を持つ変数名を返す方法
fujillinの回答
ユーザにとって「変数名」は意味を持たないはずなので、コードで変数名を取得するようなことは、しないと思いますが… 同種のデータを大量に扱う場合、通常は、配列に入れておいて、変数名の 代わりにインデックス番号を扱うと思います。 >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) みたいな感じ。 どうしても、同質の変数名ではなく、個別の名称にしたければ(実態は変わってしまいますが)、連想配列で変数名(もどき)を代入しておくという方法もあるけど、その名前は計算上まったく必要ないはずなので、わざわざやることもないですね。 質問の意味を取り違えていましたら、無視してください。
関連するQ&A
- iと言う変数の値が1から10の間にないならば
「iと言う変数の値が1から10の間にないならば」、としたいのですが どのようなコードを書けばいいのでしょうか? Sub test1() Dim i As Integer i = 11 If 1 < i < 10 Then MsgBox i & "は1から10の間にはありません" End If End Sub だと、メッセージが表示されてしまいます。
- ベストアンサー
- オフィス系ソフト
- 変数の中に指定した値が何回登場するかを取得したい
変数の中に指定した値が何回登場するかを取得したいのですが どうやら、WorksheetFunction.CountIfは使えないようです。 Sub tset() Dim mystr As String Dim i As Integer mystr = "abcabc" i = WorksheetFunction.CountIf(mystr, "*a*") End Sub とすると、 コンパイルエラーが発生します。 ヘルプを見ると「セルの個数を求めるセル範囲を指定します。」と書いてあることから、変数は指定できないのだと思いますが では、変数の中に指定した値が何回登場するかを取得する場合は、どのようなコードを作成すればいいのでしょうか? 上記の例であれば、 2が返ってきてほしいです。
- ベストアンサー
- Excel(エクセル)
- SQLのmaxで求めた値を変数に代入する
ex) select max(id) from table でかえってくる値を変数に代入するにはどのようにコーディングすればよいのでしょうか? ExcelVBAを使っています。
- 締切済み
- Visual Basic
- VBA エラー
Sub 上下カット1() Dim MyR As Range, MyMax As Integer, MyMin As Integer Dim MX As Range, MN As Range With ActiveSheet MyMax = WorksheetFunction.Max(.Range("D15:P15")) MyMin = WorksheetFunction.Min(.Range("D15:P15")) For Each MyR In .Range("D15:P15") If MyR.Value = MyMax Then Set MX = MyR If MyR.Value = MyMin Then Set MN = MyR Next MX.Borders(xlDiagonalUp).LineStyle = xlContinuous MN.Borders(xlDiagonalUp).LineStyle = xlContinuous End With With ActiveSheet MyMax = WorksheetFunction.Max(.Range("D16:P16")) MyMin = WorksheetFunction.Min(.Range("D16:P16")) For Each MyR In .Range("D16:P16") If MyR.Value = MyMax Then Set MX = MyR If MyR.Value = MyMin Then Set MN = MyR Next MX.Borders(xlDiagonalUp).LineStyle = xlContinuous MN.Borders(xlDiagonalUp).LineStyle = xlContinuous End With End Sub を実行すると”オブジェクト変数またはWithブロック変数が設定されていません。”と出ます。 どうしたらいいですか?
- ベストアンサー
- Excel(エクセル)
- LIST型に格納されている値を1つずつ取り出して処理をしたい
LIST型に格納されている値を1つずつ取り出して処理を行う方法を探しています。 Dim a As List(Of Integer) 具体的には、1・2・3・4・5という数字が格納されているaという変数から格納された値を一つずつ取り出して、足し合わせていくループ処理を書きたいと思っています。15という結果が出せればOKです。 どなたかご助言いただけると助かります。
- ベストアンサー
- Microsoft ASP
- 【Excel+MySQL】select文で返ってきた値を変数に入れたい。
ExcelVBAの中に 変数A = "select max(id) from data" と記述しselect文で返ってきた値(例えば100)を変数Bに代入したいと思います。 どのようにコーディングすれば可能でしょうか? いくら調べてもわからなかったので教えてください。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 〔EXCEL:VBA〕切捨ての関数は?
初歩的な質問で申しわけありません。 例えば、ある計算結果を「変数:x」に格納して、この「x」の値を切り捨てるにはどのような記述になりますでしょうか?簡単なプロシージャで教えてください。 ------------------------ Sub 切捨て計算() x = 100 / 3 〔変数:xの切捨て〕 MsgBox "変数xは:" & x End Sub ------------------------- 〔 〕内を教えてください。
- ベストアンサー
- オフィス系ソフト
- なぜiは変数の値が保持されるのに、wは保持されない
なぜiは変数の値が保持されるのに、wは保持されないのでしょうか? Sub test() Dim w As Worksheet Dim i As Long i = 1 For Each w In Worksheets i = i + 1 Next MsgBox i MsgBox w.Name End Sub -------------------------------------- を行うと、 MsgBox i は表示されるのに、 MsgBox w.Name は、 「オブジェクト変数または With ブロック変数が設定されていません。」になります。 wはオブジェクト変数だから、 For Each ステートメントを抜けると値が破棄されてしまうのでしょうか? でもvbaのヘルプの 「For Each...Next ステートメントの使い方」 を見ても 「ステートメントを抜けるとオブジェクト変数なら値が破棄されます」 と記載されていません。
- ベストアンサー
- オフィス系ソフト
- VBSの関数で複数の値を返したい
関数から2つの値を返したいと思っています。 ByRefで以下のようにすれば変数STRの内容を書き換えられると思ったのですが、エラーにはならないものの値は変わらないようです。 このような使い方はできないのでしょうか? STR = "STR" TEST(STR) Msgbox STR Sub TEST(ByRef STR) STR = "TEST" End Sub
- ベストアンサー
- その他(プログラミング・開発)
- 「戻り値」ですか?「返り値」ですか?
例えば Sub test1() MsgBox WorksheetFunction.Sum(Range("a1:a3")) End Sub でMsgBoxに表示される値の事は、「戻り値」ですか?「返り値」ですか? いまいちプログラミング用語がわからないので教えて下さい。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
お礼
fujillinさん、早速のご教示をありがとうございました。 >質問の意味を取り違えていましたら、無視してください。 否、全くご回答頂いた通りの意味なのです。 実は…実際に必要性に迫られた問題では無く、ふと、思いついた疑問だったのですが… 頂いた「インデックス番号を利用する」という考え方で、疑問は終止いたしたいと思いました。感謝いたします。