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 について 1
コピー前
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」の場合、以下のように書くことができます


Worksheet について 3
自らのシートに書く
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
これは個別の記事で書いていこうと思います
ではでは

広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い

シェアする