- ベストアンサー
複数のシートをアクティブにしてコードを実行する方法は?
- 複数のシートで各シートをアクティブにして次のようなコードを実行するとシートが次々と代わって表示されます。シートを1に固定しながら出来る方法はありませんか
- シートを切り替えながら特定のコードを実行する方法について知りたいです。複数のシートで各シートをアクティブにしてコードを実行するとエラーが発生します。
- シートをアクティブに切り替えながらコードを実行する方法を教えてください。現在、複数のシートで各シートをアクティブにしてコードを実行しているのですが、エラーが出てしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に Worksheets(SN).Activate これを外すだけで実装可能ですが、saab8743さんが見事に罠に引っかかっている為にエラーが発生しています。 直す為には、 Sheets(SN).Cells(gyou, 24).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Sheets(SN).Cells(gyou - (ma1 - 1), 22), Sheets(SN).Cells(gyou, 22))) にしなければいけません。 どこが変わったか分かりにくいでしょうが、・・・Range(Cells(gyou・・・の部分のCellsに所属シート名Sheets(SN).を記述し忘れていることが原因です。 所属シート名が省略されている場合はアクティブになっているシートが暗示的に選択されてしまいます。ですので、Rangeの所属シートとCellsの所属シートが食い違ってエラーが起こってしまうわけです。 今後このようなエラーを軽減する為に、Withの使用でソースの可読性を向上することをお勧めします。 With Sheets(SN) .Cells(gyou, 24).Value = Application.WorksheetFunction.Average(.Range(.Cells(gyou - (ma1 - 1), 22), .Cells(gyou, 22))) End With と言う風に記述します。ピリオドが見にくいでしょうが、見落としに気をつけてくださいね。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
半分出来てたのに,まだ間違いがあります。 間違い: シート.range(cells( ,),…) 正解: シート.range(シート.cells( , ), シート.cells( ,)) 作成例: with worksheets(SN) .Cells(gyou, 24).Value = Application.WorksheetFunction.Average( .Range(.Cells(gyou - (ma1 - 1), 22), .Cells(gyou, 22))) end with
お礼
ありがとうございます 勉強になりました
お礼
あそうですね! 全く気が付きませんでした。大変勉強になりました。また詳しく解説いただいてとても分かりやすかったです ありがとうございました。 WITHもこれから使わせてもらいます。