
ExcelのVBAのご質問です。
マクロの自動記録にて、オートシェイプに他セル参照を入れ込みました
(つまり、オートシェイプを選択状態で数式バーに=A1などと入れ込んだ)。
すると、おそらくその部分に
ExecuteExcel4Macro "FORMULA(""=R1C1"")"
というプログラムが出て来るのですが、
・・・これはどう理解したら良いのでしょうか。
調べてみたのですが、ExecuteExcel4Macroというものの理解が
今いちできないのと(他シートのマクロを実行させる時に
使ったりするらしいという事しかわかりませんでした)
"FORMULA(""=R1C1"")"
についても、FORMULAというのはR1C1形式でなくA1形式の時に
使うものじゃなかったっけ? なぜ"が2つ?
などと混乱しています。
(=A1だからR1C1なので、A2ならR2C1だな、という事だけはわかる)
私の頭では、断片的な情報の統合ができず理解に苦しんでいます。
助けてくださる方いらしたらお願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは、KenKen_SP です。
長文ですみません。できるだけわかり易く書こうと思ったのですが...
ご参考になれば。
> ・・・これはどう理解したら良いのでしょうか。
ご質問にあるシェープにリンクの数式を設定することは、現在の VBA にはそ
のメソッドが存在しないため不可能です。しかし、Excel 4.0 マクロにはその
命令が存在しました。それが FORMULA マクロ関数です。
MS サポートオンライン [マクロを使おう - FORMULA 関数]
http://support.microsoft.com/default.aspx?scid=k …
Excel 4.0 マクロは以前の Excel で使われていた、今で言う VBA に相当する
機能ですが、現在の VBA とは
「考え方も記述方法も完全に”別物”」
です。ここで、
Excel の幾つかのコマンドは、同等のコマンドが VBA 側で用意
されていないため、ExecuteExcel4Macro メソッドを使って記録
されることがある
と MSDN で見かけましたことがあります。正確な情報ソースを失念してしまっ
たのですが、
・VBA では実現できない
・Excel 4.0 マクロ関数の FORMULA なら実現可能
・では、FORMULA 関数を使おう
となって、 ExecuteExcel4Macro が記録されたのだと思います。
ExecuteExcel4Macro メソッドは、VBA ではない Excel 4.0 マクロのコマンド
を実行するためのメソッドです。
余談ですが、Excel 4.0 マクロは互換性のため現在の Excel にも搭載されて
おりますが、VBA が主流となり、MS も既に正式サポートしておりません。ず
いぶん前の話です。今となっては情報量が極端に少なく、また、いつまで使え
るのかも不透明なため、新たに覚える必要はないと思います。
しかし、ご質問の例のように現行 VBA で実現できないことが、Excel 4.0 マ
クロでは実現できたりして完全にニーズが消え去ったわけではないです^^;
> FORMULAというのはR1C1形式でなくA1形式の時に使うものじゃなかったっ
> け? なぜ"が2つ?
上述のように FORMULA は VBA の Formula プロパティーとは完全に別物です。
ここで、ExecuteExcel4Macro メソッドのヘルプを見てみます。
▼ [Excel2002 VBA Help - ExecuteExcel4Macro メソッド 引用]
Excel 4.0 マクロ関数を実行し、関数の結果を返します。値の取得
および設定が可能です。取得する型の種類は、対象の関数によって
異なります。
expression.ExecuteExcel4Macro(String)
(略)
String 必ず指定します。文字列型 (String) の値を使用します。
Excel 4.0マクロ言語関数を等号 (=) なしで指定します。
参照はすべて R1C1の文字列として指定する必要があります。
また、引数 String 内で二重引用符 (") を使うときは、二重引用符
を続けて記述してください。
[引用終わり]
簡単に解説すると、実行する Excel 4.0 マクロ関数を「文字列」で指定しな
いといけないのです。これは VBA の ExecuteExcel4Macro メソッドの仕様で
すね。
あとは FORMULA 関数の仕様で、参照式もまた文字列で指定しないといけない
のですが、そうなると、文字列中に二重引用符 (")を使わなければなりません。
ここからは、VBA の記述方法の話になりますが、文字列中に”(二重引用符)
を使うときは、””と2つ続けます。これをエスケープする...と言います。
例えば、MsgBox で "aaa と表示したいとき、どうコーディングしたら良いで
しょうか?
MsgBox "aaa
ではコンパイルエラーですね...
MsgBox "aaa"
なら、エラーにはなりませんが、 aaa と表示されてしまいます。
MsgBox """aaa"
とすると表示できます。”はプログラムで使われる特別な記号なので、このよ
うな処理が必要なのです。
大変ありがとうございました。
よくわかりました。
4.0のマクロで、の意味だったとは・・・。
よく見るとヘルプにもそう書いてあるのに、
読んでも意味がわかりませんでした。
現在のVBAとまったく違うものだったという事も知りませんでした。
現在のVBAしか知らない(というかそれもあまり知らない)私が
FORMURAで悩んでもわからない訳ですね。
こんなに丁寧に説明していただけるとは思いませんでした。
重ねてお礼申し上げます。
No.4
- 回答日時:
ueno88さん、横からの便乗質問失礼いたしまし。
ueno88さんの質問はKenKen_SPさんの回答で解決しているとは思いましたが、
オブジェクトにないプロパティが実行されるのがちょっと府に落ちませんでしたので
この場を借りて質問させていただきました。
KenKen_SPさんの仰るように、またueno88さんの感じているように
VBAが気を利かせて実行しているのだろうと思います。
今回は面白いことが分かりました。
興味ある質問をして下さったueno88さん、回答を下さったKenKen_SPさん、ありがとうございました。
これからも宜しくお願いいたします。
No.3
- 回答日時:
> これでは拙いのでしょうか。
いえ、そんなことはありません。#2 でご提示いただいたコードで確かに
リンクを設定できるのですか。
実は、Selection というのは私はほとんど使いませんので、その実態と
いうか、「どんな風に使えるのか?」を良く分かってないのです。
勉強になりました。ありがとうございます。
少しコメントさせていただきます。
まず、Shape オブジェクトには Formula プロパティーがありません。
これはオブジェクトブラウザで確認しました。
ここからは推測になるのですが、VBA で用意されていないメソッドやプロ
パティーが実行されるはずもなく、
Selection.Formula = "=B5"
というのは、VBA の実行過程で Excel 4.0 マクロをコールしている様な気
がします。これは、マクロの記録で同様の操作が、
ExecuteExcel4Macro "FORMULA(""=R1C1"")"
と記録されることから推測したことです。この仮説が正しいのかどうかを
証明する術は、残念ながら私にはありません。
なるほど、ありがとうございます。
などと、すでに横合いから口を出しているような
かたちの質問者なのですが。大変興味深く拝見しています。
存在しないプロパティが実行される不思議。
不便だろうと思ってマイクロソフトがSelection.Formula = "=B5"
でも実行できるようにしてくれたんでしょうか。
でもこれじゃ、ヘルプから調べてSelectionにFormulaプロパティを
設定する事を思いつく事はできませんね。
No.2
- 回答日時:
KenKen_SPさんの回答はいつも懇切丁寧、かつ的確ですのでとても参考になります。
今回の回答にちょっと気になるところがありましたので便乗質問させてください。
>シェープにリンクの数式を設定することは、
>現在の VBA にはそのメソッドが存在しないため不可能です
Sub Test()
ActiveSheet.Shapes(1).Select
Selection.Formula = "=B5"
End Sub
これでは拙いのでしょうか。
尚、回答の意図を読み違えていましたら平にご容赦願います。
ありがとうございました。
試してみました、・・・それでも実際動作は十分いけますね。
なぜわざわざExecuteExcel4Macroを使うかエクセル。
何か理由があるのかも知れませんが・・・もちろん私にはわかる訳もなく。
あ、ちなみに、私がここでひっかかっていた理由は、
R1C1形式でなくA1形式をとりたかった、という理由もあったのです。
そんな訳で、実際の問題解決のためにはそのものズバリの回答を
いただいた事になります。
今回の質問では、大変勉強になりました。ありがたいことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- 数学 a1,a2, a3をベクトル空間Vのベクトルとする。a1+a2,a2+a3,a3+a1が一次独立のと 2 2022/10/02 15:55
- 物理学 写真の問題について質問なのですが、解説を見る限りc1とc2の電気量は等しくないように思えます。 しか 4 2023/07/01 21:41
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) Excel表示形式 2 2022/09/09 09:57
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
マクロの連続印刷が突然不可能...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
Excel_マクロ_現在開いているシ...
-
Excel・Word リサーチ機能を無...
-
Excelのセル値に基づいて図形の...
-
エクセルに張り付けた写真のフ...
-
エクセル VBA実行中のApplicati...
-
特定文字のある行の前に空白行...
-
TERA TERMを隠す方法
-
マクロ実行時エラー
-
マクロがあるファイルの読み出...
-
wordを起動した際に特定のペー...
-
オートフィルターとExcelマクロ...
-
#defineの定数を文字列として読...
-
エクセルで別のセルにあるふり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報