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

解決済みの質問

マクロの中に別なマクロを組み込むには

よろしくお願いします。
excel2003でマクロを作っています。
Sheet2のC1、D1、E1にセルを赤く塗りつぶす、赤と入力、カラーインデックスの番号を入力するというマクロを作りボタンに割り当てたいと思います。
全部で色が17色あるので、マクロを17個作らなければならないと思うのですが、なるべく簡略化したいと思います。
そこで下記の「赤」というマクロの中に「色」というマクロを取り込みたいのですが、うまくできませんでした。
どうかマクロの中にマクロを取り込む方法を教えてください。
もし下記のマクロがもっとスマートに出来るようでしたら、それも教えていただけると嬉しいです。
VBAは初心者ですがよろしくお願いします。

Sub 赤()
irobango = 3
ironamae = "赤"
End Sub

Sub 色()
Worksheets("Sheet2").Range("C1").Select
With Selection.Interior
.ColorIndex = irobango
.Pattern = xlSolid
End With
Worksheets("Sheet2").Range("D1").Value = ironamae
Worksheets("Sheet2").Range("E1").Value = irobango
End Sub

投稿日時 - 2005-03-31 00:40:57

QNo.1301907

すぐに回答ほしいです

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

とりあえず,下記でどうですか?
オリジナルからほとんど修正してませんけど。
ついでに青だけ作ってみました。

Dim Irobango, Ironame

Sub 赤()
Irobango = 3
ironamae = "赤"
Call 色
End Sub

Sub 青()
Irobango = 5
ironamae = "青"
Call 色
End Sub


Sub 色()
Sheets("Sheet2").Select
Range("C1").Select
With Selection.Interior
.ColorIndex = Irobango
.Pattern = xlSolid
End With
Worksheets("Sheet2").Range("D1").Value = ironamae
Worksheets("Sheet2").Range("E1").Value = Irobango
End Sub

投稿日時 - 2005-03-31 00:55:06

お礼

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

昨夜、お礼の投稿の途中でビジー状態で接続できないというメッセージが何度も出てしまい、お礼が遅くなってしまいました。すみませんでした。

お陰で思い通りの結果になりました。
ありがとうございました。

投稿日時 - 2005-04-01 02:27:35

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

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

回答(4)

ANo.4

#3です。
先の回答を取り消します。
貴方のマクロを取り敢えず修正したものでした。
作業全体からすると、他の方法があるように思えます。
セルに入力されたデータに応じて、色づけを行っているのでしょうか?
補足をお願いします。

投稿日時 - 2005-03-31 01:31:49

お礼

2度も回答ありがとうございます。
まとめてこちらでお礼をさせて頂きます。

昨夜、お礼の投稿の途中でビジー状態で接続できないというメッセージが何度も出てしまい、お礼が遅くなってしまいました。すみませんでした。

最終的には、17色それぞれのボタンを作り、クリックすると今回の塗りつぶし、赤、3と入力の動作をし、更に別なシートに条件により範囲が変わる複数のセル範囲を塗りつぶすとしたいのです。
「3と入力」に続くマクロは何とか作ってみましたので、今回教えていただいたマクロ「赤」に組み込めばできるのかな…と考えておりました。
本当は「3」の入力は必要ないのですが、マクロが長くなり過ぎてわからなくなりそうなので、一度ここまでのものを作ってみようと考えたのでした。

こんな説明でわかって頂けるでしょうか。
うまい方法があればご教授ください、よろしくお願いします。

投稿日時 - 2005-04-01 02:46:42

ANo.3

ご質問の例では、「赤プロシージャ」は、要りません。
変数irobango、ironameを定数にすればよいのです。

(修正例)
Public Const irobango As Integer = 3, ironamae As String = "赤"

Sub 色()
Worksheets("Sheet2").Range("C1").Select
With Selection.Interior
.ColorIndex = irobango
.Pattern = xlSolid
End With
Worksheets("Sheet2").Range("D1").Value = ironamae
Worksheets("Sheet2").Range("E1").Value = irobango
End Sub

尚、マクロ中に別プロシージャを呼び出す方法は、「プロシージャ名 (引数1) (引数2) …」となります。
又、ユーザー定義関数(functionプロシージャ)では、「計算式 … = ユーザー定義関数名(引数1,引数2) …」となります。(ワークシート上でも同様。)
何れも、引数は任意です。

投稿日時 - 2005-03-31 01:19:36

ANo.1

マクロは関数と呼ばれるもので、引数で値を渡すことができます。
以下の例では、Sub赤()でセットしたirobango,ironamaeの値がSub 色()に引き継がれます。色()内では、Bango,Nameに値がセットされます。

Sub 赤()
irobango = 3
ironamae = "赤"
Call 色(irobango, ironamae )
End Sub

Sub 色(Bango as Integer, Name as String)
~省略~
 Worksheets("Sheet2").Range("D1").Value = Name
 Worksheets("Sheet2").Range("E1").Value = Bango
End Sub

投稿日時 - 2005-03-31 00:47:23

お礼

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

Callというのを入れれば良いのですね。
VBAの参考書を何冊か調べながらなんとかここまで作ってみたのですが、参考書の例が私には難しすぎてCallの意味が理解できていませんでした。
ありがとうございました。

投稿日時 - 2005-03-31 02:05:55

あなたにオススメの質問