プロが教えるわが家の防犯対策術!

マクロ初心者です。

ブック1でマクロを作成している際、ブック2(マクロ付き)も開きながらマクロ1を更新していました。
このためだと思いますが、「ブック1.xls!マクロ名.マクロ名」のように、それまでについていなかったブック名がマクロ名につくようになってしまいました。具体的には、「会計計算.xls!金利計算.金利計算」のようになります。

それ以前のように「マクロ名」だけ、すなわち「金利計算」だけの名前に修正するにはどのようにすればよいかを教えてください。

よろしくお願いします。

A 回答 (5件)

こんにちは。



Excel VBAマクロの基本的な使い方を間違って覚えたことが原因かもしれませんね。まず、そこを確認させてください。

「会計計算.xls!金利計算.金利計算」
ファイル名!モジュール名(またはシート名).プロシージャ(関数)名
という並びになっています。

モジュール名になる時は、同じプロシージ名のマクロやUDF(ユーザー定義関数)が、別々のモジュールにある時です。

さて、Excel VBAのマクロは、基本的にどこに書くかご存知じですか?
一般的に標準モジュールに書くことが決まりになっています。

あまり細々説明しても、たぶん、わけが分からなくなるでしょうから、他のオブジェクトの話はしません。

>「マクロ名」だけ、すなわち「金利計算」だけの名前

一般のプロシージャの場合は「金利計算」とだけ出るのは、自ブックだけです。

名実ともに、関数のようにどこでも「金利計算」という表示自体を出す、グローバル化は、アドインに変えることですが、それは、また別途質問してください。
    • good
    • 7
この回答へのお礼

WindFaller様 ご丁寧な回答ありがとうございます。
おっしゃるように付け焼刃の状態なので、異常が出ると全く対処できません。

今の画面の状況をご説明します。
・エクセルは2003
・会計計算を開発するにあたり、不定期でバージョンアップしており、現在は「会計計算5.5」です。
 したがってPCには「会計計算1.0」から始まり、兄弟が10個ほど存在し、同名のマクロがそれぞれに存在します。
・今は「会計計算5.5」ファイルのみ立ち上がっており、他のマクロは立ち上がっていません。
・会計計算5.5にはマクロが40個ほど存在します。
・マクロは標準モジュールに記載しています。
・プロシージャ名とツール/「マクロ」ダイアグラムボックスには「金利計算」が表示されています。
・プロパティおよびマクロエクスプローラには「A金利計算」が表示されています。
・この状態で「金利計算」をシートに配した四角のオートシェイプに登録すると、「金利計算」が起動します。

・ここでプロパティの「A金利計算」を「金利計算」にすると、「マクロ」ダイアグラムボックスには
 「会計計算.xls!金利計算.金利計算」が表示されてしまいます。
・この状態で四角のオートシェイプをたたくと、「金利計算」マクロが起動します。
・したがって実務上では困りませんが、何かがおかしいので、将来問題を起こすことを懸念しています。

これまでのバージョンでは、「会計計算」ファイルを単独で立ち上げている限り、プロシージャ名がどこにも表示されていました。

以上です。もしここがおかしいというのがありましたら、助言をお願いします。

お礼日時:2016/06/17 11:01

こんにちは。



>残念ながら中身は理解できません。

私も全体は理解していません。ただ、あのコードを研究尽くした人たちがいるということは事実です。しかし、それでも、概形ぐらいしか分かりません。

別カテで、VBAの設計のような話が、ベテランと思われる方の発言がありました。多くの方は、つまり、全体の設計を描いていからだとおっしゃっています。でも、VBAとかいうものは、そういうものではないと思うのです。個人が一人で作るもので、担当の割り振りが決まっているわけではありません。

「いきなり部品図を描き、そのあとAssy図、全体図を描いている」

