- ベストアンサー
VBAでの範囲指定を変数で行う方法を教えてください
- VBAでEvaluateを使用して[ ]で代用して計算を行う際、範囲指定を変数で行う方法を教えてください。
- A1からA3のセルに数値が入っている場合、[SUM(A1:A3)]をメッセージボックスに表示する場合はワークシート関数を利用します。
- 範囲指定を変数で行う場合は、Evaluateを使用して式を組み立てます。例えば、Rに"A1:A3"を格納し、AnsにEvaluate("sum(" & R & ")")を代入します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問者は、VBA以外の他言語などで、熟練されているようですが、 >美しくない とはどういう点ですか。それを書かないと質問の内容が伝わらない。 小生も、エクセル関数を使ったものに取って、セル範囲をRange()などで 示さないといけないのは、うっとうしく感じるが。 言いたいことを想像すると、 (1)セル範囲をRangeなどを使わないで示したい。 Sub test01() Range("D2") = [SUM(A1:A3)] End Sub (2)Evaluateを使わないーー>普通のVBAでのワークシート関数の使い方。 Sub test02() Range("D4") = WorksheetFunction.Sum(Range("a1:A3")) End Sub (3)Application.WorksheetFunctionを付けるのが長い文字列になる (複数の箇所で関数を使う場合など) Sub test04() Set wf = Application.WorksheetFunction [D8] = wf.Sum(Range("a1:A3")) End Sub (4)範囲指定を操作者(利用者)が行う場合 Sub test03() Set a = Application.InputBox("加算する範囲", Type:=8) Range("D6") = WorksheetFunction.Sum(a) End Sub (5)その他 オブジェクト階層を別記法とセル番地の記法の簡略化 Sub test05() Set wf = Application.WorksheetFunction [D10] = wf.Sum([a1:A3]) End Sub ーー 他言語は別として、 VBAにおける、Evaluateは、Excel4.0マクロの中の1つで、今では使用を 推奨されていないと思う。エクセルにVBAが使えるようになった、1995 年以前の関数とマクロの合いの子みたいなものだ。VBの文法を取り入れる VBAのできる前のもの。VBAではややこしい記述になるがExcel4.0マクロでは できるものがあって、たまに質問にでる。 (1)ブックを開かないで、セルの値を取る (2)本件の文字列式を与えて、関数や代数式計算 ーーーー WEB記事 http://excel-ubara.com/excelvba4/EXCEL219.html ーーー 表題の>代用する この意味は?何を代用するのか? ーー 質問全般について、なぜEvaluate利用なのと思ってしまう。
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19870)
「[]」は「Evaluate関数に文字定数のみを指定する場合の省略形」ですから、変数を含めたい場合は「Evaluate関数を省略せずに記述」する必要があります。
お礼
お礼していませんでした!ごめんなさい。 ご回答、ありがとうございました。
お礼
このアドバイスをいただいてから、ご紹介いただいたサイトを含め いろいろ調べていくうち、疑問自体は解消したのですが、 お礼をしておりませんでした。申し訳ございません。 「美しくない」の意図は、専用の関数や記述方法などがあれば それを使いたい、ということでした。 ご回答ありがとうございました。