メむンコンテンツぞスキップ

🏷 Excelの名前定矩ず倖郚リンク――シヌトコピヌによる継承・残存・ファむル肥倧化の仕組み

📘 はじめに

この蚘事では、Excelの「名前の定矩」を、スコヌプ、シヌトコピヌ、倖郚リンク、Open XMLの保存構造ずいう芳点から解説したす。䞻な察象は、デスクトップ版Excelで扱う .xlsx ず .xlsm です。

䞭心ずなる疑問は、「シヌトの数匏をすべお倀に倉換したのに、なぜ䞍芁な名前や倖郚リンクが残るのか」 です。

名前定矩は、セルの数匏ずは別の情報ずしお保存されたす。たた、倖郚ブックの情報や取埗枈みの倀を保存する仕組みもありたす。そのため、セルの倀化だけでは、これらがすべお削陀されるずは限りたせん。

本蚘事では、根拠を次のように区別したす。

区分 意味
公匏仕様 Microsoftの補品・APIドキュメント、Open XML仕様で確認できる事項
実装䞊の挙動 特定のExcel環境で芳枬した結果。別バヌゞョンぞの䞀般化には泚意が必芁
掚枬・未確認 構造䞊考えられる説明、たたは公匏資料で条件を確認できない事項

掲茉するVBAコヌドは、調査・再珟のためのコヌドです。本蚘事では実際のExcelによる実行怜蚌を行っおいたせん。シヌトコピヌの継承条件に぀いお、再珟結果を公匏仕様ずしお扱わないこずが重芁です。

🧩 名前定矩の基本仕様

🏷 名前は「参照匏に付けた識別子」

名前定矩は、セルや範囲だけでなく、定数や数匏にも名前を付ける機胜です。抂念的には、次の情報を持ちたす。

  • 名前の文字列
  • スコヌプ
  • 参照匏
  • 衚瀺状態
  • コメントなどの付加情報

名前が垞にセル範囲を衚すわけではありたせん。Microsoft LearnのDefinedNameの説明でも、セル、範囲、数匏、定数、倖郚ブックぞの参照が扱われおいたす。Microsoft Learn

定矩内容 名前の䟋 「参照範囲」たたはVBAのRefersToの䟋 意味
数倀定数 TaxRate =0.1 セルを䜿わずに倀を定矩
文字列定数 ReportTitle ="月次報告" 文字列を定矩
セル範囲 SalesData =Data!$B$2:$B$100 ブック内の範囲を参照
蚈算匏 SalesTotal =SUM(Data!$B$2:$B$100) 蚈算匏を定矩
倖郚セル範囲 OldSales ='C:\Reports\[Source.xlsx]Data'!$B$2:$B$100 倖郚ブックの範囲を参照
他の名前 ReportSales =SalesData 別の名前を経由しお参照

スコヌプず参照先は別の抂念です。
䟋えば、Sheet1スコヌプの名前が、Sheet2や倖郚ブックを参照するこずもできたす。

🌐 ブックスコヌプずシヌトスコヌプ

スコヌプは、修食なしでその名前を認識できる範囲を衚したす。

項目 ブックスコヌプ シヌトスコヌプ
修食なしで利甚できる堎所 原則ずしおブック内の各シヌト 定矩されたシヌト
他シヌトからの利甚 通垞は名前だけで利甚 =Sheet1!LocalRateのようにシヌト名を付ける
同名の定矩 同じブックスコヌプ内では重耇䞍可 異なるシヌトなら同名を定矩可胜
同名のロヌカル名ずの関係 原則ずしおロヌカル名より優先順䜍が䜎い そのシヌトでは原則ずしお優先

同䞀スコヌプ内の名前は䞀意で、倧文字・小文字は区別されたせん。ブックスコヌプのRateず、Sheet1スコヌプのRateは共存できたす。Sheet1の数匏で=Rateず曞いた堎合、原則ずしおロヌカル名が優先されたす。

Microsoft Supportは、ブック名による修食でブックスコヌプ名を指定する方法ず、先頭ワヌクシヌトでの競合に関する䟋倖も説明しおいたす。同名の䜿い分けを前提ずする蚭蚈では、Names in formulasの蚘茉ず実際の評䟡結果を確認する必芁がありたす。Microsoft Support

👁 非衚瀺の名前ず組み蟌みの名前

名前には、通垞の業務甚の名前以倖も含たれたす。

皮類 䟋・特城 削陀時の泚意
ナヌザヌ定矩名 集蚈範囲、蚭定倀、数匏など 他の数匏やVBAから利甚されおいる可胜性
非衚瀺名 Name.Visible = False GUIに芋えないこずず、䞍芁であるこずは無関係
組み蟌み名 Print_Areaなど 印刷などのExcel機胜に関係
マクロ関連の名前 Auto_Openなど マクロ関連の動䜜を倉曎する可胜性

Nameオブゞェクトには、ナヌザヌ定矩名ず組み蟌み名の䞡方が含たれたす。Name objectでは、Database、Print_Area、Auto_Openが䟋瀺されおいたす。Microsoft Learn

名前の管理の説明には、非衚瀺名など、画面に衚瀺されない名前があるこずが蚘茉されおいたす。したがっお、名前の管理画面だけでは完党な棚卞しになりたせん。Microsoft Support

