AIと戦って、あなたの人生のリスク診断 >>

よろしくお願いします。
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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

とりあえず,下記でどうですか?


オリジナルからほとんど修正してませんけど。
ついでに青だけ作ってみました。

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
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2005/04/01 02:27

#3です。


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

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

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

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

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

お礼日時:2005/04/01 02:46

ご質問の例では、「赤プロシージャ」は、要りません。


変数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) …」となります。(ワークシート上でも同様。)
何れも、引数は任意です。
    • good
    • 0

マクロは関数と呼ばれるもので、引数で値を渡すことができます。


以下の例では、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
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2005/03/31 02:05

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qマクロでマクロを実行

3ファイル別々にマクロを実行して処理してますが、
1つのマクロで3つのマクロを使って一括処理は出来るのでしょうか?
初心者ですが宜しくお願いします。

Aベストアンサー

「新しいマクロの記録」で既にある3つのマクロを使う動作を記録してはどうでしょうか?

Qエクセルマクロで印刷プリンタを指定する方法

表題のとおりなんですけと、エクセルのVBAでの印刷命令はできますが、複数あるプリンタから特定のプリンタを指定したいのですが、なにかいい方法ありませんか?

Aベストアンサー

印刷のポートがLPT1:(プリンタポート)ならば

例:プリンタ名 自分のプリンタ
Application.ActivePrinter = "自分のプリンタ on LPT1:" 'プリンタの指定
ActiveWindow.SelectedSheets.PrintOut '印刷

印刷ポートがLAN内のプリンタサーバーの場合

例1:プリンタ名 事務室プリンタ
Application.ActivePrinter = "事務室プリンタ on Ne01:"
ActiveWindow.SelectedSheets.PrintOut

例2:プリンタ名 会議室プリンタ
Application.ActivePrinter = "会議室プリンタ on Ne02:"
ActiveWindow.SelectedSheets.PrintOut

Ne01 Ne02はLANにより異なります。

Qマクロからマクロを呼び出す方法

ブックの中にあるマクロを呼び出すマクロを書きたいです。
Sub Macro2()
  Application.Run "Book1!Macro1"
End Sub
とすると、book1のmacro1しか呼び出せませんが、マクロを書いているファイル(コピーして仮にbook2)
のマクロを呼び出すにはどのように書けばよいでしょうか?(マクロブックだけ他のファイルにコピーして使う用途を想定しています。

Aベストアンサー

少し、こちらの回答を加えさせていただきます。

>マクロを書いているファイル(コピーして仮にbook2)のマクロを呼び出すにはどのように書けばよいでしょうか?

それは、いずれにしても、アドイン型のマクロのことではありませんか?

>マクロブックを別に作ってそれを呼び出した方が安全ですね。
安全性というなら、アドイン型でも同じことです。手数が少し増えるだけです。

以下の場合は、実際は登録したものを呼び出しているわけです。ただし、こういうファイルは決められた所に置いてください。あちこちに置かないほうがよいです。フリーツールなどても、独自のフォルダを作るものがありますが、それは良い習慣ではありません。

Sub CallmyAddin()
 'Application.UserLibraryPath 'ユーザーアドインパスはここが良い
 Const ADDINFN As String = "TestAddin"
 With AddIns(ADDINFN)
  Application.EnableEvents = False
  '呼び出すとファイルが開いてしまう
  Application.Run "'" & .FullName & "'!" & "Test1"
  Application.EnableEvents = True
  Workbooks(.Name).Close False
 End With
End Sub

'----
アドインは、、一旦、アドインファイル自体を削除すれば、ワークシートのメニューからアドイン名をクリックすれば名称は消せます。アドイン型ファイルでも、アドイン型にしておいて、見えないワークシートを利用していることもあるようです。ブックのThisWorkbook のプロパティの IsAddin をTrue にすれば、開いてもブックは見えないです。取り扱いがややこしくなります。

Sub myReferenceMacro()
'参照設定をする場合
  myProject.TestMacro1 
  'myProject は、ユニークなプロジェクト名 TestMacro は、マクロ名
End Sub

VBAの参照設定に設定します。その場合、IsAddin を True にすればよいです。元のファイルを開けば、見えなくてもファイルはオープンしていますし、元のブックを閉じれば、見えないファイルはクローズします。なお、ファイルが存在していれば、参照設定自体も、マクロで行うことが出来ます。

少し、こちらの回答を加えさせていただきます。

>マクロを書いているファイル(コピーして仮にbook2)のマクロを呼び出すにはどのように書けばよいでしょうか?

それは、いずれにしても、アドイン型のマクロのことではありませんか?

>マクロブックを別に作ってそれを呼び出した方が安全ですね。
安全性というなら、アドイン型でも同じことです。手数が少し増えるだけです。

以下の場合は、実際は登録したものを呼び出しているわけです。ただし、こういうファイルは決められた所に置いてください。あちこちに...続きを読む


人気Q&Aランキング