カテゴリー: Worksheets

WorksheetsオブジェクトはWorksheetオブジェクトのコレクションです!1つのファイルは複数のWorksheetオブジェクトからできている!だから、Worksheets(複数形)なのです!

  • Worksheetsについて

    Worksheetsについて

    現在作業しているWorkbookオブジェクトのすべてのWorksheetが格納されているのが、Worksheetsオブジェクトです

    作業中のファイルにいくつワークシートがあるのか、どのワークシートをコピーして、どこに挿入するかなどを行う場合は、このWorksheetsオブジェクトを使用します

    ■オブジェクト

    WorksheetsオブジェクトはWorksheetオブジェクトのコレクションで、Sheetsオブジェクトのコレクションメンバーとなっています

    つまり、Sheetsオブジェクト > Worksheetsオブジェクトということです

    ※Sheetには、WorksheetsオブジェクトとChartsオブジェクトが含まれています

    ・構文

    構文は以下の通りです

    Excel.Worksheets

    このWorksheetsオブジェクトをWorksheets型にSetしようとすると怒られますw

    実は、Sheets型にSetしないといけません!

    ・メソッド

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

    • Add … 新しいワークシートをオブジェクトとして追加
    • Copy … ワークシートをコピー
    • Delete … ワークシートを削除
    • FillAcrossSheets … コレクション内の全ワークシートに同じ指定領域をコピー
    • Move … ワークシートを移動
    • Select … ワークシートを選択
    • etc…

    印刷関連のメソッドについては除外しました(2つだけですがw)

    ・プロパティ

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

    • Count … オブジェクト内のワークシートの数
    • HPageBreaks … 水平方向の改ページのコレクションを取得
    • Item … コレクション内の単一オブジェクトを取得
    • Parent … 親オブジェクト(Workbookオブジェクト)を取得
    • Visible … オブジェクトを表示するかどうか
    • VPageBreaks … 垂直方向の改ページのコレクションを取得
    • etc…

    Application、Creatorプロパティについては記載を除外しました(どこにでもあって、使い方道がよくわからないのでw)

    HPageBreaksとVPageBreaksとVisibleプロパティについては、そっとしておきます

    ■例

    ・簡単なサンプル

    Sub SampleWorksheets()
        Dim wss As Sheets
        Dim ws  As Worksheet
    	
        ' ①
        Set wss = Excel.Worksheets
        Debug.Print "① " & wss.Count
        For Each ws In wss
            Debug.Print "① " & ws.Name, ws.Parent.Name
        Next
        Set wss = Nothing
    	
        ' ②
        Set wss = Excel.Workbooks(1).Worksheets
        Debug.Print "② " & wss.Count
        For Each ws In wss
            Debug.Print "② " & ws.Name, ws.Parent.Name
        Next
        Set wss = Nothing
    	
        ' ③
        Set wss = Excel.Application.Worksheets
        Debug.Print "③ " & wss.Count
        For Each ws In wss
            Debug.Print "③ " & ws.Name, ws.Parent.Name
        Next
        Set wss = Nothing
    	
        ' ④
        Set wss = Excel.Application.ActiveWorkbook.Worksheets
        Debug.Print "④ " & wss.Count
        For Each ws In wss
            Debug.Print "④ " & ws.Name, ws.Parent.Name
        Next
        Set wss = Nothing
    End Sub
    

    実行サンプルの絵です(いきなりどうした!?w)

    このサンプルソースは、Sample.xlsmの「Sheet1」に記載しており、サンプル.xlsmをActiveにした状態で、SampleWorksheetsメソッドを実行いた結果をイミディエイトウィンドウに表示しています

    ・説明

    Worksheetsオブジェクトの取り方は、4パターン!(ホンマは他にも[Application.Workbooks(1).Worksheets]とかもあるけどw)

    ②だけがActiveではないWorkbookから取得していることがわかりますね

    そして、Countプロパティも「For Each … Next」ステートメントでも「グラフ1」(Chartsオブジェクトに含まれるグラフシート)は取得されないことがわかります

    どちらも取りたい場合は、最初に書いた通り、Sheetsオブジェクトを使います!

    ・注意点

    • 型 … Worksheets型ではなく、Sheets型に取得する
    • 取得できるもの … ワークシートのみ
    • Addメソッド … グラフシートが追加できる!?(らしいw)
    • そっとしておきたいプロパティがあるw

    ・その他

    サラッとも触れていませんが、FillAcrossSheetsメソッド!これ実は便利なのです!(使い方の詳細については、いつかきっと、どこかで記載しますw)

    Addメソッドもリファレンスを見る限りは、Worksheetsオブジェクトなのに、Chartオブジェクトを追加できるらしいのです!?

    ※Chartsオブジェクトには、Add2メソッドというのがあるそうですw

    次はその辺りを調べましょー!

    ではでは

  • Worksheet について

    Worksheet について

    Excelの作業効率を上げるために行うべきことは、ファイル(Workbook)単位ではなく、シート(Worksheet)単位での自動化を行うこと!
    そのためには、このWorksheetオブジェクトが大事なのです!

    ■Worksheetオブジェクト

    Worksheetオブジェクトとは、1シートを意味するオブジェクトで、Worksheetsオブジェクトのコレクションメンバーです
    ワークシート(Worksheet)とグラフシート(Chart)は別物なのでご注意ください

    ・構文

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

    Excel.Worksheets(Index)

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

    ・メソッド

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

    • Copy … ワークシートをコピーする
    • Delete … ワークシートを削除する
    • Evaluate … 名前をオブジェクトや値に変換する
    • ExportAsFixedFormat … 指定した形式のファイルにエクスポートする
    • Move … ワークシートを移動する
    • Paste … クリップボードの内容をワークシートに張り付ける
    • PasteSpecial … クリップボードの内容を指定した形式でワークシートに張り付ける
    • PivotTables … ワークシートのPivotTableオブジェクトのコレクションを取得する
    • PivotTableWizard … PivotTableオブジェクトを新規作成する
    • SaveAs … ワークシートへの変更を別ファイルに保存する
    • Select … ワークシートを選択する
    • ShowAllData … フィルタを解除します
    • etc…

    数が多いので一部のメソッドについては記載していません

    ・プロパティ

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

    • AutoFilter … 設定されたAutoFilterオブジェクト
    • Cells … ワークシートのすべてのセルのコレクション
    • CodeName … ワークシートのコード名
    • Columns … ワークシートのすべての列のコレクション
    • CustomProperties … ワークシートに関連付けられている識別子情報
    • EnableCalculation … ワークシートを自動的に再計算するかどうか
    • EnableFormatConditionsCalculation … 条件付き書式が自動的に発生するかどうか
    • Hyperlinks … ワークシートのハイパーリンクのコレクション
    • Index … ワークシートのインデックス番号
    • ListObjects … ワークシートのリストオブジェクトのコレクション
    • Name … ワークシートの名前
    • Names … ワークシート固有の名前定義のコレクション
    • Next … 次のワークシート
    • Outline … ワークシートのアウトラインのコレクション
    • PageSetup … すべてのページ設定設定
    • Previous … 前のワークシート
    • QueryTables … ワークシートのすべてのクエリテーブルのコレクション
    • Range … セルまたはセル範囲のオブジェクト
    • Rows … ワークシートのすべての行のコレクション
    • ScrollArea … スクロールを許可する範囲を設定
    • Shapes … ワークシート上のすべての図形のコレクション
    • Tab … ワークシートの見出しオブジェクト
    • Type … ワークシートの種類
    • UsedRange … ワークシートの使用されている範囲
    • Visible … ワークシートを表示するかどうか
    • etc…

    統合や保護、Lotus、改ページ、及び読み取り専用プロパティはほぼ除外しています
    コレクションが多すぎるので、個別の記事で紹介していきますw

    ・イベント

    オブジェクトのイベントは以下の通り、省略しますw

    • etc …

    ※イベントは入力チェックや変更判定などで利用できるのですが、入力者の意図しない処理結果を生む場合があり、混乱の原因になるため、極力イベントの処理は控えてください

    ■例

    ・簡単なサンプル

    Sub WorksheetMain()
        Dim ws  As Worksheet
        Dim ws2 As Worksheet
        ' ActiveSheetはObject型なので、Worksheet型にセットして使う
        Set ws = Excel.ActiveSheet
        ' ①を「Sheet1」の後ろにコピーする
        ws.Copy After:=Worksheets("Sheet1")
        ' この時のActiveSheetは?
        Set ws2 = Excel.ActiveSheet
        Debug.Print ws.Name
        Debug.Print ws2.Name
        Set ws2 = Nothing
        Set ws = Nothing
    End Sub
    

    ・説明

    ①と名前を付けたシートをアクティブにして、WorksheetオブジェクトをActiveSheetプロパティで取得します
    そのあと、①を「Sheet1」の後ろにコピーします
    そして、再度、ActiveSheetプロパティでWorksheetオブジェクトを取得すると、コピーした「① (2)」のシートが取得できることがわかります!

    コピー前
    コピー後

    ・注意点

    • Worksheetオブジェクトはワークシートしかない
    • Chartオブジェクトはグラフシート
    • WorkSheetオブジェクトはCopyして、Pasteしても複製はされない
    • Copy時にBeforeかAfterを指定して複製する
    • Copyした際には、複製されたWorksheetがActiveになる
    • ActiveSheetプロパティはObject型だ!
    • プロパティはコレクションが多い
    • 統合は難しいので後回しにするw
    • 保護はしないw
    • Filterは癖が凄いが複数フィルターが使える

    ・Me

    マクロをどのファイルに書くかにもよるdのですが、もしVBAのプロジェクトエクスプローラーの「Microsoft Excel Objects」にぶら下がっているワークシートにマクロを書く場合は、
    「Excel.ActiveSheet」ではなく、シンプルに「Me」と書くことができます
    例えば、ボタンを設置したシートが「Sheet1」の場合、以下のように書くことができます


    自らのシートに書く
    Sub WorksheetMain2()
        Dim ws  As Worksheet
        ' ①を後ろにコピーする
        Me.Copy After:=Me
        ' この時のActiveSheetは?
        Set ws = Excel.ActiveSheet
        Debug.Print Me.Name
        Debug.Print ws.Name
        Set ws = Nothing
    End Sub
    

    ・その他

    説明していないことを注意点として挙げています!w
    これは個別の記事で書いていこうと思います
    ではでは