• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ 複数のシートに適用する記述がわかりません)

マクロ 複数のシートに適用する記述がわかりません

このQ&Aのポイント
  • マクロを複数のシートに一括適用する方法についての質問です。シート3からシート33まで同じ処理を行いたいのですが、現在の記述ではうまく動作しません。解決方法を教えてください。
  • シート3からシート33まで同じ処理を一括適用するマクロが必要です。現在の記述ではエラーが発生してしまいます。どの部分を修正すれば良いでしょうか?お知恵を拝借したいです。
  • 複数のシートに同じ処理を適用するマクロを作成していますが、エラーが出てしまい解決できません。シート3からシート33までの範囲で処理を行いたいのですが、どのように修正すれば良いでしょうか?ご教示いただけると助かります。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

同じマクロをダブって登録はできませんので,それではこの方法は使えません。 諦めて各シートに元のマクロを登録する方法に戻すか,またはこれまでThisWorkbookに登録していたWorkbook_Sheetchangeマクロを消して(=それを別のやり方に変えて)今回のマクロを使うか,または,がんばって2つのマクロの機能を1つのマクロに統合してください。 がんばって2つのマクロの機能を1つのマクロに統合するとは,つまり「具体的に」どんなシート構成にしていて,「具体的に」どんなシート名が並んでいて,どのシートでは何をしたい,そういったあなたのヤリタイ具体的な作業に照らして,適切にマクロの書きぶりを修正するということです。

yamagou
質問者

お礼

いつも、ご回答いただきありがとうございます。 せっかく、お手数をおかけしましたが、今回は各シートに元のマクロを登録することで、当面の解決策といたします。 しかし、2つを統合する方事が出来るなら、コツコツとちゃれんじして見ようと思っています。ありがとう、ございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

各シートのシート名タブ右クリックでコードの表示で表示したシートのマクロは「全て消去しておく」 VBE画面でプロジェクトエクスプローラから,当該のブックに含まれている「ThisWorkbook」モジュールをWクリックする 現れたシートに下記をコピー貼り付ける private sub Workbook_SheetChange(byval Sh as object, byval Target as excel.range)  if sh.index < 3 or sh.index > 33 then exit sub  set target = application.intersect(target, sh.range("E5:N12,E14:N22,E24:N28,E30:N34"))  if target is nothing then exit sub  on error resume next  for each h in target   if h <> "" then    application.enableevents = false    h.value = application.worksheetfunction.vlookup(h.value, worksheets("マクロリスト表").range("A:B"), 2, false)    application.enableevents = true   end if  next end sub ファイルメニューから終了してエクセルに戻る 3~33枚目のシートの所定のセルに記入すると,「そのシートに限り」書き換える。 #捕捉 「3~33枚目のシート」とは,シート名タブを左から数えて1枚目,2枚目,3枚目という意味です。 シート名ではないので間違えないように気をつけてください。

yamagou
質問者

補足

早速、お答え頂きましてありがとうございます。 ご指示にしたがい実行しましたところ、 コンパイルエラー  名前が適切ではありません:Workbook_SheetChange と出まして、ヘルプを見ますと 名前が適切ではありません。 識別子が別の識別子と競合しているか、または修飾が必要です。・・・ と書かれています。 下記のように、先に同じシート範囲にマクロがあり、重複してしまったせいでしょうか? 最初に、「ThisWorkbook」モジュールのすでに下記の様なマクロがあることを、記入するべきでした。 私の知識があまりにも初心者過ぎて、何に留意して質問したらよいか、今ひとつつかめなくて、ご迷惑をおかけしております。 お忙しいところ、申し訳ありませんが、対処法をお教え願えないでしょうか。 よろしくお願いいたします。 先にあったマクロ Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) If Sh.Name = "勤務表" Or Sh.Name = "勤務表データ" Or Sh.Name = "マクロリスト表" Or Sh.Name = "マニュアル" Or Sh.Name = "データシート" Then Exit Sub If Target.Address <> "$U$1" Then Exit Sub '以前やったとおり、マクロをトリガする「実入力セル」の番地を記載する事 If Sh.Range("$U$1") = "" Then Exit Sub On Error GoTo errhandle Sh.Name = Sh.Range("$U$1").Text Exit Sub errhandle: MsgBox "BAD SHEET NAME" End Sub 今回のマクロ Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) If Sh.Index < 3 Or Sh.Index > 33 Then Exit Sub Set Target = Application.Intersect(Target, Sh.Range("E5:N12,E14:N22,E24:N28,E30:N34")) If Target Is Nothing Then Exit Sub On Error Resume Next For Each h In Target If h <> "" Then Application.EnableEvents = False h.Value = Application.WorksheetFunction.VLookup(h.Value, Worksheets("マクロリスト表").Range("A:B"), 2, False) Application.EnableEvents = True End If Next End Sub

すると、全ての回答が全文表示されます。

関連するQ&A