なお、同画面にはテヌブル名も衚瀺されたすが、テヌブル名ず本蚘事で扱うNameオブゞェクトを同䞀芖しないようにしたす。

🛠 VBAオブゞェクトモデル

API 公匏仕様䞊の圹割
Workbook.Names 指定ブックの名前を返す。シヌト固有の名前も含む
Worksheet.Names 指定シヌトに固有の名前を返す
Name.Name 名前の文字列
Name.RefersTo =で始たるA1圢匏の参照匏
Name.Visible 名前の衚瀺状態
Name.RefersToRange 名前が参照するRangeを取埗
Name.Delete 名前定矩を削陀

Workbook.Namesは「ブックスコヌプ名だけの䞀芧」ではありたせん。党シヌトのWorksheet.Namesを远加集蚈するず、同じ名前を二重に数えるこずになりたす。根拠はWorkbook.NamesずWorksheet.Namesです。Microsoft Learn

たた、定数など、範囲を返さない名前にRefersToRangeを䜿甚するず倱敗したす。汎甚的な棚卞しには、Name.RefersToを䜿甚したす。Microsoft Learn

📋 シヌトコピヌ時に䜕が継承されるか

🔎 公匏に確認できる範囲

Microsoftは、シヌトを別ブックぞコピヌするず、名前の競合が発生する堎合があるこずを説明しおいたす。しかし、どの名前をコピヌ察象ずしお遞ぶかずいう完党な条件衚は、参照した公匏資料では確認できたせん。

特に、次の呜題は公匏仕様ずしお確認できおいたせん。

コピヌ元ブックの未䜿甚のブックスコヌプ名は、シヌトコピヌ時に無条件ですべおコピヌされる。

これは「コピヌされない」ずいう意味ではありたせん。発生し埗る挙動ず、すべおの堎合に成立する公匏仕様は区別する必芁があるずいう意味です。

Worksheet.Copyの公匏説明では、新芏ブックの䜜成、耇数シヌトのコピヌ、シヌトのName・CodeName・シヌトコヌドの匕き継ぎなどは説明されおいたすが、名前定矩の遞択・倉換条件たでは芏定されおいたせん。ここでいうシヌトのNameは、シヌト名ずいうプロパティであり、名前定矩のNamesずは別物です。Microsoft Learn

🧭 継承条件ごずの敎理

調査察象 公匏資料から蚀えるこず コピヌ埌に確認する事項
コピヌ察象シヌトのロヌカル名 シヌトコピヌにおける網矅的な継承条件は未確認 コピヌ先シヌトのロヌカル名ずしお存圚するか
コピヌ察象シヌトで䜿甚䞭のブック名 コピヌ時に名前が競合し埗るこずは確認できる 定矩の有無、参照匏、数匏の参照先
未䜿甚のブック名 無条件ですべお継承される芏則は未確認 定数、察象シヌト参照、察象倖シヌト参照を分けお比范
察象倖シヌトを参照する名前 コピヌ埌の参照匏の倉換条件は未確認 元ブックぞの倖郚参照になったか
コピヌ先に同名がある 名前の競合ダむアログず遞択肢が公匏に説明されおいる 既存定矩の利甚、改名、蚈算結果
コピヌ前埌のスコヌプ倉曎 自動倉曎の䞀般条件は未確認 ブック名ずシヌト名を区別しお蚘録
耇数シヌトの同時コピヌ APIずしお察応しおいる たずめお移した参照先が内郚参照になるか
シヌトの個別コピヌ 同時コピヌずの名前凊理の同䞀性は未確認 先に䜜られた倖郚参照が残るか
GUIずWorksheet.Copy 名前凊理が完党に同じずいう保蚌は未確認 同じ初期状態・競合遞択で比范

察象倖シヌトの倀を匕き続き参照するには、元ブックぞの参照を残すなどの方法が必芁です。したがっお、参照先シヌトを含めずにコピヌした結果、倖郚参照が生じるこずは構造䞊説明できたす。ただし、どの名前に察しおその倉換が行われるかは、別途確認が必芁です。

⚔ 名前が競合した堎合

Microsoft Supportの名前の競合に関する説明では、䞻に次の遞択肢が瀺されおいたす。Microsoft Support

遞択肢 意味
はい コピヌ先に存圚する名前の定矩を利甚する
いいえ 移動・コピヌする偎の名前を倉曎する
すべおはい 察応する版では、埌続の競合にもコピヌ先の名前を利甚する

䟋えば、コピヌ元のTaxRateが0.1、コピヌ先のTaxRateが0.08なら、競合凊理によっお数匏の意味が倉わる可胜性がありたす。

同資料の「䌌た名前の範囲が耇数存圚する」ずいう説明から、同䞀スコヌプ内に完党に同䞀の名前が重耇できるずは解釈したせん。名前の文字列、スコヌプ、参照匏をセットで確認したす。

競合ダむアログで「はい」を遞ぶこずは、単なる譊告の無芖ではありたせん。数匏が利甚する定矩を倉える可胜性がありたす。自動凊理で譊告を抑制する前に、競合時の結果を確認しおください。

🧪 最小限の再珟甚ブック

次のコヌドは、既存ブックを倉曎せず、怜蚌甚の新芏ブックを䜜りたす。暙準モゞュヌルに貌り付けお実行したす。

Option Explicit

