エクセルのVBAを使って、同一ブック内の特定の複数のシートに同じ処理を行いたいのです。
私自身にそこまでのスキルが無いのが一番なのですが、ググって使えるのではないかと思われるコードを記述したのですが、最初のアクティブになっているシートしか処理されません。
教えていただけますでしょうか?
Sub 行おきに背景色を変える1()
Dim i As Long, s As Worksheet
Application.ScreenUpdating = False
Sheets(Array("あいう", "かきく", "たちつ", "さしす")).Select
For Each s In ActiveWindow.SelectedSheets
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
ActiveSheet.Rows(i).Interior.ColorIndex = 0
Next i
Next s
Application.ScreenUpdating = True
End Sub
「あいう」「かきく」・・・という名のシートを1行おきに背景色を変えたかったのです。
For i からNext i までの記述が1行おきに背景色が変えられるのは確認できています。
※ この部分は同じ処理をする記述ですよね?
No.1ベストアンサー
- 回答日時:
こんにちは!
>ActiveSheet.Rows(i).Interior.ColorIndex = 0
というコトは「塗りつぶしなし」と同じコトなので
あらかじめすべてのSheetのセルが何らかの色で塗りつぶされているというコトでしょうか?
一例です。
1行おきに「薄い黄色」になります。
Sub Sample1()
Dim i As Long, k As Long, myRng As Range
Dim wS As Worksheet, myAry As Variant
myAry = Array("あいう", "かきく", "さしす", "たちつ")
For k = 0 To UBound(myAry)
Set wS = Worksheets(myAry(k))
For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row Step 2
If myRng Is Nothing Then
Set myRng = wS.Cells(i, "A")
Else
Set myRng = Union(myRng, wS.Cells(i, "A"))
End If
Next i
If Not myRng Is Nothing Then '//←念のため//
myRng.EntireRow.Interior.ColorIndex = 36 '//←薄い黄色★//
Set myRng = Nothing
End If
Next k
End Sub
※ お示しのコードのように「塗りつぶしなし」にしたい場合は
「★」の行で調整してください。m(_ _)m
fujillinさんからも「模範解答」とされているこちらをベストアンサーとさせていただきます。
また、複数シートの一括処理を質問していますので、よろしかったら懲りずにお教えいただけたらと思います。(^^;)
ありがとうございました。m(__)m
No.4
- 回答日時:
No.1・3です。
>”Uinon"メソッドは失敗しました」とエラーが・・・
おそらく複数シートにまたがって変数「myRng」にセルを格納することはできないはずです。
そのためそのようなメッセージが表示されたのだとおもいます。
必ず1シートずつの操作にする必要がありますので、
次のシートに移る場合「myRng」は「空」にしてやる必要があります。
そのためNo.1のコードでは次のシートに移る前(Next k の前に)
>Set myRng = Nothing
として、「myRng」を「空」にしています。m(_ _)m
No.3
- 回答日時:
No.2です。
前回のコードは1行ずつ色付けするのではなく、
Sheet毎にA列の奇数行を選択しておき、その行すべての色に手を付ける方法にしていました。
一つのSheetで↓のコードをためしてみてください。
Sub ためし()
Dim i As Long, myRng As Range
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 2
If myRng Is Nothing Then
Set myRng = Cells(i, "A")
Else
Set myRng = Union(myRng, Cells(i, "A"))
End If
Next i
myRng.EntireRow.Select
End Sub
これで奇数行だけが選択されているはずです。m(_ _)m
No.2
- 回答日時:
こんにちは
すでに模範的な回答が出ていますので、実際の処理はそちらを参照していただくことにして・・・
>最初のアクティブになっているシートしか処理されません。
一番の原因はカラー設定をしている
ActiveSheet.Rows(i).Interior.ColorIndex = 0
が、アクティブシートに対しての処理になっていることだと思います。
せっかく、
>For Each s In ActiveWindow.SelectedSheets
として順にシートを処理しようとしているのですが、その場合は処理の対象とするシートは「s」でなければうまくいきませんよね。
…ということで、以下の2行でActiveSheetを参照している部分をシートsを参照するように修正すれば、ご提示のコードでもお考えのように動作すると思います。
>For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
>ActiveSheet.Rows(i).Interior.ColorIndex = 0
↓ ↓ ↓
For i = 1 To s.Cells(Rows.Count, 1).End(xlUp).Row Step 2
s.Rows(i).Interior.ColorIndex = 0
VBAでは各シートを順に処理するのが普通の考え方と思いますが、一方で、手動操作では複数のシートを選択しておいてまとめて処理することもできますね。
これをそのままVBA化すると以下のようになりますが、こちらでも同様の処理が可能です。
ただし、複数のシートをまとめて処理しているので、以下では最初のシートでループの範囲を決めてしまっています。
(SelectやActivateの処理が混じるのでお勧めできる記述法ではありませんが、ひとつのご参考までに)
Dim rw As Long
Worksheets(Array("あいう", "かきく", "たちつ", "さしす")).Select
For rw = 1 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Step 2
ActiveSheet.Rows(rw).Select
Selection.Interior.ColorIndex = 0
Next rw
お教えいただいた修正でうまく動作できたのですが、fujillinさんも言われている「模範解答」をベストアンサーとさせていただきました。
ありがとうございましたm(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
マクロを複数シートに実行するには?
Excel(エクセル)
-
ExcelVBAで、指定したシートに対して同じ処理を行いたい
Excel(エクセル)
-
-
4
マクロを特定の複数シートで実行する方法
Excel(エクセル)
-
5
作ったマクロを複数のシートで実行できるようにしたい。
Excel(エクセル)
-
6
【エクセルマクロ】複数シートで同じマクロを実行
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
9
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
10
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
11
エクセルで複数のシートのクリアをしたいです
Excel(エクセル)
-
12
VBAで指定シート以外の選択
Visual Basic(VBA)
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
14
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
17
Excel マクロを各シートごとに実行したい
Excel(エクセル)
-
18
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
19
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
20
VBAで先月、先々月を求める方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
EXCELの図形(テキストボックス)...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
エクセルで複数のシートに画像...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの複数シートでのリン...
-
別シートの文字列があったら現...
-
エクセルのシー名を二段表示に...
-
ハイパーリンクでジャンプした...
-
EXCELで存在しないシート...
-
エクセル2003で、複数のシート...
-
エクセルの2つのシートを並び...
-
ワークシートそのものの色を変...
-
EXCELの「シートの見出し」のフ...
-
エクセル:項目を自動で50音の...
-
エクセルマクロでシート名を条...
-
エクセル、特定のシートにパス...
-
エクセル関数=INFO("numfile")
-
Excel 全シート上のボタンを削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
ハイパーリンクでジャンプした...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
EXCELの図形(テキストボックス)...
-
エクセルのシート連番の振り直し
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
ワークシートそのものの色を変...
-
Wordで差し込み印刷時に表示す...
-
エクセルの2つのシートを並び...
-
エクセル、特定のシートにパス...
-
EXCELで存在しないシート...
-
エクセルVBAでエラー!
-
エクセルで誤ってF11キーを押す...
-
指定したシート名以外を非表示...
-
アクセスからエクセルのシート...
-
エクセルマクロでシート名を条...
おすすめ情報
思っていた通りの処理をしてくれました。
よく考えてみればおっしゃる通りですね。
「シートかきく」が選択されている時はアクティブだろうと思ってしまい、何も疑問に思いませんでした(^^;)
「にわか」が露呈しちゃいましたね。m(__)m
アドバイスありがとうございますm(__)m
はい、年間施行データがあり、1件ずつの担当者(例の「あいう」等)の行ごとに色を付けています。
そして担当者個々のシートを作り振り分け、見やすいように全行色付なモノを1行おきに変更したかったのです。
お示しいただいたコードをググりながら(^^;)読み解いて?いるのですが、
myAryに選択したい候補を記述し、For kで候補を順にとし、Set wSが順番に選択されるシートを宣言。とここまでがシート選択。
For kからが1行ごとに・・・までは何となく理解できたのですが、「Nothing」が出て来て「Union」が???(^^;)
「Nothing」が関連付け?等を停止する、「Union」が格納するらしいことはわかったのですが、ここでの結びつき?が???状態なんです。
No.1のtom04さんですよね!?(^^;)
「ためし」自体は問題なく出来ました。
そこで、当初の目的の複数のシートを処理するためにNo.1のSet wS = Worksheets(myAry(k))の次の行を差し替えてみました。
「Cells(i, "A")」は「wS.Cells(i, "A")」に変更しました。
すると、「”Uinon"メソッドは失敗しました」とエラーが(;´・ω・)
「For k」がArrayに記述した候補を順番にアクティブにして、「For i」がそのアクティブにされた候補で希望の処理をする、という理解自体が間違っているのでしょうか?