質問: Workbooks(myFileName(1)).Sheets(ShName) ~ws(0).Move Before:=ThisWorkbook.Sheets(1) まで挟んで見ましたが、For Each ws(1) In Workbookで「コンパイルエラー:Workbookが定義されていません」となりました。 ### 補足情報(言語/FW/ツール等のバージョンなど) Excel2016
回答: わざわざ分析ファイルに出力シートを作成してあとから移動するのではなく、最初から出力用ブックに作成してはどうでしょうか? ファイルを開く際に使うOpeen関数は開いたブックを返してくれます。 同様にシートを追加する際のWorkSheets.Add関数も作成したシートを返してくれます。 これらもうまく活用すれば、比較的シンプルなコードで目的の動作が実現できると思いますよ。 以下は上記を反映したサンプルコードです。 ``` Sub regression2() Dim myFileName(1) As String '処理するファイル名 Dim Ya As String 'Y Dim Xa As String 'X Dim SName As String 'シート名 Ya = "A2:A101" 'Y範囲 Xa = "B2:B101" 'X範囲 SName = "Sheet1" 'シート名 'ファイル選択処理 myFileName(1) = Application.GetOpenFilename(Title:="ファイル選択", filefilter:="Excelブック(*.xls),*.xls)") 'キャンセル時の処理 If myFileName(1) = "False" Then Exit Sub '処理ファイルを開く Dim wbRead As Workbook '読み込みブック Set wbRead = Workbooks.Open(myFileName(1)) 'パスを除いたファイル名を取得 myFileName(1) = Mid(myFileName(1), InStrRev(myFileName(1), "\") + 1) '出力用ブック(現在のブック) Dim wbOut As Workbook '読み込みブック Set wbOut = ThisWorkbook Dim wsRead As Worksheet '読み込みシート Dim wsOut As Worksheet '出力シート For Each wsRead In wbRead.Worksheets '読み込みブックのすべてのシートをループ処理 '出力用ブックに出力用シートを追加 Set wsOut = wbOut.Worksheets.Add(, wbOut.Sheets(wbOut.Sheets.Count)) '出力用シート名の設定 wsOut.Name = myFileName(1) & "分析結果" & wbOut.Sheets.Count '分析ツールの実行 Application.Run "ATPVBAEN.XLAM!Regress", wsRead.Range(Ya), wsRead.Range(Xa), False, False, , wsOut.Range("A1"), False, False, False, False, , False Next '分析用ファイルの終了 wbRead.Close savechanges:=False End Sub ``` 参考になれば幸いです。