雑・Excel入門試論 - 脱VLOOKUPの思考 01 - ブック - 仕様と制限

# はじめに

　入門とは、外とは異なる世界へ踏み入れることです。知識なき者や志なき者を導くことではありません。そこでの学びは教わることではなく、問いかけることです。ここで語られるのは、答えではありません。80/20の法則とは、「80%のユーザーが20%の機能しか使っていない」というものです。しかし、マイクロソフト・エクセルでは、「95/5法則」の法則が当てはまります。95%のユーザーが5%の機能しか使っていないのです。数式や関数、そしてVBAを魔術師のように操る人を目指すのではなく、エクセルの機能を幅広く理解することで、誰でも維持、修正、拡張しやすい、解決の道筋は全員の目の前に開けてくるはずです。

# Excelブックファイルの構造
　まずは、エクセルのオブジェクトモデルの説明から始める。

　エクセルは、Application、Workbook、Worksheet、Rangeの４つのオブジェクトがある。

　Applicatioオブジェクトは、アプリケーション全体を表し、WorkbookオブジェクトはWorksheetオブジェクトのコレクションが含まれる。セルを表す主要な概念はRangeオブジェクトになり、これによりここのセルやセルのグループを使用できるようになる。

　Excelブックは、Open XMLファイル形式のSpreadsheetMLスキーマで記述されています。
 Open XMLフォーマットは、Microsoftが策定したXMLをベースとしたファイル形式で、2006年に[ECMA-376](https://www.ecma-international.org/publications-and-standards/standards/ecma-376/)として標準化され、Office 2007 以降で採用されました。エクセルの場合、拡張子 xslx で保存されます。XML形式のファイルを圧縮して1つのファイルにしています。
　Excelブックの拡張子「xlsx」を「zip」に変更して内容を調べると、以下のような構造が現れます。（実際の配置とは違います）
![text125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/880f1004-6dff-8019-02b8-8474da9c0d5e.png)

 VBAは、ブック、ワークシート、標準モジュールの各レベルで記述ができますが、全てvbaProject.binの中に[Compound File Binary Format(CFBF)](https://en.wikipedia.org/wiki/Compound_File_Binary_Format)で保存されています。エクセルファイルの拡張子は、必ずマクロが保存可能なファイル（.xlsm マクロ有効ブック、.xltm マクロ有効テンプレート、.xlsb バイナリブック）で保存する必要があります。.xlsxで保存した場合、マクロはファイルの中に保存されません。また、他人が作成したマクロの実行には制限が課せられます。

# Open XMLの利点
- 構成ファイルはXML形式で記述され、Zip圧縮されているため、コンパクトになります。
- モジュール形式でファイルを分離させているため、一部が破損していても開くことができる可能性があります。
- Open XMLを使用している他のオフィス製品との相互運用ができます。

# ワークシートとブックの仕様と制限

https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3

　エクセルも1つのアプリケーションであり、全てを処理できるわけではありません。設定された制限内で最も望ましい処理を行うことを目指しています。以下のような制限があるということを認識しておくことは大切です。

|機能|最大数|
|--|--|
ワークシートの行数と列数|1,048,576行 16,384列(XFD)
列の幅|255文字
行の高さ|409ポイント
改ページ|1,026
セルが含むことができる合計文字数|32,767文字
ヘッダーとフッターの文字数|255
1つのセル内での最大改行数|253
有効桁数|15桁
数式の長さ|8,192文字
選択範囲|2,048
1つの関数に指定できる引数|255
関数に設定できるネストレベル|64
ユーザー定義関数の項目|255
使用可能なワークシート関数|341
計算で使用できる最も古い日付|1900 年 1 月 1 日 (1904 年日付システムの場合は 1904 年 1 月 1 日)
計算で使用できる最も新しい日付|9999 年 12 月 31 日
入力可能な最大時間|9999:59:59

1 つ以上の Excel テーブルが含まれているブックでは、[複数のユーザーによる同時編集を行う] 設定を有効にすることはできません。

# エクセルファイルの種類
　エクセルファイルは、以下の種類があります。

|種類|拡張子|
--|--
ブック|.xlsx
マクロを有効にしたブック|.xlsm
テンプレート|.xltx
マクロを有効にしたテンプレート|.xltm
XML形式でないバイナリブック|.xlsb
マクロを有効にしたアドイン|.xlam

　VBA(Visual Basic for Applications)マクロは、1994年 Office for Windows 1.5 (Excel 5.0)の時代から搭載されています。現在は VBA 7.1 となっていますが、互換性を維持するためにセキュリティ問題の対応がされていません。そのため、VBAマクロを含むブックは拡張子を変えて明示しなければならず、開く場合も制限が付与されます。
　今後、VBAマクロに対しての根本的なセキュリティ強化は予定されていないと思われます。万一そのようなバージョンアップが行われた場合は従来のマクロの改修が必要になると思われます。VBAは限定的な利用に留め、新たなVBAマクロを業務で使用するのはおすすめできない理由です。

# コンテンツ

- [雑・Excel入門試論 - 脱VLOOKUPの思考 01 - ブック - 仕様と制限](https://qiita.com/spumoni/items/189004c01181c50a4821)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 02 - ブック - オプション](https://qiita.com/spumoni/items/75955db69cc34695de14)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 03 - ワークシート](https://qiita.com/spumoni/items/5408cae114034be528c4)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 04 - セル - 文字列型](https://qiita.com/spumoni/items/4ab1d7067418886c0582)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 05 - セル - 数値データ](https://qiita.com/spumoni/items/970b4b39a5a2185992ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 06 - セル - 日時データ](https://qiita.com/spumoni/items/9f270e181fbc45503759)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 07 -  リンクされたデータ型](https://qiita.com/spumoni/items/ed59d15753d992c3a630)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 08 - セル - 計算式・関数](https://qiita.com/spumoni/items/ae339c97627110e2134e)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 09 -  セル - 数値の書式設定](https://qiita.com/spumoni/items/1b3134d4b0284465976f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 10 - セル - 日付と時刻の書式設定](https://qiita.com/spumoni/items/6eb602f69956a5e1502f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 11 - セル - 条件付き書式](https://qiita.com/spumoni/items/04bd8e24284daef6f27a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 12 - テーブル - テーブルの作成と入力規則](https://qiita.com/spumoni/items/f23beca01c5093c81c47)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 13 - テーブル - ソートとスライサー](https://qiita.com/spumoni/items/b66027008c2f9edb853f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 14 - テーブル - 動的配列関数](https://qiita.com/spumoni/items/cc03e898f02b8c3017f7)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 15 - Power Query - エクセルのデータを読み込む](https://qiita.com/spumoni/items/fc38a4ae595b64af87f5)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 16 - Power Query - 変換](https://qiita.com/spumoni/items/100e0e3c6a5a59b03229)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 17 - Power Query - テーブルの結合](https://qiita.com/spumoni/items/debb9ea9b8692ca8fc8c)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 18 パワーピボット - データモデル](https://qiita.com/spumoni/items/08458978e86dc59f18ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 19 パワーピボット - 操作](https://qiita.com/spumoni/items/e7b3f245e87622e9bc79)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 20 パワーピボット - 日付テーブル](https://qiita.com/spumoni/items/340e0fcbc9cd10198112)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 21 DAX - コンテキストとイテレーター](https://qiita.com/spumoni/items/cddc7fa16341e20bafb8)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 22 DAX - CALCULATE](https://qiita.com/spumoni/items/e2218fece1ec01e177b0)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 23 DAX - タイムインテリジェンス](https://qiita.com/spumoni/items/6d8aeb9f80ecafb69c5a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 24 - ダッシュボード - ピボットグラフ（Pivot Chart）](https://qiita.com/spumoni/items/ffb0d57a6272c2e5ad37)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 25 - ダッシュボードの作成](https://qiita.com/spumoni/items/5e57ad587a343857e543)