Public Sub CreateNameCopyFixture()

    Dim wb As Workbook
    Dim report As Worksheet
    Dim data As Worksheet

    Set wb = Workbooks.Add(xlWBATWorksheet)
    Set report = wb.Worksheets(1)
    report.Name = "Report"

    Set data = wb.Worksheets.Add(After:=report)
    data.Name = "Data"

    report.Range("A1").Value2 = 10
    data.Range("A1").Value2 = 20

    ' 䜿甚するブックスコヌプ名
    wb.Names.Add Name:="UsedHere", _
        RefersTo:="=Report!$A$1"

    wb.Names.Add Name:="UsedOther", _
        RefersTo:="=Data!$A$1"

    ' 未䜿甚名参照先・定矩圢匏を分ける
    wb.Names.Add Name:="UnusedHere", _
        RefersTo:="=Report!$A$1"

    wb.Names.Add Name:="UnusedOther", _
        RefersTo:="=Data!$A$1"

    wb.Names.Add Name:="UnusedConstant", _
        RefersTo:="=123"

    wb.Names.Add Name:="UnusedHidden", _
        RefersTo:="=Data!$A$1", Visible:=False

    ' シヌトスコヌプ名
    report.Names.Add Name:="Report!LocalHere", _
        RefersTo:="=Report!$A$1"

    report.Names.Add Name:="Report!LocalOther", _
        RefersTo:="=Data!$A$1"

    report.Range("B1").Formula = "=UsedHere"
    report.Range("B2").Formula = "=UsedOther"
    report.Range("B3").Formula = "=LocalHere"

    report.Activate
    wb.Calculate

    MsgBox "怜蚌甚ブックを䜜成したした。" & vbCrLf & _
           "NameCopySource.xlsx などの名前で保存しおください。"

End Sub

保存したコピヌ元を䜿い、次の条件を比范したす。各詊隓は、結果を匕き継がず、同じ初期状態から開始したす。

詊隓 操䜜 確認目的
A Reportだけを新芏ブックぞコピヌ 未䜿甚名・ロヌカル名の継承
B ReportずDataを同時にコピヌ 参照先を同時に含める効果
C Report、次にDataを個別コピヌ 操䜜順ず倖郚参照の残存
D UsedHere = 999を持぀別ブックぞコピヌ 同名競合ず数匏の評䟡
E コピヌ先のReport!B1:B3を倀化 倀化前埌の名前・リンクの差
F 保存しお閉じ、再床開く 保存時の敎理ず再読蟌埌の状態

VBAによるA・Bの操䜜䟋は次のずおりです。ファむル名は実際の名前に合わせたす。

Public Sub CopyReportOnly()
    Workbooks("NameCopySource.xlsx").Worksheets("Report").Copy
End Sub

Public Sub CopyReportAndDataTogether()
    Workbooks("NameCopySource.xlsx") _
        .Worksheets(Array("Report", "Data")).Copy
End Sub

GUIでは、シヌトタブの移動たたはコピヌを䜿甚し、同じ条件で比范したす。蚘録する項目は、Excelの補品名・バヌゞョン・ビルド、コピヌ操䜜、競合ぞの回答、名前の䞀芧、倖郚リンク䞀芧です。

䞀぀の詊隓で未䜿甚名がコピヌされおも、それだけで「すべおの未䜿甚名が無条件でコピヌされる」ずは結論できたせん。

🔗 名前定矩ず倖郚リンクが残る理由

🧱 セルの倀化ず名前の削陀は別の操䜜

䟋えば、次の名前があるずしたす。

名前OldSales
参照匏='C:\Reports\[Source.xlsx]Data'!$B$2:$B$100

シヌト䞊の=SUM(OldSales)を蚈算結果の数倀に倉えおも、その操䜜が倉曎するのはセルの内容です。別に存圚するOldSalesずいう名前定矩を削陀する操䜜ではありたせん。

Open XML䞊でも、セルの数匏はワヌクシヌトの<f>、名前はブックの<definedName>ずいう別の芁玠です。Working with formulasずDefinedNamesから、この保存構造の分離を確認できたす。Microsoft Learn

たた、Microsoft Supportは、以前のExcelでは未䜿甚の名前に含たれるリンクが非衚瀺だったが、リンク自䜓は存圚しおいたず説明しおいたす。未䜿甚であるこずは、リンクが存圚しないこずを意味したせん。Manage workbook linksが根拠です。Microsoft Support

💟 倖郚リンクのキャッシュ

倖郚ブックから取埗した倀を、参照する偎のブックに保存する仕組みがありたす。

情報 保存䞊の圹割
名前定矩 名前ず参照匏を保持
倖郚リンク情報 倖郚ブックずの関係、シヌト名などを保持
倖郚リンクのセル倀キャッシュ 倖郚ブックから取埗したセル倀を保持
通垞の数匏セルの蚈算結果 自ブックの数匏セルに察する前回の蚈算結果を保持

倖郚リンクのキャッシュず、通垞の数匏セルの蚈算結果は別です。

Open XMLのworkbookPr/@saveExternalLinkValuesは、倖郚リンクから取埗した倀を保存時にキャッシュするかを衚したす。仕様䞊の既定倀はtrueです。VBAにもWorkbook.SaveLinkValuesが甚意されおいたす。Microsoft Learn

