こんにちは、2度目の投稿です。
エクセル複数シートを作業グループ化してセルに値を入力したり色をつけたりすると、作業グループ全体に反映する機能があると思うのですが、これをVBAで記述したいと思っています。
調べると、作業グループで選択したシートはActiveWindow.SelectedSheetsに格納されるとあったので、例えば行を追加する場合、
For Each s In ActiveWindow.SelectedSheets
s.Selection.EntireRow.Insert
Next s
で実行されるかと思いきや・・・同じシートに作業グループのシート数だけ行が増えたのです(・・;)
セルの色を付けたい場合も、
For Each s In ActiveWindow.SelectedSheets
s.Range("A2").Interior.Color = RGB(255, 255, 0)
Next s
これだと1シートにしか色がつかなかったり、インディックス範囲のエラーです・・・┐('~`;)┌
SelectedSheetsというのはコレクションで、Rangeはオブジェクトだから、、、えっと、、、と混乱してきてしまいました。
どのように記述すればいいのでしょうか?
よろしくお願いします。
No.1
- 回答日時:
こんにちはnao_linさん、先日はどうも。
行を追加する場合、
For Each s In ActiveWindow.SelectedSheets
s.Select
Selection.EntireRow.Insert
Next s
と、いったんシートを選択してください。
For Each s In ActiveWindow.SelectedSheets
s.Range("A2").Interior.Color = RGB(255, 255, 0)
Next s
これは大丈夫だと思いますが・・・。
この回答への補足
merlionXXさん、お世話になります!
行を追加する場合、OKでした。ありがとうございました!
しかし、セルの色のところですが、実は、rangeのところはセルで指定していました、
Range(cells(1,1),cells(2,2)).Interior.Color
というようにしているのです。
ですので、
s.Range(以下同じ)
とすると
アプリケーション定義、オブジェクト定義のエラー
となってしまうのです。
なぜでしょうか?
行と同じように、s.selectを前に入れればできたのですが、そうするとアクティブシートが移動してしまったので、作業前に最初のシート名を取得しておいて、最後にまた最初のシートをアクティブにしたのですが、、、とりあえずは解決なんですけど、疑問が残ります。教えてください。
No.2
- 回答日時:
> 行と同じように、s.selectを前に入れればできたのですが、そうするとアクティブシートが移動してしまったので、
だって、作業グループって選択したシートに同じ操作を加えるために設定するんですよね?それを個別に操作しようするからセレクトしていったん作業グループを解除しないと無理なんではないでしょうか?
No.3
- 回答日時:
こんにちは。
>>だって、作業グループって選択したシートに同じ操作を加えるために設定するんですよね?それを個別に操作しようするからセレクトしていったん作業グループを解除しないと無理なんではないでしょうか?
>なるほど・・・。
>大変わかりやすい説明をどうもありがとうございました!
こら、こら、(^o^;;;;
お二人ともシートとセルの関係がこんがらがっておりませぬか。
ちょとコードをアップしようかとも思ったのですが、
既に解決みたいな雰囲気ですのでもうここは見ないでしょうから
次回似たようなものがあった時にでも。(^^;
以上です。
No.4ベストアンサー
- 回答日時:
こんばんは。
ではちょっとだけ説明しますね。
(処理内容)
Sheet1,Sheet2,Sheet3 が選択されていて、
Sheet1がActiveSheetで、
セルA1:B2 に色をつける場合。
Sub Test()
Dim s As Worksheet
For Each s In ActiveWindow.SelectedSheets
●s.Range("A1:B2").Interior.ColorIndex = 6
▲s.Range(Cells(1, 1), Cells(2, 2)).Interior.ColorIndex = 6
Next s
End Sub
上記コードで●はOKなのに▲では何故エラーがでるかというとCellsの前の親オブジェクト(Sheet)が省かれているからです。
Rangeオブジェクトの親オブジェクト(Sheet)を省くと暗にActiveSheetを指定していることになるので、Sheet1を処理している時はいいのですが、次のSheet2を処理するときにエラーがでます。
つまり、Sheet2を処理しようとしているにも拘わらず、Cellsで指定しているセルはActiveSheetであるSheet1のセルを指定していることになり矛盾が起こっているというわけです。
このことは、s.Selectと入れることにより、処理しようとするシートをActiveにすれば上手くいくことからも分かります。。。よね?
で、以下のようにCellsの前に、Sheetオブジェクトを付加すれがOKです。またこれだとActiveSheetももとのままです。
Sub Test()
Dim s As Worksheet
For Each s In ActiveWindow.SelectedSheets
◎ s.Range(s.Cells(1, 1), s.Cells(2, 2)).Interior.ColorIndex = 6
Next s
End Sub
---------------------------------------------------------------------------
それから、行挿入も次のようにすればActiveSheetは変わりません。
Sub Test()
Dim s As Worksheet
For Each s In ActiveWindow.SelectedSheets
s.Range(Selection.Address).EntireRow.Insert xlShiftDown
Next s
End Sub
---------------------------------------------------------------------------
何れにしろ複数のシートを扱うときは処理したいセルがどのシートのセルなのか常に考えておかなければいけないわけですね。
ちょっと分かり難かったかも知れませぬねぃ。(^^;;;
以上です。
「上記コードで●はOKなのに▲では何故エラーがでるかというと」
という点について、疑問が残っていたのですがこれで理解できました。
本当にご丁寧にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Aというブックの1というシート...
-
Excelの「0」だけ非表示、小数...
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
日付が未入力の際はゼロか、空...
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
エクセルで1月0日と表示される!!
-
ExcelでTODAY関数を更新させな...
-
シートAで横に並んだ項目→シー...
-
シート参照で変数を使いたい(EX...
-
エクセルのセルに、マウスで選...
-
エクセルで、勤務表から 日付...
-
Excelシートの保護時にデータの...
-
エクセルのシート間で連続した...
-
(Excel)あるセルに文字を入力...
-
VBAで、セル(Range)のオブジ...
-
エクセルVBA テキストボックス
-
エクセルのルビがついたセルを...
-
エクセルの参照先が固定されて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報