[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート名指定しないでマクロをつくる』(ほと)
1週間ごとにファイルになっていてシートの名前が日付になっています。
その6つのシートに同じマクロで作業したいのですが、
1つのシート分のマクロは作りました。
シート名が固定じゃないのでこのあとどうやればいいのかわかりません。
どなたかアドバイスをお願いします。
ブックにその6個のシートしかないなら
Sub test() Dim SH As Worksheet
For Each SH In ThisWorkbook.Worksheets
'作ったマクロ Next End Sub
で、回したらいかがでしょうか? (SHIOJII)
これでもいいかな? (SHIOJII) Sub test() Dim sh As String
For Each sh In Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet5") With Sheets(sh)
'作ったマクロ
End With Next
End Sub
はじめの方でやらせていただきましたが
シート1つ目で終わってしまいます。
回すの意味がちょっとわからないのですが、そのままでは使えないのでしょか?
あとその次のほうは
For Each sh のところのshで
「コンパイルエラー
For Each に指定する変数はバリアント型またはオブジェクト型でなければなりません」
と出てしまいます。
OSがXPでoffice2000なのですが、お手数ですがよろしくお願いします。
失礼しました。後のほうは、
Dim sh As Variant
ですね。
はじめのほうも、 With SH
End With で、はさんでますか?
後は、どのようなマクロを組んでいるかわからないので・・・ (SHIOJII)
マクロを標準モジュールに書いて(作って)あって、そのコードに 特定のシートの指定がなければ、処理は、選択されている シートが対象になって処理されますから、シート毎に作るということ はありませんよ。 くまでも、マクロは1個ですよ。(標準モジュールに)
はじめのほうは
Sub test()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
Range("B10:I10").Select Application.CutCopyMode = False Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="0" Selection.AutoFilter Field:=2, Criteria1:="0" Selection.AutoFilter Field:=3, Criteria1:="0" Selection.AutoFilter Field:=4, Criteria1:="0" Selection.AutoFilter Field:=5, Criteria1:="0" Selection.AutoFilter Field:=6, Criteria1:="0" Selection.AutoFilter Field:=7, Criteria1:="0" Selection.AutoFilter Field:=8, Criteria1:="0" Rows("11:45").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select
Next End Sub
とやっています。どこにwith SH と End With 入れればいいかわかりません。
後の方は With Sheets(sh) のところで
「実行時エラー9:インデックスが有効範囲にありません」
と出てしまいます。(ほと)
Sub test()
Dim sh As Variant
For Each sh In Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet5") With Sheets(sh)
Range("B10:I10").Select Application.CutCopyMode = False Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="0" Selection.AutoFilter Field:=2, Criteria1:="0" Selection.AutoFilter Field:=3, Criteria1:="0" Selection.AutoFilter Field:=4, Criteria1:="0" Selection.AutoFilter Field:=5, Criteria1:="0" Selection.AutoFilter Field:=6, Criteria1:="0" Selection.AutoFilter Field:=7, Criteria1:="0" Selection.AutoFilter Field:=8, Criteria1:="0" Rows("11:45").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select
End With Next
End Sub
説明が悪かったようですみません。
選択されているシートだけでマクロを実行するのではなく
シート名が固定ではない(毎週かわるので)シート全部に同じ作業をさせるマクロを作りたいのですが
なんとかできないものでしょうか
>シート名が固定ではない(毎週かわるので)シート全部に同じ作業をさせるマクロを作りたいのです
なら、とりあえずこれで動くと思います。 もう寝ますので、後は明日か、別の先生が・・・ (SHIOJII)
Sub test()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets with SH
.Range("B10:I10").Select Application.CutCopyMode = False Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="0" Selection.AutoFilter Field:=2, Criteria1:="0" Selection.AutoFilter Field:=3, Criteria1:="0" Selection.AutoFilter Field:=4, Criteria1:="0" Selection.AutoFilter Field:=5, Criteria1:="0" Selection.AutoFilter Field:=6, Criteria1:="0" Selection.AutoFilter Field:=7, Criteria1:="0" Selection.AutoFilter Field:=8, Criteria1:="0" .Rows("11:45").Select Selection.Delete Shift:=xlUp Selection.AutoFilter
End With
Next End Sub
>シート名が固定ではない(毎週かわるので)シート全部に同じ作業をさせる
そういうことであればヒントが数点あります。 ヒント1 シート数を固定しないで,マクロ実行中にマクロで確認して最後の シートまで,自動で処理させます。 n=worksheets.count でシート数が数えれます。
ヒント2
シート名に固有の名前を使わないでworksheets(i) のように 変数で表記して,左から何番目のシートかで,区別する。 i=1,2,3・・・・ と数値を変化させれば シートは自由自在に指定できます。
ヒント3
i=1 to n で繰返して,各ワークシートで処理させ,最後まで 繰返す。
(標準モジュールに)
Selectはやめましょう。 SH をSelect していないから、最初のシートで全て実行されているのです。
With SH With .Range("B10:I10") .AutoFilter .... .Autofilter .... . . .
End With .Rows("11:45").Delete .AutoFilterMode = False End With (seiya)
Sub test()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
With sh
With .Range("B10:I10")
Application.CutCopyMode = False
.AutoFilter .AutoFilter Field:=1, Criteria1:="0" .AutoFilter Field:=2, Criteria1:="0" .AutoFilter Field:=3, Criteria1:="0" .AutoFilter Field:=4, Criteria1:="0" .AutoFilter Field:=5, Criteria1:="0" .AutoFilter Field:=6, Criteria1:="0" .AutoFilter Field:=7, Criteria1:="0" .AutoFilter Field:=8, Criteria1:="0"
End With .Rows("11:600").Delete .AutoFilterMode = False End With
Next End Sub
(ほと)
ほとさんのやり方だと、
With sh .Select '<- この一行挿入
だけでよいでしょう。 (seiya)
With sh
.Select '<- この一行挿入
でうまくいきました。意味は分からないですが、魔法の言葉のように感じられました。
どうもありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.