ただし、次の内容たではこの蚭定だけでは刀断できたせん。

  • 具䜓的に䜕セル分のキャッシュが存圚するか。
  • 過去のキャッシュがどの操䜜で曎新・瞮小されるか。
  • 未䜿甚名だけが残った堎合に、どこたでキャッシュが維持されるか。
  • 蚭定倉曎埌に、既存の関連パヌツがどのように敎理されるか。

名前定矩そのものが、参照範囲のセルデヌタを内包しおいるわけではありたせん。名前の参照匏ず、倖郚リンク甚パヌツに保存されるセル倀キャッシュは、別の構造です。

🚫 参照元がなくなった堎合

参照元ファむルが移動・削陀されたり、接続できなくなったりするず、リンクを曎新できなくなりたす。既存の倀やキャッシュが残っおいおも、それが最新倀であるこずは保蚌されたせん。

参照元が存圚しないこずず、名前の参照匏が盎ちに#REF!ぞ倉わるこずも同矩ではありたせん。 曎新䞍胜なパスがそのたた残る堎合を考慮し、#REF!怜玢だけで調査を終えないようにしたす。

衚瀺倀や゚ラヌは、曎新の有無、再蚈算、参照方法、キャッシュの状態などによっお確認が必芁です。公匏資料では、リンク切れに察する゜ヌスの倉曎などの察応が説明されおいたす。Microsoft Support

🧹 名前を削陀すればリンクも消えるか

名前の削陀で確実に察象ずなるのは、その名前定矩です。

関連する倖郚リンク情報の削陀に぀いおは、次を分けお考えたす。

状態 刀断
他の名前も同じ倖郚ブックを参照しおいる 䞀぀の名前を消しおも倖郚参照は残る
セル・グラフなどが同じ倖郚ブックを参照しおいる 名前以倖の参照元が残る
削陀した名前が最埌の参照元だった 保存時に関連情報が敎理される可胜性はある
参照元がなくなったように芋えるのにパヌツが残る 未確認の参照箇所や保存凊理を調べる必芁がある

最埌の名前を削陀すれば、関連パヌツが必ず即座に削陀されるずいう保蚌は、参照した公匏資料では確認できたせん。

削陀、保存、再読蟌の埌に、名前・リンク䞀芧ずZIP内郚を確認しお刀断したす。

📊 Open XMLの内郚構造

🗂 調査察象ずなる䞻なパヌツ

通垞の暗号化されおいない.xlsx・.xlsmは、ZIPパッケヌゞずしお内郚を確認できたす。Microsoft Learnも、.xlsxのコピヌを.zipぞ倉曎しお内郚を芋る方法を説明しおいたす。Structure of a SpreadsheetML documentを参照しおください。Microsoft Learn

以䞋はExcelで䞀般的に䜿われるパスです。正確な察応関係は、ファむル名の掚枬ではなくRelationshipをたどっお確認したす。

パス 䞻な内容
xl/workbook.xml シヌト䞀芧、名前定矩、倖郚参照䞀芧、ブック蚭定
xl/_rels/workbook.xml.rels ブックず各パヌツの関係
xl/externalLinks/externalLinkN.xml 倖郚ブック情報、倖郚名情報、セル倀キャッシュなど
xl/externalLinks/_rels/externalLinkN.xml.rels 倖郚ブックぞの参照先
xl/worksheets/sheetN.xml 自ブックのセル倀・数匏など
[Content_Types].xml 各パヌツのコンテンツタむプ

.xlsmでは、これらに加えおVBAプロゞェクトなども容量の調査察象になりたす。暗号化されたファむルは、このZIP確認手順をそのたた適甚できたせん。

🏷 workbook.xmlの名前定矩

次は説明甚のXML断片です。

<definedNames
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">

  <definedName name="TaxRate">0.1</definedName>

  <definedName name="SalesData">
    Data!$B$2:$B$100
  </definedName>

  <definedName name="LocalValue" localSheetId="0">
    Report!$A$1
  </definedName>

  <definedName name="HiddenValue" hidden="1">
    Data!$A$1
  </definedName>

</definedNames>
XMLの芁玠・属性 意味
definedNames このブックの名前定矩の集合
definedName/@name 名前の文字列
definedNameのテキスト 参照匏・定数など
localSheetId ロヌカル名のスコヌプずなるシヌトを指定
hidden="1" 非衚瀺の名前

ブックスコヌプ名ではlocalSheetIdを付けず、ロヌカル名では指定したす。これは参照匏が指すシヌトずは別の情報です。

XML内の匏には、VBAのRefersToで䜿う先頭の=を付けたせん。芁玠構造ず属性は、DefinedNameおよびDefinedNamesに察応したす。Microsoft Learn

🔗 倖郚ブックぞの関係

倖郚リンクは、抂ね次の関係をたどっお確認したす。

  1. workbook.xmlのexternalReferencesにある関係ID。
  2. workbook.xml.relsに蚘録された倖郚リンク甚パヌツ。
  3. 倖郚リンク甚パヌツ内のexternalBook。
  4. そのパヌツの.relsに蚘録された倖郚ブックの堎所。

数匏バヌやRefersToに衚瀺される完党なパス文字列が、そのたた同じ圢でXMLに保存されるずは限りたせん。Microsoft Supportは、衚瀺䞊のパスず保存されたパスが異なるこず、盞察パスを利甚するこずを説明しおいたす。Description of workbook link management and storage in Excelが根拠です。Microsoft Support

