質問: Worksheets("リスト") Workbooks("基データ.xlsm").list.Range(list.Cells(2, 7), list.Cells(k, 11)).ClearContents ```
回答: `Worksheets("リスト")` は、`ActiveWorkbook.Worksheets("リスト")` の省略形です。 つまりアクティブなファイル(マクロを実行しているファイル)内の「リスト」シートを示します。 `Workbooks("基データ.xlsm").Worksheets("リスト")` は「基データ」ファイルの「リスト」シート、を意味します。 `Workbooks("基データ.xlsm").list` は「基データ」ファイル内の「マクロを実行しているファイル内のリストシート」という、わけのわからないものを指定していることになります。 ``` Set list = Workbooks("基データ.xlsm").Worksheets("リスト") list.Range(list.Cells(2, 7), list.Cells(k, 11)).ClearContents ``` とすることで指定したい状態になると思いますが、いかがでしょうか。 > > Workbooks("基データ").Worksheets("リスト").range(list.cells...) > > とすると動くのですが、 > > このとき、セルの番地を指定するための「list」はそのままでも動く理由がわかりません。 > > > list を展開して書き直すと、 `Workbooks("基データ").Worksheets("リスト").Range(ActiveWorkbook.Worksheets("リスト").Cells(2, 7), ActiveWorkbook.Worksheets("リスト").Cells(k, 11)).ClearContents` と参照しているのは「基データ」ファイルではなく、マクロを実行しているファイルの「リスト」シートとなります。 「基データ」はマクロファイルからコピーしているとのことで、つまりは「たまたま結果が一致する」状態だったということです。