*二つのマクロを両方実行させたいです*(初心者)
VLOOKUPのように、二つのSHEETで、それぞれ値が一致するものがあればもうひとつのSHEETのほうに値を自動的に表示させる、という仕組みをマクロで作ってみました。
(尚、今回はその中身の質問ではありません)
下記の二つの式は、それぞれは機能する、ということは確認済みなので、中身には問題ないはずなのですが、
これら二つを同じエクセルファイルに、Macro1,Macro2と設定して、実行しても、Macro2のほうしか実行されません。
1のほうは、実行を押しても作動しません。
尚、Macro2を消去すると、1のほうは正常に実行されます。
このMacro1と2は、一つにまとめても問題ありません。
(何にせよどちらも実行されればどんな形でも構いません)
初心者のため、説明が下手ですが、どなたか教えていただけないでしょうか。
どうすれば、下記の1と2を両方実行することができるのでしょうか。
下記が、私の作った式(Macro1と2です)
Sub Macro1()
For s = 2 To 70 '処理するSheet1の行数範囲
b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入
For u = 2 To 70 '検索する元データの行数範囲
If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合
w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入
Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力
Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub
Sub Macro2()
For s = 2 To 70 '処理するSheet1の行数範囲
b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入
For u = 2 To 70 '検索する元データの行数範囲
If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合
w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入
Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力
Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub
No.7ベストアンサー
- 回答日時:
Sub Macro1()
Msgbox "これはMacro1です。"
End Sub
Sub Macro2()
Msgbox "これはMacro2です。"
End Sub
Sub Macro3()
Call Macro1
Call Macro2
End Sub
上記の3つのマクロを1つのモジュールに書いて、Macro3を実行するとどうなりますか?
VBEでは、[F8]キーを押すことで、1行ずつステップ実行させることができます。
ステップ実行で、実際のマクロの流れを確認することができます。
上記のMacro3にカーソルを合わせて、[F8]キーを押してみてください。
そして、上記の3つのマクロがどのように流れになるのか確認してみてください。
それができたら、ご自分で作ったマクロでも[F8]でステップ実行して流れを確認してみてください。
あと、私も#6さんと同様の疑問を持っていますので、回答よろしくお願いします。
この回答への補足
皆様、大変申し訳ありません。
元々の文章にあやまりがありました。
Macro1と2に全く同じものを書いてしまっていましたが、ここの質問欄に載せたときの誤りでした。
大変申し訳ありません。
以下が私が入力していた(本当の)Macroです。
要するに、要点検という名前のSheetとMASTERという名前のシートがあり、
それをSheet1という名前のSheetに、Vlookのような仕組みで、値を引っ張ってきて表示させようとしています。
大変申し訳ありませんでした。
とにかく、教えていただいたやりかたでもう一度やってみます。
Sub Macro1()
For n = 2 To 70 '処理するSheet1の行数範囲
a = Sheets("Sheet1").Cells(n, 3) 'aにC列の値を代入
For m = 2 To 70 '検索する元データの行数範囲
If Sheets("要点検").Cells(m, 3) = a Then '要点検のC列の値とSheet1のC列が一致した場合
v = Sheets("要点検").Cells(m, 4) 'vにD列の値を代入
Sheets("Sheet1").Cells(n, 6).Value = v 'Sheet1のB列に値を入力
Exit For '値が見つかったのでForを終了
End If
Next
Next
Sub Macro2()
For s = 2 To 70 '処理するSheet1の行数範囲
b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入
For u = 2 To 70 '検索する元データの行数範囲
If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合
w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入
Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力
Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub
教えていただいたやり方でついに成功しました。
初心者の私に丁寧に教えていただき本当にありがとうございました。
またこれからもすこしずつ学んでいこうと思います。
お時間をとらせてすみませんでした。
他の皆さんもまことにありがとうございました。
No.6
- 回答日時:
> なぜか、というと、初心者ですので、どうしてよいかわからず例題に習って、
> 必要な式を二つ作ったのです。
> (なので無駄が多いとは思うのですが)
無駄というより無意味ですよ。意味のないことに労力を使う必要を感じないのですが…。
例題にまったく同じものを2個作るようにかいてあるのでしょうか?
なにがどうして良いかわからなかったのか
そこから解決したほうがいいと思います。
基本的に何がしたくて2個作るようになったのですか?
この回答への補足
大変申し訳ありません。
元々記入していたマクロに間違いがありました。
訂正して載せておきましたのでまたお時間があれば見てみてください。
No.5
- 回答日時:
>実行はツール→マクロ→(マクロ名が出てくる)→実行
>です。
実行のやりかたは問題ないようですね。
>これら二つを同じエクセルファイルに、Macro1,Macro2と設定して、実行しても、Macro2のほうしか実行されません。
>1のほうは、実行を押しても作動しません。
それは、Macro2を実行しているからじゃないんですか?
Macro1を実行すると、
Sub Macro1()
のところから始まって、
End Sub
で終了します。
その下に
Sub Macro2()
と書いてあっても、Macro2は実行されません。
それは解っていますか?
同じファイルにいくつものマクロを書いても、実行されるのは、指定して実行させたマクロだけです。
マクロからマクロを実行させることもできます。
その場合は、マクロの中で、
Call マクロ名
と書きます。
なので、Macro1とMacro2があって、その2つをMacro3で実行させたいなら、
Sub Macro3()
Call Macro1
Call Macro2
End Sub
とすればよいです。
この回答への補足
何度も申し訳ありません。丁寧に教えてくださったのに未だうまくいかないです。
Module1にMacro1を記入し、Module2にはMacro2を記入しました。そしてModule3に教えていただいたMacro3を記入しました。そしてMacro3の実行を押すと、なにも起こりませんでした。
End Subは、Macro1,2、3、全てに必要ですよね?
End Subを取ると、エラーが起こってしまいました。
しかし、今申し上げたやり方にしますと、何も起こらないんです。
基本的なところがわかっていないと思うので、お手数をおかけしますがもしなにか間違いがわかりましたらお願いします。
No.4
- 回答日時:
2つ確認させてください。
(1) 具体的に、どのような実行のさせ方をしていますか?
(2) Macro1とMacro2、それぞれのマクロが実行されているかどうかは、どのようにして確認していますか?
この回答への補足
実行はツール→マクロ→(マクロ名が出てくる)→実行
です。
また、それぞれのマクロの実行は、
Macro1だけで実行、
そしてMacro2だけで実行(このときMacro1は完全に消去)
だと、それぞれには作動します。
なので、このそれぞれのマクロに問題はないようです。
No.3
- 回答日時:
どんな手順でマクロを実行していますか?
質問文面から推測すると、VBEのコード上から実行しているような気もしますが、どのような方法であれ1回の実行指示で実行できるのはひとつです。
質問文程度のコード量ならひとつにしても差し支えありませんが、大作になると「プロシージャが大きすぎます」のようなエラーになる恐れがあります。
そんなときは#2氏が提示したように、既存のマクロを順次実行するすマクロを作成し、それを呼び出すことになります。
よってご質問への回答は
1.ひとつにする
→マクロ1の最後(End Sub)の直前にマクロ2の実態部分を記述する
2.#2氏回答のように 希望の順次実行ができるマクロを記述し、そのマクロを実行する
のいずれかでいかが?
この回答への補足
ありがとうございます。馬鹿な質問で申し訳ありませんが、
1、に関しては、
Sub Macro1()
For s ***(省略)
Exit For '値が見つかったのでForを終了
End If
Next
Next
(このNextに続けて下記の式を記入。下記はmacro2()に記入していた式です)
For s = ***(省略)
Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub
で、よいでしょうか。こうすると、実行を押しても何も作動しなくなりました。
また2についてですが、
私が始めに記載しておりましたMacro1と2の式をそのまま続けさまに書いて、
#2氏が教授下さったマクロをその最後に記載すると、実行画面で
Macro1,Macro2,Mainloopの3つに分かれました。
そして、その実行ボタンを押しても、どれも反応がありません。
お手数をおかけし申し訳ありませんが何かわかりましたらまたお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
EXCELのVBAでRange("A1:C4")を...
-
一つのTeratermのマクロで複数...
-
Excel VBAからAccessマクロを実...
-
メッセージボックスのOKボタ...
-
非表示の列をすべて削除するマクロ
-
エクセルに張り付けた写真のフ...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
ExcelVBAでPDFを閉じるソース
-
VBA アドインについて お詳しい...
-
TERA TERMを隠す方法
-
マクロで空白セルを詰めて別シ...
-
EXCELマクロでのThisisWor...
-
サクラエディタ・マクロ → VSCo...
-
エクセルマクロ自動更新
-
[初心者です]VBAで指定列か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報