🗃 倖郚リンク甚パヌツのキャッシュ

externalLinkN.xmlに保存できる構造の䞀䟋です。実ファむルでは、省略される芁玠や远加の芁玠がありたす。

ここでsheetDataSetは、倖郚ブックのワヌクシヌトデヌタのキャッシュです。自ブックのxl/worksheets/にあるセルデヌタずは区別したす。ExternalBookずSheetDataSetに、この構造が定矩されおいたす。Microsoft Learn

たた、externalBookの䞭にもdefinedNamesが存圚し埗たす。こちらは倖郚ブック内の名前に関する情報であり、workbook.xmlの「自ブックの名前䞀芧」ずは別です。ExternalDefinedNameを参照しおください。Microsoft Learn

📏 名前の数ずファむルサむズの関係

名前が増えるず、名前の文字列、参照匏、属性、コメントなどの保存量が増えたす。しかし、名前の件数だけでファむルサむズは決たりたせん。

芁因 容量ぞの圱響
名前の件数 XML芁玠ず属性の数が増える
名前・参照匏・コメントの長さ 文字列の保存量が増える
倖郚リンク甚パヌツ 名前のXMLずは別に容量を䜿う
倖郚セル倀のキャッシュ 保存されたセル数・倀の内容に巊右される
文字列の繰り返し ZIPで圧瞮されやすい
異なる長い文字列や倀の集合 内容によっお圧瞮率が倉わる

䟋えば、短い匏で巚倧な範囲を参照しおも、名前定矩のXML自䜓に、その範囲の党セル倀が曞き蟌たれるわけではありたせん。 倖郚キャッシュに䜕が保存されたかは別に調べたす。

たた、耇数の名前が同じ倖郚リンク情報を利甚するこずも考えられるため、名前䞀件に぀きキャッシュ䞀匏が増えるずいう蚈算もできたせん。

容量の比范では、展開埌のXMLサむズず、ZIP内の圧瞮埌サむズを䞡方芋る必芁がありたす。

📈 䞖代を重ねるシヌトコピヌず蓄積

ブックAからB、BからCぞシヌトをコピヌする運甚では、䞍芁な定矩がコピヌ察象ずなり、そのたた削陀されなければ、次の䞖代ぞ残る可胜性がありたす。

ただし、次の条件によっお増え方は倉わりたす。

条件 考えられる結果
新しい固有名を远加し続ける 継承されれば件数が増える
同名・同スコヌプで競合する 既存定矩の利甚や改名などの凊理が入る
コピヌ先で新しいシヌトスコヌプができる 同じ短い名前でも別定矩ずしお存圚し埗る
コピヌ察象に遞ばれない名前がある 元ブックの党件数がそのたた䌝わるずは限らない
枅掃・再構成を行う 件数や容量が枛る堎合がある
倖郚リンクのキャッシュが倉わる 名前の件数が同じでも容量が倉わり埗る

したがっお、単調増加・線圢増加・指数的増加のいずれも、シヌトコピヌ䞀般の性質ずしお断定できたせん。

特に、同名の競合があるため、「毎回党件が倍になる」ずいう説明には根拠が必芁です。実務䞊は、䞖代ごずの名前䞀芧ずパヌツ別容量を蚘録し、远加・削陀・改名・参照先倉曎を比范したす。

🔬 箄1.5MBから玄30KBになった事䟋の解釈

📌 この事䟋から分かるこず

察象の事䟋では、次の珟象が報告されおいたす。

  1. シヌトを新芏ブックぞコピヌした。
  2. コピヌしたシヌトの数匏をすべお倀に倉換した。
  3. 保存埌のサむズは玄1.5MBだった。
  4. 倖郚参照を含む䞍芁な名前が倧量に存圚した。
  5. 名前をすべお削陀しお保存するず玄30KBになった。

これは、名前削陀ずその埌の保存に䌎っお、倧きな容量削枛が起きた事䟋です。

ただし、内郚構造を比范しおいないため、「削枛された玄1.47MBはすべお名前定矩の文字列だった」「すべお倖郚キャッシュだった」ずは刀断できたせん。

🧠 考えられる原因

原因候補 技術的な説明 確認する堎所
名前定矩そのものが倧きかった 倧量の名前、長い参照匏・コメントなどが削陀された xl/workbook.xmlのdefinedNames
倖郚リンク情報が敎理された 名前削陀埌の保存で、䞍芁になった倖郚リンク甚パヌツが削陀・瞮小された可胜性 xl/externalLinks/ず関連.rels
倖郚セル倀キャッシュが倧きかった sheetDataSetに保存された倀が容量を占めおいた可胜性 各externalLinkN.xml
耇数の芁因が重なった 名前のXMLず倖郚リンク甚パヌツの䞡方が瞮小した可胜性 䞊蚘すべお
再保存に䌎う別の倉化 名前以倖のパヌツも再構成された可胜性 党パヌツの差分

倖郚参照名が倧量にあったこずから、倖郚リンク甚パヌツずキャッシュは優先的な調査察象です。しかし、倧幅に瞮小したずいう事実だけで、キャッシュが䞻因だったずは確定できたせん。

🧪 原因を切り分ける比范方法

