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
これは個別の記事で書いていこうと思います
ではでは