質問: sValue Next i Next week 'loop end End Sub ```
回答: 指摘したい点はいくつかありますが、現時点でエラーの原因となっているのは`Range(sCell).Select`の部分のようですね。 上記を行いたいのであれば、たとえば`ActiveSheet.Range(sCell).Select`のようにシートを指定してあげれば動作すると思います。 ただ、今回提示いただいたコードは 1出力シート("4週")を選択 2出力セルを選択 3アクティブシートのアクティブセルに対して処理をする という流れになっているようですが、アクティブシートやセルを切り替えながら行う処理は処理が重くなる原因にもなり、また処理中に他のExcelファイルが開かれたりするとそちらがアクティブシートになるため誤動作したりもします。 このため、アクティブシートやセルは切り替えず、参照や書き換えだけ行う方法をお勧めします。 以下は上記を盛り込んだサンプルです。 ``` Sub For_Next2() '変数の宣言 Dim i As Long '行数カウント Dim s As String Dim sValue As String Dim rCell As Range '転記先のワークシートを指定 Dim shtOut As Worksheet Set shtOut = Worksheets("4週") 'loop For i = 7 To 49 '転記先のセル指定 Set rCell = shtOut.Cells(i, "D") '参照元のセル s = "3週!$BH" & CStr(i) & "" '代入する関数 sValue = "=IF(" & s & "="""",""""," & s & ")" '実際にセルに表示される関数見本 ※今回の内容であればINDIRECTを使う必要はないので、この式で十分だと思います。 '=IF(3週!$BH7="","",3週!$BH7) '転記先のセルに関数式を反映 rCell.Formula = sValue Next i 'loop end End Sub ``` 参考になれば幸いです。