こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Evaluateを[ ]で代用するときの範囲指定

質問を見ていただき、ありがとうございます。

VBAで、Evaluateを[ ]で代用して計算を行っています。
たとえばA1からA3のセルに数値が入っているとき、
A1からA3までの合計をメッセージボックスに出したければ
ワークシート関数を利用して、以下のように書けます。

Sub Sum1()
Dim Ans
Ans = [SUM(A1:A3)]
Call MsgBox(Ans)
End Sub

このとき、もし範囲を変数で指定したいならば
どのように書けばよいのかが解らず、困っております。
たとえば、[ ]を使わずにEvaluateを使うのであれば
以下のようにできるのですが、あまり美しくない気がします。

Sub Sum2()
Dim Ans, R
R = "A1:A3"
Ans = Evaluate("sum(" & R & ")")
Call MsgBox(Ans)
End Sub

どなたか、ぜひ良い方法をご教授ください。

投稿日時 - 2015-11-26 13:34:46

QNo.9086429

困ってます

質問者が選んだベストアンサー

質問者は、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利用なのと思ってしまう。

投稿日時 - 2015-11-27 12:12:55

お礼

このアドバイスをいただいてから、ご紹介いただいたサイトを含め
いろいろ調べていくうち、疑問自体は解消したのですが、
お礼をしておりませんでした。申し訳ございません。

「美しくない」の意図は、専用の関数や記述方法などがあれば
それを使いたい、ということでした。

ご回答ありがとうございました。

投稿日時 - 2016-05-24 22:17:30

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

「[]」は「Evaluate関数に文字定数のみを指定する場合の省略形」ですから、変数を含めたい場合は「Evaluate関数を省略せずに記述」する必要があります。

投稿日時 - 2015-11-26 13:58:32

お礼

お礼していませんでした!ごめんなさい。
ご回答、ありがとうございました。

投稿日時 - 2016-05-24 22:12:39

あなたにオススメの質問