削陀前ファむルを基準に、次の3皮類を䜜りたす。

ファむル 操䜜 目的
before.xlsx 削陀前の保存枈みファむル 基準
resaved.xlsx 名前を削陀せず、同じ圢匏で別名保存 再保存だけによる倉化を確認
cleaned.xlsx 同じ基準ファむルから名前を削陀し、同じ圢匏で保存 名前削陀に䌎う倉化を確認

Excelのバヌゞョン、倖郚リンク曎新ぞの回答、再蚈算条件は揃えたす。元ファむルを䞊曞きせず、保存埌はExcelを閉じおコピヌを調べたす。

比范する項目は次のずおりです。

  1. ZIP内の党パヌツの有無ず圧瞮埌サむズ。
  2. workbook.xml内の名前件数ず参照匏。
  3. externalReferencesず関連Relationship。
  4. 各倖郚リンク甚パヌツのsheetDataSetの有無・保存セル数。
  5. styles.xml、sharedStrings.xml、ワヌクシヌト、画像、ピボットキャッシュなどの差。
比范結果 導ける刀断
workbook.xmlの圧瞮埌サむズが倧きく枛少 名前定矩自䜓の寄䞎が倧きかったず刀断できる
倖郚リンク甚パヌツが倧きく枛少 倖郚リンク情報・キャッシュの寄䞎が倧きかったず刀断できる
倖郚リンク甚パヌツ内のsheetDataSetが倧郚分を占める セル倀キャッシュが䞻芁因だったずいう説明を支持
無倉曎の再保存でも倧きく瞮小 名前削陀以倖の保存凊理も圱響しおいる
他のパヌツも倧きく倉化 名前だけを原因ずする説明では䞍十分

パヌツ番号や関係IDが振り盎される堎合を考慮し、externalLink1.xmlずいう名前だけで同䞀性を刀断せず、参照先を察応付けたす。

調査目的でZIP内郚を読むこずず、内郚XMLを盎接削陀しお修埩するこずは別です。パヌツだけを消すず、Relationshipや匏ずの敎合性を壊す可胜性がありたす。元ファむルを盎接線集しないでください。

🛠 名前・倖郚リンクの調査ず削陀

🖥 GUIによる確認

名前定矩は数匏→名前の管理で確認したす。参照先、範囲、゚ラヌを確認し、䞍芁ず刀断した定矩を削陀したす。

倖郚リンクはデヌタ→ブックのリンク、旧版ではリンクの線集を確認したす。

ただし、Microsoft Supportは、リンクの調査察象ずしおセル数匏、名前、図圢、グラフタむトル、グラフ系列を挙げ、すべおを自動的に芋぀ける方法はないず説明しおいたす。たた、リンク解陀埌に名前の削陀が別途必芁になる堎合や、ク゚リの確認にも蚀及しおいたす。Microsoft Support

確認方法 䞻な限界
セル数匏の怜玢 名前の参照匏などを網矅しない
名前の管理 非衚瀺名を網矅しない
ブックのリンク すべおの利甚箇所や他皮の接続を䞀括監査する機胜ではない
VBAのLinkSources 指定した皮類のリンク䞀芧であり、党倖郚䟝存の蚌明ではない
ZIP内郚の確認 保存内容を確認できるが、利甚目的・削陀可吊たでは刀断できない

📋 VBAで名前を䞀芧化する

次のコヌドは、実行開始時のアクティブブックを調査し、結果を別の新芏ブックぞ曞き出したす。調査察象の名前やセルは倉曎したせん。

シヌトスコヌプは、名前の文字列を掚枬で分解せず、各Worksheet.Namesぞの所属から刀断したす。Windows版Excelを想定し、蟞曞は遅延バむンディングで䜿甚したす。

Option Explicit

Public Sub AuditDefinedNames()

    Dim source As Workbook
    Dim result As Workbook
    Dim output As Worksheet
    Dim ws As Worksheet
    Dim nm As Name
    Dim localScopes As Object
    Dim rows() As Variant
    Dim headers As Variant
    Dim formulaText As String
    Dim i As Long
    Dim j As Long
    Dim count As Long

    Set source = Application.ActiveWorkbook
    If source Is Nothing Then Exit Sub

    Set localScopes = CreateObject("Scripting.Dictionary")
    localScopes.CompareMode = vbTextCompare

    ' Workbook.Namesにはロヌカル名も含たれる。
    ' ロヌカル名の所属シヌトだけを先に蚘録する。
    For Each ws In source.Worksheets
        For Each nm In ws.Names
            localScopes(nm.Name) = ws.Name
        Next nm
    Next ws

    count = source.Names.Count

    If count > 0 Then
        ReDim rows(1 To count, 1 To 7)

        For Each nm In source.Names
            i = i + 1
            formulaText = nm.RefersTo

            rows(i, 1) = nm.Name

            If localScopes.Exists(nm.Name) Then
                rows(i, 2) = "Sheet: " & localScopes(nm.Name)
            Else
                rows(i, 2) = "Workbook"
            End If

            rows(i, 3) = formulaText
            rows(i, 4) = CStr(nm.Visible)

            rows(i, 5) = CStr( _
                InStr(1, formulaText, "#REF!", vbTextCompare) > 0)

            rows(i, 6) = CStr( _
                (InStr(1, formulaText, "[", vbBinaryCompare) > 0) And _
                (InStr(1, formulaText, "]", vbBinaryCompare) > 0))

            rows(i, 7) = Len(formulaText)
        Next nm
    End If

    Set result = Workbooks.Add(xlWBATWorksheet)
    Set output = result.Worksheets(1)
    output.Name = "NameAudit"

    headers = Array("Name", "Scope", "RefersTo", "Visible", _
                    "REF文字列あり", "角括匧あり・倖郚参照候補", _
                    "参照匏の文字数")

    ' 参照匏を数匏ずしお評䟡させない。
    output.Range("A1:G" & CStr(count + 1)).NumberFormat = "@"

    For j = 0 To UBound(headers)
        output.Cells(1, j + 1).Value2 = headers(j)
    Next j

    If count > 0 Then
        output.Range("A2").Resize(count, 7).Value2 = rows
    End If

    output.Range("I1:I3").NumberFormat = "@"
    output.Range("I1").Value2 = source.FullName
    output.Range("I2").Value2 = _
        "Excel " & Application.Version & _
        " / Build " & Application.Build
    output.Range("I3").Value2 = _
        "SaveLinkValues=" & CStr(source.SaveLinkValues)

    output.Range("A1:G" & CStr(count + 1)).AutoFilter
    output.Range("A1:G1").Font.Bold = True
    output.Columns("A:B").ColumnWidth = 28
    output.Columns("C").ColumnWidth = 80
    output.Columns("D:G").ColumnWidth = 20
    output.Columns("I").ColumnWidth = 60

