質問: マクロでシート名を配列に格納して比較したい はじめまして。 異なるファイル間でそれぞれシート名を比較して、ないものがあればそのシートを元ファイルに追加したいのです。新ファイル(任意の位置に増加シートがあります)→元ファイル(新ファイルの増加シートを新ファイルと同じ並び順で追加される) 元ファイルはすでに記入してあるものなので、単純に上書きではまずいので、上記の様な方法を採りたいのですが、大きく3点でつまずいてます。 1.シート名を配列に格納 2.配列の比較(存在の有無) 3.同じ位置に追加 と肝心なところがダメなわけでありますがなんとか助けて頂けないでしょうか? 1.2.はたぶんこの方法かなと思ってるだけですが。(for nextの2重ループでは挫折しましたので) 仕様はマクロ記入ファイル(farstbookとしています)からコピー先ファイル(oldbookとしています)とコピー元ファイル(newdbookとしています)を開き、それぞれを配列に格納して最初の流れで進めたいのです。指定したファイルを検索させて開くことや、シートの追加等はいつもやっているのですが、今回は複数と複数の比較で困っております。どなたか力を貸してください。
回答: こんにちは。 配列を使う必要性は感じません。メリットはほとんどないでしょう。 こんな感じではダメなのですか? sub sample() dim wbsrc as workbook dim wbdst as workbook dim shsrc as object dim shdst as object set wbsrc = workbooks("newbook.xls") ' // コピー元 set wbdst = workbooks("oldbook.xls") ' // コピー先 for each shsrc in wbsrc.sheets on error resume next set shdst = wbdst.sheets(shsrc.name) on error goto 0 if shdst is nothing then shsrc.copy before:=wbdst.sheets(shsrc.index) end if next end sub なお、単にシートと書いてありますが、ワークシートとシートは 別物です。上記は「シート」で書いてます。 [参考] worksheets: ワークシートのみ sheets : ワークシートに加え、グラフ、マクロ、ダイアログシートを含む ゆえに dim shsrc as worksheet ではなく、 dim shsrc as object です。