Graemeには、多数(120以上)の名前付き範囲が定義されたワークブックがあります。彼は、範囲名と定義を別のブックにコピーしたいと考えています。したがって、コピー後、元のブックの範囲C7:H22を参照するMyRange1という名前の範囲は、ターゲットブックに存在し、元の​​ブックの範囲と同じ範囲を参照します。元のブックからターゲットにコピーするものは他にありません。範囲名と定義だけです。

これを行う最も簡単な方法は、定義された各名前をステップスルーし、名前定義をターゲットワークブックにコピーするマクロを使用することです。次に例を示します:

Sub CopyNames()

Dim Source As Workbook     Dim Target As Workbook     Dim n As Name

Set Source = ActiveWorkbook     Set Target = Workbooks("Book2.xlsx")



For Each n In Source.Names         Target.Names.Add Name:=n.Name, RefersTo:=n.Value     Next End Sub

マクロでの作業の大部分は、定義されたすべての名前をステップスルーするForEachループで行われることに注意してください。ターゲットワークブックに名前を作成し、ソースワークブック(Valueプロパティに含まれる)と同じ割り当てを与えます。

デフォルトでは、名前付き範囲のValueプロパティにワークシートの名前が含まれていることに注意してください。ソースワークブックに、たとえばSheet4を参照する名前付き範囲があり、ターゲットワークブックにSheet4がない場合、名前の追加は失敗します。マクロはエラーを生成しません。新しい名前付き範囲は作成されません。解決策は、(a)ターゲットワークブックにソースワークブックと同じシート名が含まれていることを確認するか、(b)不足しているシートがあることを認識し、適切なアクションを実行するようにマクロを変更することです。

マクロを作成したくない場合は、ワークシートをソースブックからターゲットブックにコピーするのが最も簡単な方法です。

Excelは通常、名前付き範囲をワークシートと一緒にコピーします。これが満足のいくアプローチではない唯一の場合は、ターゲットワークブックに、コピーしたいワークシートと同じ名前のワークシートがすでにある場合です。その場合、マクロアプローチを使用するのが最善です。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2469)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。