カテゴリー: Workbooks

Excel VBA の Workbooksオブジェクトについて調べた内容を紹介しています サンプルもあるので、使い方を知りたい人は、参考にして頂けると嬉しいです

  • Workbook について

    Workbook について

    Workbooksオブジェクトを形成するWorkbookオブジェクトについて記載していきます
    Workbooksオブジェクトではファイルのオープン、全てのファイルを閉じることができました
    Workbookオブジェクトでは、ファイルの保存、コピー、削除、クローズなどができるのです

    ■Workbookオブジェクト

    ・構文

    構文は以下の通り、Workbooksオブジェクトのコレクションメンバーです

    Excel.Workbooks(Index)

    Workbookオブジェクトにはイベントが定義されていますが、これは追々ということで・・
    メソッドやプロパティもかなりの量なので、重要そうなものだけを掲載していきます

    Index … 1から始まり[Workbooks.Count]までの数字が指定できます

    ・メソッド

    オブジェクトのメソッドは以下の通りです

    • Activate … アクティブにする
    • Breaklink … リンクを削除
    • ChangeLink … リンクを変更
    • Close … ファイルを閉じる
    • DeleteNumberFormat … ユーザー定義の表示形式を削除
    • EnableConnections … データ接続を有効化
    • ExportAsFixedFormat … PDF または XPS 形式で保存
    • LinkInfo … リンク情報を取得
    • LinkSources … 全てのリンクを配列で取得
    • OpenLinks … リンクの参照元文書を開く
    • RemoveDocumentInformation … ファイル情報の削除
    • Save … ファイルを保存
    • SaveAs … ファイルを別名で保存
    • SaveCopyAs … ファイルのコピーを保存
    • UpdateFromFile … ファイルを更新
    • UpdateLink … リンクを更新
    • etc…

    サーバーファイルや校閲、共有、保護、印刷、XMLについてのメソッドは除外しました
    できれば、リンク関連も除外しときたかったんですが、載せるだけで説明はしませんw

    ・プロパティ

    オブジェクトのプロパティは以下の通りです

    • ActiveChart … アクティブなグラフ
    • ActiveSheet … アクティブなシート
    • ActiveSlicer … アクティブなスライサー
    • Application … オブジェクトを作成したApplicationオブジェクト
    • AutoSaveOn … 自動保存
    • ChartDataPointTrack … 全グラフで実際のデータ要素を追跡
    • Charts … 全グラフシートのコレクション
    • CodeName … オブジェクトのコード名
    • Colors … パレットの色
    • Connections … データソース間の接続更新
    • Container … オブジェクトのコンテナー
    • DefaultPivotTableStyle … ピボットテーブルの既定のスタイル
    • DefaultSlicerStyle … スライサーの既定のスタイル
    • DefaultTableStyle … 既定の表のスタイル
    • DisplayDrawingObjects … 図形の表示方法
    • DisplayInkComments … 注釈をブックに表示するかどうか
    • FileFormat … ファイル形式または種類
    • ForceFullCalculation … 強制的な計算モードかどうか
    • FullName … パスを含めたオブジェクトの名前
    • IconSets … セルアイコンでデータにフィルターを適用する
    • InactiveListBorderVisible … 非アクティブなリストの罫線を表示するかどうか
    • Name … オブジェクトの名前
    • Names … 名前定義のコレクション
    • Parent … 親オブジェクト
    • Path … 完全なパス
    • PivotTables … ピボットテーブルのコレクション
    • Queries … GetとTransformのクエリ
    • ReadOnly … 読み取り専用かどうか
    • ReadOnlyRecommended … 読み取り専用を推奨する設定かどうか
    • RemoveDocumentInformation … 個人情報を削除
    • SaveLinkValues … 外部リンクの値を保存
    • Sheets … シートのコレクション
    • ShowPivotTableFieldList … ピボットテーブルフィールドリストを表示できるかどうか
    • Styles … スタイルのコレクション
    • TableStyles … 表スタイルのコレクション
    • Theme … テーマ
    • UpdateLinks … リンク更新の設定
    • UpdateRemoteReferences … リモート参照の更新設定
    • VBProject … Visual Basic プロジェクト
    • WebOptions … web ページとしての属性のコレクション
    • Windows … ウィンドウのコレクション
    • Worksheets … Worksheetのコレクション
    • etc…

    サーバーファイルや校閲、共有、保護、変換、回復、互換、ドキュメント情報、XMLについてのメソッドは除外しました
    リンク関連は載せるだけです

    ■例

    ・簡単なサンプル

    Sub Sample()
        Dim wb      As Workbook
        Dim ws      As Worksheet
        
    	' Workbookを取得する
        Set wb = Me.Application.ActiveWorkbook
        
        ' 各種プロパティを表示
        Debug.Print wb.CodeName     ' 「ThisWorkbook」
        Debug.Print wb.FileFormat   ' 「52」?
        Debug.Print wb.FullName     ' 「C:\Book2.xlsm」	これはフルパス
        Debug.Print wb.Name         ' 「Book2.xlsm」		これはファイル名のみ
        Debug.Print wb.Path         ' 「C:\」				これはフォルダ名のみ
        Debug.Print wb.ReadOnly     ' 「False」
        Debug.Print wb.Sheets.Count ' 「1」
        
        For Each ws In wb.Sheets
            Debug.Print ws.Name     ' 「Sheet1」
        Next
            
        Debug.Print wb.Styles.Count         ' 「47」
        Debug.Print wb.TableStyles.Count    ' 「170」
        Debug.Print wb.Windows.Count        ' 「1」
        Debug.Print wb.Worksheets.Count     ' 「1」
        
    	' 保存する
        Call wb.Save
        ' 閉じる
        Call wb.Close
        
        Set wb = Nothing
    
    End Sub
    

    ・説明

    ActiveWorkbookでWorkbookを取得して、よく使うであろうプロパティを表示しています
    Saveメソッドで、単一ファイルの保存を行って、Closeメソッドで単一ファイルを閉じています

    ・注意点

    1. WorkbooksオブジェクトのCloseメソッドは全てのファイルを閉じる
    2. WorkbookオブジェクトのCloseメソッドは単一ファイルを閉じる
    3. Excel.Application.ActiveWorkbookプロパティはマクロ登録したボタン押下直後に取得すること!

    ・その他

    フルパスやファイル名、フォルダ名は取れるけど、拡張子や拡張子なしのファイル名(サンプルでいうところの「Book2」)だけとかは取れないんですねー

    Workbooksオブジェクトに、OpenメソッドやCloseメソッドがあって、Workbookオブジェクトには、Saveメソッドがあるので、ファイル単位で行うことは、Workbookオブジェクトにあるかと思ったんですが、ファイルのコピーや削除はないんですね!

    ではでは

  • Open について

    Open について

    既存ファイルの開き方について、WorkbooksオブジェクトのOpenメソッドを調べていきます

    ■Openメソッド

    ・構文

    構文は以下の通りです

    Excel.Workbooks.Open(FileName,[UpdateLinks],[ReadOnly],[Format],[Password],[WriteResPassword],[Ignorereadonlyrecommended],[Origin],[Delimiter],[Editable],[Notify],[Converter],[AddToMru],[Local],[CorruptLoad])

    ・パラメーター

    • FileName … ファイル名(パス)
    • UpdateLinks … [省略可]ファイル内の外部参照(リンク)の更新方法を設定
    • ReadOnly … [省略可]読み取り専用の設定
    • Format … [省略可]テキストファイルを開く場合は区切り文字を指定
    • Password … [省略可]パスワード設定されたファイルを開く場合に指定
    • WriteResPassword … [省略可]書き込み保護されたファイルに書き込む際のパスワードを指定
    • Ignorereadonlyrecommended … [省略可]読み取り専用を推奨するファイルを開く場合のメッセージを非表示にする設定
    • Origin … [省略可]テキストファイル開く場合の改行コードを判定するための設定
    • Delimiter … [省略可]テキストファイルを開く場合でFormatが「6」の場合に指定
    • Editable … [省略可]アドインファイルを開く場合にアドインをウィンドウ表示するかを指定
    • Notify … [省略可]ファイルが読み取り/書き込みモードで開けない場合に通知リストに追加するかを指定
    • Converter … [省略可]ファイルを開くときに最初に実行するファイルコンバータを指定
    • AddToMru … [省略可]最近使用したファイルの一覧にブックを追加するかを指定
    • Local … [省略可]ファイルの言語をExcelに合わせるかを指定
    • CorruptLoad … [省略可]開くファイルのモードを指定

    [UpdateLinks]は以下の「XlUpdateLinks 列挙型」を指定できます
    [Format]は以下の値が設定できるようですが、列挙型が見当たりませんでした

    XlUpdateLinks 列挙型

    • xlUpdateLinksAlways … リンクは常に更新されます
    • xlUpdateLinksNever … リンクはまったく更新されません
    • xlUpdateLinksUserSetting … ユーザーの設定に従って更新

    Format

    • 1 … タブ
    • 2 … コンマ「,」
    • 3 … スペース
    • 4 … セミコロン「;」
    • 5 … なし
    • 6 … カスタム文字([Delimiter]で指定)

    Excelシートにテキストを張り付けた時に使うテキストウィザードの画面と同じですね

    [Format]はこれだね

    ・戻り値

    • 開いたWorkbookオブジェクトを返す

    ■例

    ・簡単なサンプル

    Sub SampleSub()
        Dim wb  As Workbooks
        Dim w   As Workbook
        
        Set wb = Me.Application.Workbooks
        
        ' ファイルを読み取り専用で開く、リンクは更新しない
        Set w = wb.Open("C:\Sample2.xlsx", xlUpdateLinksNever, True)
        Debug.Print w.Name  ' 「Sample2.xlsx」
        Set w = Nothing
        
        Call wb.Close
        
        Set wb = Nothing
    	
    End Sub
    

    ・説明

    パラメータが多すぎてよく・・わからないものもたくさんありますねw

    マクロでファイルを連続して開いて処理を行っていくような場合、途中で確認メッセージが出ると、
    自動化した処理が無駄になってしまいますので、以下の項目は指定すると良いです
    [UpdateLinks]、[Password]、[WriteResPassword]、[Ignorereadonlyrecommended]、[Notify]
    他によく使うのは、[ReadOnly]くらいです

    テキストファイルを扱う場合には、[ReadOnly]や[Origin]、[Delimiter]が必要になります

    [Notify]はサーバーのファイルを誰かが開いている場合に、編集できるように「通知」する設定です

    Excelファイルを開いて、データを抽出したい場合というシーンはよくあります

    その際、元のファイルの意図しない変更を発生させないため、ファイルは読み取り専用で開き、リンクは更新しないとするのがベストです!
    サーバーで管理されているファイルの場合だと、誰かが開いている場合もありますので、読み取り専用で開くのは好都合です

    Openメソッドでもテキストファイルを開くことは可能ですが、テキストファイルを開くときは、OpenTextメソッドを使用してください

    ・注意点

    1. 確認メッセージを表示させない開き方にする
    2. リンクは更新するかしないかは運用で決めよう
    3. データを抽出はファイルを読み取り専用で開こう
    4. テキストファイルはOpenTextメソッドを使おう

    ・その他

    OpenTextメソッドについては、また、時間ができたら書いていきますので、
    次は、Workbookオブジェクトについて書いていきたいと思います

    ではでは

  • Add について

    Add について

    Excel VBAのベースとなるWorkbooksオブジェクトを調べた流れで、Addメソッドについても簡単に調べてみました


    Add メソッドの仕様

    まず、公式ドキュメントに基づいて仕様を確認しましょう。

    • メソッド:Workbooks.Add
    • 構文:expression.Add (Template)  ※expression は Workbooks オブジェクトを指します。 Microsoft Learn+1
    • 引数 Template はオプション/Variant 型。説明は以下の通り:
      • 省略時 → Excel既定の「空のブック(複数シート)」が作成されます。 Microsoft Learn+1
      • 文字列で既存の Excel ファイルを指定 → そのファイルをテンプレートにして作成。パス含む可。 Microsoft Learn+1
      • XlWBATemplate 定数(例:xlWBATWorksheet, xlWBATChart 等)を指定 → 特定タイプの1シート構成ブックを作成。 Microsoft Learn
    • 戻り値:新規作成された Workbook オブジェクト。 Microsoft Learn
    • 備考:新規ブックが「アクティブブック(active workbook)」になります。 Microsoft Learn+1

    XlWBATemplate列挙型

    • xlWBATChart … グラフ
    • xlWBATExcel4MacroSheet … Excel バージョン 4 のマクロ
    • xlWBATExcel4IntlMacroSheet … Excel バージョン 4 のインターナショナル マクロ
    • xlWBATWorksheet … ワークシート

    サンプル

    ここでは、基本→応用までの3つのサンプルを、解説付きで紹介します。


    🧩 サンプル①:最も基本的な使い方(引数なし)

    📘 コード

    Sub CreateBlankWorkbook()
        Dim wb As Workbook
        ' 新しいブックを作成
        Set wb = Workbooks.Add
        
        ' 作成されたブックの最初のシートに文字を書き込む
        wb.Worksheets(1).Range("A1").Value = "Hello, VBA!"
    End Sub
    

    💡 解説

    • Workbooks.Add は引数を省略すると、「空の新規ブック」を作成します。
    • 返り値(戻り値)は新しく作成された Workbook オブジェクトです。
      そのため、Set wb = Workbooks.Add のように変数へ代入しておくと、あとから安全に操作できます。
    • wb.Worksheets(1) は「1枚目のシート」を指定しています。
      Range("A1").Value = "Hello, VBA!" でセルA1に文字を書き込んでいます。

    ✅ ポイント

    • 新しいブックは自動的にアクティブブック(ActiveWorkbook)になりますが、
      アクティブ操作に頼るとバグが出やすいので、変数(wb)経由で操作するのが基本です。

    🧩 サンプル②:テンプレートファイルから新規作成

    📘 コード

    Sub CreateFromTemplate()
        Dim wb As Workbook
        
        ' 既存のテンプレートを指定して新しいブックを作成
        Set wb = Workbooks.Add(Template:="C:\Templates\ReportTemplate.xlsx")
        
        ' テンプレートを元にしたブックに自動で日付を入力
        wb.Worksheets(1).Range("B2").Value = "日付:" & Date
    End Sub
    

    💡 解説

    • Add の引数 Template にファイルパスを指定すると、
      そのブックをテンプレートとして新規作成します。
    • 例えば「報告書フォーマット」や「見積書の書式」をテンプレート化しておけば、
      ワンクリックで同じフォーマットの新規ファイルが生成できます。
    • wb.Worksheets(1).Range("B2") に日付を挿入しておくことで、
      作成時点の日付が自動入力される実務的なサンプルになっています。

    ✅ ポイント

    • テンプレートファイルの場所(C:\Templates\ReportTemplate.xlsx)は、実際の運用では共有フォルダやネットワークドライブに置くと便利です。
    • テンプレートが存在しない場合、実行時エラーになります。
      → エラーハンドリングを加えておくとより堅牢です。

    🧩 サンプル③:自動保存付きの実務向けコード

    📘 コード

    Sub CreateAndSave()
        Dim wb As Workbook
        ' 新規ブックを作成
        Set wb = Workbooks.Add
        
        With wb
            ' ドキュメントプロパティを設定
            .Title = "月次レポート"
            .Subject = "売上報告"
            
            ' ファイル名を「年月付き」で自動生成して保存
            .SaveAs Filename:="C:\Reports\MonthlyReport_" & Format(Date, "yyyymm") & ".xlsx"
        End With
    End Sub
    

    💡 解説

    • With wb 構文で、作成したブックの設定をまとめて記述しています。
    • .Title.Subject はプロパティ情報に登録され、ファイルの詳細情報に反映されます。
    • SaveAs によって、新しく作ったブックを指定フォルダに即保存します。
      Format(Date, "yyyymm") は「年月(例:202510)」の形式で日付をファイル名に埋め込んでいます。

    ✅ ポイント

    • 自動化ツールでは「ファイルを保存して閉じる」処理を組み合わせることが多いです。
      例:wb.Close SaveChanges:=True
    • ファイル名に日付や時刻を入れておくと、重複保存のトラブルを防げます。

    ⚙️ 応用テクニック:Workbooks.Addをさらに使いこなす

    ● 特定のタイプのブックを作る

    Set wb = Workbooks.Add(xlWBATWorksheet)
    

    このように xlWBATWorksheet を指定すると、
    「ワークシート1枚だけの新規ブック」が作れます。
    (環境設定で複数シートが既定の場合でも1枚に固定できます)

    ● 複数ブックをまとめて生成

    Dim wb As Workbook, i As Long
    For i = 1 To 3
        Set wb = Workbooks.Add
        wb.Worksheets(1).Range("A1").Value = "ファイルNo:" & i
    Next i
    

    このようにループを使えば、複数のレポートファイルを一気に作成するツールも簡単に作れます。


    ⚠️ 注意点まとめ

    注意点内容
    アクティブ化Addで作ったブックが自動的にアクティブになります。変数で操作するのが安全。
    シート数Excel設定「新しいブックのシート数」に依存します。1枚にしたい場合はテンプレートや引数指定を。
    テンプレート指定ファイルパスが正しくないとエラーになるため、存在チェックをおすすめ。
    保存処理Add直後は未保存状態。SaveAsを使ってファイル名を明示的に指定しましょう。
    メモリ負荷多数のブックを開いたままにしない。不要になったら .Close で閉じる。

    ・その他

    新しいWorkbookオブジェクトの作り方はわかりました

    次は既存のWorkbookの開き方について調べようと思います

    ではでは

  • Workbooks について

    Workbooks について

    Excel VBAでやれることを探していると、どうしてもセルや行、列、シートの操作について調べることが多くなりますが、ベースとなるWorkbooksについて、調べてみようと思います

    WorkbooksオブジェクトとWorkbookオブジェクトがあるのですが、何が違うのだろうか?

    ま、複数形と単数形なので、複数ファイルと単数ファイルを指しているんでしょうけど、今回は、複数形の方です!

    ■Workbooksオブジェクト

    ・構文

    構文は以下の通りですが、構文と言うほどのことはないですけどねw

    Excel.Workbooks

    要するに、Excelで開いているWorkbookオブジェクトのコレクションがWorkbooksオブジェクトということです

    ・メソッド

    オブジェクトのメソッドは以下の通りです

    • Add … 新しいWorkbookを作成
    • CanCheckOut … WorkbookがサーバでCheckOut可能か調べる
    • CheckOut … WorkbookをCheckOutしてローカルへコピー
    • Close … 開いているWorkbookを全て閉じる
    • Open … Workbookを開く
    • OpenDatabase … データベースをWorkbookとして開く
    • OpenText … テキストファイルをWorkbookとして開く
    • OpenXML … XMLファイルをWorkbookとして開く

    ・プロパティ

    オブジェクトのプロパティは以下の通りです

    • Application … オブジェクトを作成したアプリケーションのオブジェクト
    • Count … コレクションに含まれるオブジェクトの数
    • Creator … オブジェクトを作成したアプリケーション情報
    • Item … コレクション内の単一オブジェクト
    • Parent … 親オブジェクト

    ■例

    ・簡単なサンプル

    Sub Sample()
        Dim wb 	As Workbooks
    	Dim w   As Workbook
        Dim i   As Long
        ' 現在開いているExcelのWorkbookオブジェクトのコレクションを取得します
        Set wb = Me.Application.Workbooks
        
    	' Sample.xlsxファイルを読み取り専用で開きます
        wb.Open Filename:="C:\Sample.xlsx", ReadOnly:=True
    	' ワークシートを含む新しいWorkbookを開きます
        wb.Add Template:=xlWBATWorksheet
        
    	' プロパティを表示してみます
        Debug.Print wb.Application		' 「Microsoft Excel」当然Excelが返ります
        Debug.Print wb.Count			' 「3」マクロを書いたファイルとOpenしたのとAddした3つ
        Debug.Print wb.Creator			' 「1480803660」何これ?w
    
    	' ファイル数分ループする
        For i = 1 To wb.Count
            Debug.Print wb.Item(i).Name	' 「Book1.xlsm」「Sample.xlsx」「Sheet1」のファイル名が返る
        Next i
    
        Debug.Print wb.Parent			' 「Microsoft Excel」が返ります
        
    	' 全てのExcelファイルを閉じます(Addして編集しなかった場合は何も言われずに閉じますね)
        wb.Close
    	
        ' オブジェクトを開放
        Set wb = Nothing
    
    End Sub
    

    ・説明

    Openメソッドでファイルを読み取り専用で開き、
    Addメソッドでシートを指定して新規ファイルを作成して、
    Countプロパティで得た数のItemプロパティは、
    WorkbookオブジェクトですのでNameプロパティでファイル名を出力させ、
    Closeメソッドで全てのファイルを閉じました

    ・注意点

    1. WorkbooksオブジェクトはWorkbookオブジェクトの集まり
    2. Openメソッドはファイルを開く
    3. Addメソッドはファイルを新規作成する
    4. Closeメソッドは全てのファイルを閉じる
    5. Itemプロパティの要素番号は「1」から

    ・For Each…Nextステートメント

    WorkbooksオブジェクトはWorkbookオブジェクトのコレクションですから、
    「For Each…Next」ステートメントを使用して、ItemプロパティをWorkbookオブジェクトとして取得できます

    Sub Sample()
        Dim wb 	As Workbooks
     	Dim w 	As Workbook
    	
    	For Each w In wb
    		Debug.Print w.Name
    	Next
    	
        ' オブジェクトを開放
        Set wb = Nothing
    
    End Sub
    

    ・その他

    AddメソッドとOpenメソッドの詳細は別途、記事を作成していこうと思います
    時間とニーズがあれば、OpenTextメソッドやOpenDatabaseメソッドにも触れたいですけどねー
    Workbooksオブジェクトのプロパティは、ま、こんなもんでしょー
    後は、Workbookオブジェクトとして、説明を書こうと思います

    ではでは