複数シートのフィルタオプションをマクロで更新したい。
ブックの中に[データ]シート(日々の販売データ)と月別集計シート(4か月分程度を予定)があります。
集計用シート名は[syuukei_201601]・[syuukei_201602]…と設定しています。
[データ]シートから日付・担当者・品目など複数の条件でフィルタオプションを設定し[syuukei_xx]シートに抽出しました。
月別集計シートは、1行目はフィルタ条件の項目を設定。フィルタの条件はORとAND
で複数条件の場合もあるため、2~9行目までを条件入力の欄に設定しました。
(月によって条件が変わります。)
フィルタの結果は11行目以降に抽出しました。
[データ]シートが更新された場合、それぞれの月別シートをマクロで更新したいと思っています。
特定のシートのみを更新する方法は、ネットで調べ、下記のように設定しました。
[syuukei_201601]シートを更新するマクロです。
----------------------------------------------------------
Sub フィルタオプションテスト()
'11行目以降の既存データを削除
Sheets("syuukei_201601").Select
ActiveWindow.Panes(3).Activate
Rows("11:11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveWindow.Panes(1).Activate
Range("A1").Select
Dim myData As Range
Dim myCriteria As Range
Set myData = Worksheets("データ").Range("A1").CurrentRegion
Set myCriteria = Worksheets("syuukei_201601").Range("A1").CurrentRegion
With Worksheets("syuukei_201601")
myData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myCriteria, _
CopyToRange:=.Range("A11"), Unique:=False
End With
End Sub
----------------------------------------------------------
このマクロをブック内のその他のシートにも一度に実行するには、どのように変更したら良いのでしょうか?
シートを複数選択してマクロを実行する方法は、見つけられたのですが、
上記のマクロですとシート名が指定されているため実行できません。
"syuukei_201601"の部分をシート名(数)に合わせて可変にしたいです。
(VBAは、ほぼ素人です。コードの意味を調べながら理解できる程度です。)
複数シートにマクロを適用する方法をご教示ください。
分かりづらい部分は、ご質問ください。
No.6ベストアンサー
- 回答日時:
画像ではよくわからないのですが、次の行の syuukei_ の前に空白がひとつ入ってしまっていました。
ごめんなさい。誤)If Left(st.Name,8) = " syuukei_" then
正)If Left(st.Name,8) = "syuukei_" then
それでもだめなら、画像ではなく、プログラムコードをペーストしてください。
ママチャリさま
ご回答いただき、ありがとうございます。
ご教示いただいたコードで正常に動作いたしました。
思い通りの集計ができうれしいです。
この度は、何度もお答えいただき、ありがとうございました。
こちらの集計作業は、まだ続くため、また質問させていただく場合が、ございます。
お時間がございましたら、ご回答いただければと思います。
本当にありがとうございました。
No.5
- 回答日時:
私ならこうします。
(シート名が、" syuukei_"で始まるシートを対象とする)Sub 特定シート()
For Each st In Worksheets
If Left(st.Name,8) = " syuukei_" then
st.Activate
Call フィルタオプションテスト
End If
Next
End Sub
No.4
- 回答日時:
nananeko5555さんの書いた文書の中に、下記のようなシート名が記載されていますが、どれが正解ですか?
[syuukei_201601]・[syuukei_201602]
[syuukei_xx]……XXは2桁?
[syuusei_XX]……修正?
Case "syuukei_1601", "syuukei_1602"・・・…年月は4桁?
No.3
- 回答日時:
こんな感じです。
事前に、syuukeiシートの行を削除していますが、必要ありません。
Sub test()
Call フィルタオプションテスト("syuukei_201601")
Call フィルタオプションテスト("syuukei_201602")
Call フィルタオプションテスト("syuukei_201603")
Call フィルタオプションテスト("syuukei_201604")
End Sub
Sub フィルタオプションテスト(MySyuukei As String)
'11行目以降の既存データを削除
Dim myData As Range
Dim myCriteria As Range
Dim myCopyTo As Range
Set myData = Worksheets("データ").Range("A1").CurrentRegion
Set myCriteria = Worksheets(MySyuukei).Range("A1").CurrentRegion
Set myCopyTo = Worksheets(MySyuukei).Range("A11").CurrentRegion
Application.DisplayAlerts = False ’これを入れとかないとコーションが表示される場合があります。
myData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myCriteria, _
CopyToRange:=myCopyTo, Unique:=False
Application.DisplayAlerts = True
End Sub
No.2
- 回答日時:
NO1です。
失礼しました。最後のEndWithを消し忘れました。ActiveWindow.Panes(1).Activate も不要では?
作成されたのが貴方なので、何が必要かよく考えてください。
思いつく部分ですが
Sub フィルタオプションテスト()
Rows("11:11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Dim myData As Range
Dim myCriteria As Range
Set myData = Worksheets("データ").Range("A1").CurrentRegion
Set myCriteria = Range("A1").CurrentRegion
myData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myCriteria, _
CopyToRange:=Range("A11"), Unique:=False
End Sub
では?
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
も
Range(Selection, Selection.End(xlDown)).ClearContents
に置き換えられると思う。
No.1
- 回答日時:
>複数シートにマクロを適用する方法をご教示ください。
たぶんに、シート名も毎月変化するのですよね。
抽出する条件などの作業も発生しますよね。
考え方ですが
1、シート名や条件を入力作業を行う。
2、作業を行った集計用シートからマクロを実行する。
3、ほかのシートでも同様、4回繰り返す。
これで十分では
そのためには
Sub フィルタオプションテスト()
ActiveWindow.Panes(3).Activate
Rows("11:11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveWindow.Panes(1).Activate
Range("A1").Select
Dim myData As Range
Dim myCriteria As Range
Set myData = Worksheets("データ").Range("A1").CurrentRegion
Set myCriteria = Range("A1").CurrentRegion
myData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myCriteria, _
CopyToRange:=Range("A11"), Unique:=False
End With
End Sub
と不要な部分を削除したVBAを実行させては如何でしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
VBA シートの切り替えができな...
-
エクセル/マクロ Exit Subが実...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
不明なコマンドです("FROM")。...
-
オペランドが足りませんとコメ...
-
VBAで横データを縦データに変換...
-
Excel2010でふりがなが漢字にな...
-
WordPressをインストールしてい...
-
JWWでDXFファイルを開きたい
-
Access2010 「演算子がありませ...
-
貼り付けをマクロで禁止させたい。
-
ザウルスのLinuxでSEDのスクリ...
-
OBSが起動できません
-
(int)キャストとintvalの違い
-
エクセル DBから該当データを...
-
GhostからWin XPがインストール...
-
エクセルVBAで参照設定というフ...
-
『PHP』 MAMPで$_SERVER["REMOT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
エクセル 「実行時エラー"13":...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 複数シートのフィル...
-
シートの表示が消えて整列をし...
-
フェイス・シートについて教え...
-
エクセルのワークシートの並べ替え
-
Excelユーザーフォームでシート...
-
Excel2000でシート上にボタンを...
-
【エクセル】複数の文字を同時...
-
アクセス97での罫線について
-
エクセルのシートを自動でコピー
-
ワークシート上に配置したコマ...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
WordPressをインストールしてい...
-
オペランドが足りませんとコメ...
おすすめ情報
ご回答いただき、ありがとうございます。
ご回答いただいた、マクロを実行してみましたが、エラーが表示されました。
「コンパイルエラー:
End With に対応する With がありません。」
下から5行目に
With Worksheets("データ") を追加しました。
最初に設定したシートでは、正常に動作しますが、他のシートではエラーが表示されます。
「実行時エラー '1004':
Pane クラスの Activate メソッドが失敗しました。」
【デバック】ボタンをクリックすると、1行目の
ActiveWindow.Panes(3).Activate
がハイライトされます。
修正方法をご教示ください。
よろしくお願いいたします。
ご回答いただき、ありがとうございます。
ご教示いただいた方法で修正し、シート名を指定すれば連続して更新が可能となりました。
「特定シートマクロ」から「フィルタオプションテスト」マクロを呼び出して実行しています。
「フィルタオプションテスト」はご教示ただいた内容とほぼ同じです。
シートを指定して更新はできたのですが、[syuusei_XX]シートのみ更新する方法がわかりません。
<>や*を使ってみたのですが、ダメでした。
宜しければご教示ください。
--
Sub 特定シート()
For Each st In Worksheets
Select Case st.Name
Case "syuukei_1601", "syuukei_1602"
st.Activate
Call フィルタオプションテスト
End Select
Next
End Sub
ご回答いただき、ありがとうございます。
ご教示いただいたマクロを実行したところ、下記のエラーメッセージが表示されました。
「実行時エラー '9'
インデックスが有効範囲にありません。」
デバックをクリックすると
「Set myCriteria = Worksheets(MySyuukei).Range("A1").CurrentRegion」
がハイライトされています。
修正方法がございましたら、ご教示ください。
いろいろ試していたら間違えてしまいました。
分かり辛くてすみません。
抽出するシート名は[syuukei_201601]•[syuukei_201602]と西暦4桁+月2桁です。
失礼いたしました。
よろしくお願いいたします。
ご回答いただき、ありがとうございます。
ご教示いただいた、「syuukei_」で始まるシートのみを更新するマクロを試してみたのですが、
何も更新されませんでした。
同じ環境でシート名を指定したマクロ[特定シート]は正常に動作しました。
何か違っていますか?
教えていただいたのは、[特定シート_可変]と名前を付けました。
画像を添付いたします。アドバイスいただければ、幸いです。