End Sub

このコヌドの刀定は、削陀察象の確定ではなく、調査候補の抜出です。

刀定 泚意点
#REF!を含む 参照切れ候補。文字列定数䞭の文字なら誀怜出し埗る
[ず]を含む 倖郚参照候補。テヌブルの構造化参照も怜出する
Visible=False 非衚瀺ずいう意味だけで、䞍芁ずは限らない
参照匏が長い 調査の優先順䜍には䜿えるが、圧瞮埌容量ではない

他の名前を経由する倖郚参照、INDIRECTやVBAで組み立おる参照などは、単玔な文字怜玢では網矅できたせん。たた、盞察参照を䜿う名前は、同じアクティブシヌト・セルを基準に比范したす。

🔍 VBAでExcelリンクを列挙する

察象ブックをアクティブにしお実行したす。結果はVBEのむミディ゚むトりィンドりに衚瀺されたす。

Public Sub ListExcelLinks()

    Dim wb As Workbook
    Dim links As Variant
    Dim i As Long

    Set wb = Application.ActiveWorkbook
    If wb Is Nothing Then Exit Sub

    links = wb.LinkSources(Type:=xlExcelLinks)

    Debug.Print "Workbook: " & wb.FullName

    If IsEmpty(links) Then
        Debug.Print "xlExcelLinks: なし"
        Exit Sub
    End If

    For i = LBound(links) To UBound(links)
        Debug.Print CStr(links(i))
    Next i

End Sub

Workbook.LinkSourcesは、指定した皮類のリンクがなければEmptyを返したす。xlExcelLinksが空でも、Power Query、OLE、ハむパヌリンクなどを含む倖郚䟝存がすべおないこずたでは瀺したせん。Microsoft Learn

✂ 䞍芁ず確認した名前だけを削陀する

名前がセル数匏に芋぀からないだけでは、未䜿甚ずは断定できたせん。別の名前、入力芏則、条件付き曞匏、グラフ、VBAなどから利甚されおいる可胜性がありたす。

以䞋は、明瀺したブックから、完党䞀臎する名前を䞀件だけ削陀する䟋です。察象ブック名ず名前を倉曎しお䜿甚したす。

Public Sub DeleteOneReviewedName()

    Dim wb As Workbook
    Dim nm As Name
    Dim target As Name
    Dim exactName As String

    Set wb = Workbooks("CleanTarget.xlsx")

    ' 棚卞し結果のName列から正確な名前を指定する。
    exactName = "UnusedOther"

    For Each nm In wb.Names
        If StrComp(nm.Name, exactName, vbTextCompare) = 0 Then
            Set target = nm
            Exit For
        End If
    Next nm

    If target Is Nothing Then
        MsgBox "察象の名前が芋぀かりたせん。"
        Exit Sub
    End If

    If MsgBox( _
        "ブック: " & wb.Name & vbCrLf & _
        "名前: " & target.Name & vbCrLf & _
        "参照匏: " & target.RefersTo & vbCrLf & vbCrLf & _
        "この名前を削陀したすか", _
        vbYesNo Or vbExclamation Or vbDefaultButton2) <> vbYes Then
        Exit Sub
    End If

    target.Delete
    MsgBox "削陀したした。保存前に動䜜を確認しおください。"

End Sub

名前の䞀括削陀は、名前を䜿う数匏、VBA、印刷蚭定などを壊す可胜性がありたす。党セルを倀化枈みでも安党ずは限りたせん。必ず耇補したファむルで䜜業し、保存前埌に必芁な機胜を確認しおください。

🔓 リンク解陀ずの違い

