【緊急】EXCEL VBAの『THIS WORKBOOK』について質問があります.
現在,シート数100枚程度にマクロをかけようとしています.
これらにマクロをかける際に『THIS WORKBOOK』でマクロを作成し,全体にかけているのですが
二枚程度は表紙のニュアンスでシートを作成したもので,マクロをかけたくありません.
このような場合,どのようにマクロをかければよいのでしょうか.
私のイメージでは
『シート1と2以外であればマクロを実行する.』なのですが
なかなかそれらしいサンプルプログラムが発見できずに悩んでいます.
『THIS WORKBOOK』ではできないのですかね・・・・.
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>100枚ほどシートがございましたので各シートにマクロを作成するのが面倒であったので『THISWORKBOOK』でマクロを作成いたしました.
そのような意味でThisWorkbookにマクロを記述するのは誤りかと思います。
ThisWorkbookのイベントを使っているのかどうか解りませんが、このイベントを使いこなすにはしっかりとした知識を持っていないと無理かも知れませんよ。
>マクロでは日付などの条件分岐を用いて,表紙の2枚はその条件にはあてはまらないはずなのですが,なぜかマクロが実行されてしまうので悩んでいました.
シート名でチェックする以外に、セルの内容でも除外シートのチェックが可能ということですか?
それなら、その方式でチェックする方が面倒が無くて良いかもしれませんが、この条件分岐が動作しないということなら、記述になんらかの誤りがある(記述コードにあなたの思い込みがあるとか)と言うことでしょう。
いずれにしても、マクロの具体的な動作仕様やあなたが書かれたコードが不明なので、適切なアドバイスを貰いたいと思っても回答者の想像でしか回答できませんから、アドバイスを貰いたいコードを提示して再質問するもの良いでしょう。
この質問へのリンクを記入しておくと良いかも知れません。
例えば・・・
1.マクロの実行方法(ThisWorkbook使用の可否)
2.実行(除外)シートのチェック方法(今回の回答で理解できないなら)
3.うまく実行できない条件分岐に付いて
No.3
- 回答日時:
マクロを各場所の認識を間違えているようですね。
セルの値が変更されたらマクロを実行、とか、選択するセルの位置が変わったらマクロを実行、とか、そういうワークシートイベントの記述をワークシートモジュールに記述して、通常のマクロは、標準モジュールに記述するのが一般的です。
あなたがやりたいことは、標準モジュール内で、
Dim Sh As Worksheet
For Each Sh In Worksheets
If Sh.Name <> "シート1" And Sh.Name <> "シート2" Then
'ここにシート1と2以外のシートで実行したいマクロを記述
End If
Next Sh
と書けば実現できるはずです。
No.2
- 回答日時:
質問者は、我流でVBAをやっていて、教えてもらったことが無いような感じです。
(1)THIS WORKBOOKはワークシートのイベントのコードを書くところです。
質問ではシートのイベントに関連させて実行することはやっていないようなので、標準モジュールにコードを書いて実行するべきです。
>マクロをかけたくありません
この表現もあまり使われない。
>二枚程度は表紙のニュアンスでシートを作成したもので,
表紙のニュアンスとは。表示としてシートを作った?
意味が不明。全体の理解には影響しないようではあるが。書く必要が無ければ、書かないこと。
>『シート1と2以外であればマクロを実行する
これが本題だろう。
>私のイメージでは
イメージではなく、それ以下の「シート1と2以外であれば・・」を質問表題にかかげるべきです。
>表題の、「THIS WORKBOOK』について質問」
は、的はずれを公言していることに見える。
ーー
シートを特定して、それに対する処理をスキップすれば良い。
シートの特定は
A.シートの名前
B。インデックス番号
C。Activesheet
D。NextやPrevious
E。For Each などある。この基本を抑えてますか。
ーー
Activesheetはひとつ、インデックス番号はシートタブを移動させると変わるので当てにならない。
本件は処理する全シート100個の中で2個を除いて全て処理をするならE.の方法が良かろう
2+100+アルファのシートがあるなら別だが。その場合はアルファのシート名も除外する中に含める。
>サンプルプログラムが発見できずに悩んでいます
Googleででも「VBA シート 多数」で照会すればFor Eachの処理にいたる。
検索にはある程度のVBAの素養が必要で、背景にある勉強が、まだそこまで行ってない(経験が少ない)のが原因でしょう。
コード例
Sub test01()
For Each sh In Worksheets
Select Case sh.Name
Case "Sheet1", "Sheet3"
Case Else
MsgBox sh.Name
End Select
Next
End Sub
シートを挿入操作で10程度つくり、シート名を変えず上記を実行。Sheet1、Sheet3以外のシート名が
出てくることを確認し納得。
その上でMsgboxのところへしたい処理のコードを入れる。
ーー
上記はCase文を使ったがIF文でもよい。
もっと除外シートが多ければ、1つのシートの1つの列のセルに、除外するシート名を並べ、それのどれかに該当するかどうか、聞けば良い。数百までなら使用に耐えるでしょう。
ーーー
>シート数100枚程度に
エクセルでは予想を超えた使い方ではないかな。
システム設計を良く考えて、アクセスなどで処理すべき領域ではないかな。
No.1
- 回答日時:
>マクロをかける際に『THIS WORKBOOK』でマクロを作成し,全体にかけているのですが
マクロをかけるとは言いません。
設定するとか実行させるといいます。
それになぜ、ThisWorkBookにマクロを設定しているのでしょうか?
ブックの各種イベントで動作させるマクロなら ThisWorkBookのイベントに記述するのは正しいです。
>私のイメージでは『シート1と2以外であればマクロを実行する.』なのですが
コードでシート名を受け取る(チェック)するだけですから、難しいことではないはずですよ。
アクティブシートで実行するマクロなら、ActiveSheet.Name でシート名が解りますよね。
シートのイベントであれば、イベントのパラメータに”Sh As Object”というのがあるので、下記のようなコードでシート名を判別して実行できます。
プロシージャではShというオブジェクト変数で内容を受け取ることができます。
「Private Sub Workbook_SheetActivate(ByVal Sh As Object)」
________________________________________
'シート1と2以外であればマクロを実行する
If Not (Sh.Name = "シート1" Or Sh.Name = "シート2") Then
'処理
End If
'シート1と2であればマクロを終了する
If Sh.Name = "シート1" Or Sh.Name = "シート2" Then
Exit Sub
End If
ご回答ありがとうございました.
>それになぜ、ThisWorkBookにマクロを設定しているのでしょうか?
ブックの各種イベントで動作させるマクロなら ThisWorkBookのイベントに記述するのは正しいです。
100枚ほどシートがございましたので各シートにマクロを作成するのが面倒であったので『THISWORKBOOK』でマクロを作成いたしました.
また,マクロでは日付などの条件分岐を用いて,表紙の2枚はその条件にはあてはまらないはずなのですが,なぜかマクロが実行されてしまうので悩んでいました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) 【VBA】複数ブックから特定のシートを抽出して一つのブックに集約するマクロについて 3 2022/09/04 15:05
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) Excelについて 1 2023/03/06 10:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAの天才来てください
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロでアクティブ...
-
【VBA】指定した検索条件に一致...
-
excelのマクロで該当処理できな...
-
VBAでオブジェクト変数にsetし...
-
エクセル・マクロ シートの非...
-
ブック名、シート名を他のモジ...
-
Excelマクロのエラーを解決した...
-
VBA 検索して一致したセル...
-
Worksheet_Changeの内容を標準...
-
シートが保護されている状態で...
-
エクセルVBAでダブルクリックを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報