まったく他人からみたらそのとおりです。
実は、VBAマクロというのは、私の持論で、こうしたものは心臓部から作っていくという方法なのです。心臓が作れないものは、NGなので、どんなに立派な構想があろうとも、何の意味もありません。だから、最初に、心臓部から作り始めるのです。テクニック優先なのです。

例えば、シートで値を検索するのに、ふつうは、Findメソッドを使うと思うのです。そこがあやふやだったり、それを他に置き換えて、コードを構築するというのは、私などからするとありえないと思えるのです。定石と定石外しという言葉がありますが、VBAプログラムなんていうものは、ほとんど定石でやったほうが楽だし、それを独自路線、つまり定石外しなんて試みたところで、素人ではうまくいくわけがないと思います。

>フレーム構築から最後のコーディングに至る手順というものに関して、参考になりそうな書籍なりサイトをご存知でした

それは、「構造化プログラミング」だと思うのです。VBAにそれほど仰々しいものは存在しません。

今は時代が違うとは思っていても、VBAなどは、これを抜きにしては扱えませんね。
放送大学などでも、特別大きく取り上げなくなったもののようです。それでも、Basic 系には不可欠な考え方です。

http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/ …

例えば、ここのサイトは、旧VB6 なので、そのものずばりだという感じがします。(内容的には古臭いかもしれませんが、VBAの中で生きています。)

『構造化プログラミングについてまとめ』
•構造化プログラミングはプログラムを書く上での基本的作法である。
•現在の色々なグ技法や手法は全てこの作法の延長線上にある。
•大きなプログラムを書く上で構造化プログラミングは必須である。
•小さいプログラムを書く上でもこの作法は有効

•構造化プログラミングの精神を理解して,構造化プログラム言語を使う

こんな話は、仕事やコーディングには直結しませんが、かなり勉強にはなります。ある程度の長年やっている人は、一度はこんなものを目に通しています。
    • good
    • 0
この回答へのお礼

WindFaller 様 ありがとうございます


早速サイトを見てみました。

断片的にはHow To 本に散見できますが、

「良いプログラマは正しいプログラムを書くだけでなく,それが正しく動作することを,分かりやすく証明する必要がある」

「プログラミングの勉強は単にプログラムを書くためだけでは無く, 物事を深く理解するための一つの道である 」

などは私には含蓄のある言葉だと受け取りました。

プログラムを書いていて、実は自分はその本質を理解していなんだなと思うことがしばしばです。

少し頭を整理する手掛かりがつかめそうです。

大変お世話をおかけしました。

お礼日時:2016/06/19 18:35

返事を読みました。

どうもありがとうございます。

>基本からじっくりと勉強してみたいと思います。

教えてくれる物・人がいればよいのですが、情報が手に入れにくくなっているように感じます。

一通りの文法を終えた人にとって、その後のお手本や基礎的なことを指導してくれるものがないのも問題だと思います。

VBAのテクニックって、どうやって学ぶか、以前はさっぱり見当がつかなかったです。調べてみたら、なんのことはなく、技術自体もVB6のサイズダウンだと知りました。今は、VB6の資料が少ないので、なかなか溝が埋まりません。

>私にとっては高度な内容ですので消化しきれませんが

私の言っている話は、ちょっとしたツールなどの使いこなしから生まれたものです。全体を見れるようなツールがあれば、一目瞭然なのですが、それも、今は手に入りにくくなってしまったし(MZ-Toolsなど)、また、私が作ったユーティリティは、メインテが必要になってくるし、ある程度、VBAProject の仕組みを知っている人なら、たやすく作れるマクロです。

それで、もし一通りの技術をお持ちでしたら、お手本をおすすめします。

今、私たちが、見れる本物のVBAのお手本というと、郵便番号ウィザードのソースは勉強になると思います。

http://excelzipcode7japan.codeplex.com/SourceCon …

