[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロごとシートをコピー・複製したい』(reso)
一つのシートの中で、ゴールシークを自動で実行するマクロ(ボタンを押すと計算実行)を作成しました。
このシートを計算書の標準フォームとして使用することを考えています。
複数ケースの計算を実行する場合には、この標準フォームをシートごとまるっとコピーして使いたい。と思っています。
計算バターンが10個あれば、シートを10個作成するといった感じです。
この計算結果を、同じブック内の他シートにリンクさせたいため、あくまでも同一ブック内に存在させたいのです。
現在シートをコピーすると、マクロのボタンごとコピーできるのですが、押しても、コピー元の別シート側で計算が実行されてしまいます。
複製したシートの中にあるマクロボタンに対して、再度計算するマクロを登録すれば、実行はできるのですが、そうすると、シート複製事にボタンに対してマクロの割り当てる作業が発生し、時間的なロスとなるため、その手間を省きたいです。
現在マクロの実行式・ブログラムは、標準モジュールのところではなく、該当するシートのところに記載しています。
どのようにすれば、マクロごとシートをまるっとコピーさせることができますでしょうか?
< 使用 Excel:Excel2007、使用 OS:Windows10 >
>現在マクロの実行式・ブログラムは、標準モジュールのところではなく、該当するシートのところに記載しています。
内容を理解し切っていないですが・・
本体は標準モジュールに書いて、 シートのところには、そのプログラムを呼出すコードだけ書けばいいんじゃないですか?
(半平太) 2018/10/13(土) 15:46
>シートのところには、そのプログラムを呼出すコードだけ書けばいいんじゃないですか?
・・じゃなかった・・ ごめんなさい m(__)m
「マクロのボタン」にその標準モジュールに書いたプログラムを登録すればいい、と思われますけど?
(半平太) 2018/10/13(土) 15:54
どんなコードなのか、アップして頂けませんか?
データのあるシート と 結果出力シートが別なので、 何か工夫を入れる必要がありそうな気がしてきました。
(半平太) 2018/10/13(土) 16:15
Range("cv113").Value = Range("cv111") * 0.9
Range("cv114").GoalSeek Goal:=Range("cv76"), ChangingCell:=Range("cv113")
Range("cv123").Value = Range("cv111") * 0.9
Range("cv136").GoalSeek Goal:=0, ChangingCell:=Range("cv123")
Range("dh113").Value = Range("dh111") * 0.9
Range("dh114").GoalSeek Goal:=Range("dh76"), ChangingCell:=Range("dh113")
Range("dh123").Value = Range("dh111") * 0.9
Range("dh136").GoalSeek Goal:=0, ChangingCell:=Range("dh123")
こんなかんじです
(reso) 2018/10/13(土) 16:21
>ただ、このマクロを色々なブックに挿入していきたいので、 >プログラム自体は、標準モジュールではなく、 >個別シート内に記載する必要があると思うのですが…。違いますか?
それはどちらのモジュールでも対応可能と思いますが、 下に述べた結論らしきものをご参照ください。
>現在シートをコピーすると、マクロのボタンごとコピーできるのですが、 >押しても、コピー元の別シート側で計算が実行されてしまいます。
マクロボタンへの登録マクロ名が「Sheet1!GOAL」とかになっているからでしょうね。
なんか、今のコードを標準モジュールに引っ越して、 そっちのマクロを登録するだけ(Sheet1!が付かない状態)で いいような気がしてきましたけども、それで解決しないですか?
(半平太) 2018/10/13(土) 17:47
それに引き続きの質問です。
標準モジュールにマクロを移動した結果、別ブックにシートコピーした時には、マクロが紐づかなくなります。
各シートにマクロを書くと、別ブックへのコピー時にはマクロが引き継がれますが、最初の質問の通り、同じブック間でコピーすると、マクロが紐継がれなく。
それぞれにメリット、デメリットがありますが、この両方を満足する方法はないものでしょうか?
同一シート内でのコピー、別シートへのコピーを両方ともに実行したいのです。
(reso) 2018/10/13(土) 20:50
マクロで割り当てればよいのでは無いでしょうか?
シートモジュール
Sub test()
Range("A1").Value = Me.Name End Sub
Private Sub Worksheet_Activate()
Me.Shapes(1).OnAction = Me.CodeName & ".test" End Sub
(kazuo) 2018/10/13(土) 21:44
このプログラムはどういう内容なのでしょうか?
意味が理解できず…。
自分のファイルにどのように反映すればよいのかがわからなくて…。
(reso) 2018/10/13(土) 21:54
>現在シートをコピーすると、マクロのボタンごとコピーできるのですが、 >押しても、コピー元の別シート側で計算が実行されてしまいます。
あれー? 話の展開が、上の前段部分と矛盾してないですか?
>標準モジュールにマクロを移動した結果、 >別ブックにシートコピーした時には、マクロが紐づかなくなります。
そんなハズないと思います。
コピー元のシートのボタンに標準モジュールのマクロを登録してから、テストを開始されましたか?
(半平太) 2018/10/13(土) 23:41
そのあとで、そのシートを新しいブックにコピーすると、
新しいブックの中には、マクロが存在しなかったです。
もともと、そこを改善するために、標準モジュールではなく、シートのほうにマクロを登録していたんです。
(reso) 2018/10/14(日) 00:07
ようやく事情が分かりました。 新しいブックは、ブックごとコピーすると思っていました。m(__)m
でしたら、お手数ですが・・・ 元シート(Sheet1と仮定)のモジュールにコードを戻していただいて、
マクロボタンの登録名を「Sheet1!excuteLocal」にして、 そのプロシージャ「excuteLocal」を以下の通りにする、でどうでしょうか?
Sub excuteLocal() ’追加するプロシージャ ActiveSheet.goal End Sub
Sub goal() ’今までのプロシージャ名がgoal と仮定 Range("cj113").Value = Range("cj111") * 0.9 Range("cj114").GoalSeek Goal:=Range("cj76"), ChangingCell:=Range("cj113") :: :: End Sub
(半平太) 2018/10/14(日) 00:40
話をよく分かってなかったら申し訳ありません。
単にActiveXコントロールのコマンドボタンに、マクロを記述しておけば良いだけのような気がするんですが、 以下では何か不都合があるんですか?
Private Sub CommandButton1_Click()
Range("cj113").Value = Range("cj111") * 0.9 Range("cj114").GoalSeek Goal:=Range("cj76"), ChangingCell:=Range("cj113") Range("cj123").Value = Range("cj111") * 0.9 Range("cj136").GoalSeek Goal:=0, ChangingCell:=Range("cj123")
Range("cv113").Value = Range("cv111") * 0.9 Range("cv114").GoalSeek Goal:=Range("cv76"), ChangingCell:=Range("cv113") Range("cv123").Value = Range("cv111") * 0.9 Range("cv136").GoalSeek Goal:=0, ChangingCell:=Range("cv123")
Range("dh113").Value = Range("dh111") * 0.9 Range("dh114").GoalSeek Goal:=Range("dh76"), ChangingCell:=Range("dh113") Range("dh123").Value = Range("dh111") * 0.9 Range("dh136").GoalSeek Goal:=0, ChangingCell:=Range("dh123")
End Sub
(sy) 2018/10/14(日) 06:10
ご指摘のように、フォームコントロールボタンではなく、ActiveXのコマンドボタンとして
マクロを登録したところ
シートコピーで、そのまま、マクロもコピーされ、そのまま実行することが出来ました。
ありがとうございました。
問題全て解決です。
(resort) 2018/10/16(火) 15:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.