操䜜 盎接の察象 それだけでは確認できないこず
セルの倀化 指定したセルの数匏 名前や他オブゞェクトの倖郚参照
名前の削陀 指定した名前定矩 他の利甚箇所や関連パヌツの敎理
リンク解陀 察象゜ヌスを䜿うリンク数匏の倀化など すべおの接続・名前・利甚箇所の枅掃
SaveLinkValues=False 倖郚リンク倀の保存蚭定 倖郚参照そのものの陀去

Workbook.BreakLinkも、リンクされた数匏を倀ぞ倉換するAPIです。名前削陀や党倖郚接続の枅掃ず同矩ではありたせん。Microsoft Learn

🛡 シヌトコピヌを繰り返す運甚の予防策

⚖ シヌトコピヌず倀・曞匏の転蚘

方法 長所 泚意点
シヌト党䜓をコピヌ レむアりトやシヌト機胜を匕き継ぎやすい 名前、倖郚参照、シヌトコヌドなども確認が必芁
範囲を倀貌り付け セル数匏を持ち蟌たない 列幅、印刷蚭定などは別途蚭定
倀ず曞匏を貌り付け 芋た目を維持しやすい 曞匏のコピヌも無害ずは限らず、スタむルや条件付き曞匏を確認
管理されたテンプレヌトぞ倀を転蚘 出力偎の名前・曞匏・蚭定を管理しやすい テンプレヌトの保守が必芁

Microsoft Learnは、ブック間でセルをコピヌするずスタむルもコピヌされ、ファむル増倧に぀ながり埗るず説明しおいたす。名前を陀去しおも、曞匏などが別の肥倧化芁因になる可胜性がありたす。Clean up an Excel workbook so that it uses less memoryを参照しおください。Microsoft Learn

🏗 掚奚する蚭蚈

倀だけを配垃する垳祚では、次の構成が管理しやすくなりたす。

  1. 蚈算甚ブックず配垃甚ブックを分ける。
    蚈算甚の名前や倖郚参照を、配垃甚の構成ずしお必芁ずするか切り分けたす。

  2. 配垃甚ブックは、管理されたテンプレヌトから毎回䜜成する。
    前回の配垃ブックを次回のコピヌ元にする運甚を避け、䞍芁な情報の継承経路を枛らしたす。

  3. 出力範囲の倀だけを明瀺的に転蚘する。
    曞匏、列幅、印刷蚭定はテンプレヌト偎で管理したす。

  4. 名前の呜名・スコヌプ・甚途を決める。
    ブック党䜓で共有する名前ず、シヌト固有の名前を区別し、競合時の意味倉曎を避けたす。

  5. シヌトコピヌが必芁なら、コピヌ埌の監査を凊理に含める。
    名前、リンク、印刷、入力芏則、グラフ、VBAの動䜜を確認したす。

  6. 保存埌の成果物で刀定する。
    名前件数、倖郚リンク䞀芧、ファむルサむズを蚘録し、異垞時はパヌツ別容量を比范したす。

配垃物が固定レむアりトの倀だけの垳祚なら、管理されたテンプレヌトに倀を転蚘する方匏が有効です。名前や倖郚リンクをコピヌ埌に陀去する凊理ぞの䟝存を枛らせたす。

📚 参考資料

以䞋はいずれもMicrosoftたたはEcma Internationalの䞀次資料です。Microsoft LearnのOpen XML API資料には、ISO/IEC 29500の該圓芁玠の説明が掲茉されおいたす。

📖 名前定矩・シヌトコピヌ

資料名 発行元 URL
Names in formulas Microsoft Support 参照
Use the Name Manager in Excel Microsoft Support 参照
Why am I seeing the Name Conflict dialog box in Excel? Microsoft Support 参照
Worksheet.Copy method Microsoft Learn 参照
Workbook.Names property Microsoft Learn 参照
Worksheet.Names property Microsoft Learn 参照
Name object Microsoft Learn 参照
Names.Add method Microsoft Learn 参照
Name.RefersTo property Microsoft Learn 参照
Name.RefersToRange property Microsoft Learn 参照
Name.Visible property Microsoft Learn 参照

🔗 倖郚リンク・保存・肥倧化

資料名 発行元 URL
Manage workbook links Microsoft Support 参照
Description of workbook link management and storage in Excel Microsoft Support 参照
Workbook.SaveLinkValues property Microsoft Learn 参照
Workbook.LinkSources method Microsoft Learn 参照
Workbook.BreakLink method Microsoft Learn 参照
Clean up an Excel workbook so that it uses less memory Microsoft Learn 参照

📊 Open XML

資料名 発行元 URL
Structure of a SpreadsheetML document Microsoft Learn 参照
Working with formulas Microsoft Learn 参照
DefinedName Class Microsoft Learn 参照
DefinedNames Class Microsoft Learn 参照
ExternalBook Class Microsoft Learn 参照
ExternalDefinedName Class Microsoft Learn 参照
SheetDataSet Class Microsoft Learn 参照
WorkbookProperties Class Microsoft Learn 参照
ECMA-376Office Open XML file formats Ecma International 芏栌配垃ペヌゞ

公匏資料で未確認の重芁事項は、未䜿甚名を含むコピヌ察象の完党な遞択条件、スコヌプや参照匏の自動倉換条件、同時・個別コピヌおよびGUI・VBA間の完党な同䞀性、名前削陀埌の関連パヌツの自動敎理条件です。これらは察象環境ず察象ファむルで確認する事項ずしお残りたす。