生のソースですから、制作過程まで想像できます。これを利用しない手はありません。作った会社は、郵便番号のアドバンス社です。これはお手本になります。私の言った「'」のコメントアウトの事も出てきます。変数の付け方とか。
    • good
    • 0
この回答へのお礼

WindFaller 様 ありがとうございます。

本物のVBAのお手本というのを見ましたが、確かに洗練されているなという雰囲気が分かります。
でも残念ながら中身は理解できません。

これまではいきなりコーディングに入り、そこで悪戦苦闘しておりました。
私はもともと機械設計が専門ですが、このマクロというのも機械設計と同じステップで進めるものかなという気がしてきました。
それに例えると、いきなり部品図を描き、そのあとAssy図、全体図を描いているような感じです。やっていることがまるで逆・・・。
全体構想が全くない状態です。

だから後から見直してみると、自分で書いたものなのにどこに何を書いたのか分からず、それを読み解くのに一苦労しています。

フレーム構築から最後のコーディングに至る手順というものに関して、参考になりそうな書籍なりサイトをご存知でしたら教えていただければありがたいです。

お礼日時:2016/06/19 08:01

#2の回答者です。



事情は、よく理解しました。
今回は、別の場所にある同じマクロ名が原因です。

今の段階でトラブルをすぐに起こすかと言われたら、それはないでしょうと答えはしますが、管理としては、かなり良くない状態です。今の状況が直接問題を起こすのかとお聞きなったとしたら、それはありません。

(私もVBAを改編はしますが、その管理についても触れておきます。)

>「会計計算1.0」から始まり、兄弟が10個ほど存在し、同名のマクロがそれぞれに存在します。

よほどのことがない限りは、バージョンを上げたら、データは写しても、前のコードなどはお蔵入りさせてしまいます。

>・会計計算5.5にはマクロが40個ほど存在します。

生きているVBAマクロは残しても、使わなくなったものは、捨ててしまったほうがよいのです。VBAマクロには、一定の割り振りした物理的メモリというものがありますが、それは越えられません。

VBAで、一番いけないのは、ワークシートとのセルが紐付になった状態のものです。例えば、関数式がVBE上に置いているとかいうのは、VBA側の設定方法にも影響受けますが、場合によってはワークシート上の状態をVBE側が監視状態になっています。
(VBE-オプション-全般-順次コンパイルはOFF -> ONに直したほうがよいです。 )

メモリーリークはしていないとは思うのですが、一度タスクマネージャーのプロセスなどでExcelが10分とか20分で、何もしていない、または、マクロを一度使う度にメモリが増加していないか調べたほうがよいかもしれません。

いきなり捨てることが出来ない時は、使わないものは、「'」を先頭につけて、コメントアウト状態にしておきます。(私は、いつもそうしていますが、最近は、マクロのバックアップ-Exportをブック[プロジェクト]全体で取るようにしています。)

また、私の場合は、そのブック(プロジェクト)の全体のマクロ名の一覧をボタンが押すとみれるようになっています。
    • good
    • 0
この回答へのお礼

WindFaller 様

ご助言ありがとうございました。

私にとっては高度な内容ですので消化しきれませんが、これを機会に「ただコピペして動けばよし!」という態度を改めて、基本からじっくりと勉強してみたいと思います。

これまでテキストを読んだりしていますが、内容が分からず頓挫しておりました。でも見よう見まねでやっているうちに概念が少し頭に描けるようになりましたので、内容が理解できるのではないかと思います。

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

お礼日時:2016/06/18 11:34

もしかしたらですが、マクロが記録してあるブックが複数開いてませんか?


複数開いている場合は区別が付くように表示されます。
    • good
    • 0
この回答へのお礼

早速回答ありがとうございます。

今パソコンを再起動して確認しましたが、単独で開いていてもブック付名になっています。
Book2を開いたままBook1のマクロの修正を繰り返していたので、ブック付名で保存されたためと思います。

お礼日時:2016/06/14 17:23

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A