本ページには広告が含まれています。

ExcelマクロVBA シートの操作について(初心者向け12)

Excel VBA シートの操作について(初心者向け12)
くるみこ
くるみこ

シートの操作について勉強しましょう!
「マクロの記録」と比較しながらしっかり覚えましょう。それではよろしくお願いします(^^)

はい! よろしくお願いしますm(_ _)m

前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます

くるみこ
くるみこ

前回記事でわかったことは
・RangeプロパティとCellsプロパティについて理解できました
・セルまたはセル範囲を参照・入力する方法がわかりました
・RangeとCellsの使い分けは、変数を使う場合はCellsを使います
・セル範囲指定の場合、RangeとCellsを組み合わせて使います

【この記事でわかること】
アクティブシートと非アクティブシートが対象の場合の比較
・ワークシートシートを制御する各種メソッドなどについて

スポンサーリンク

アクティブシートと非アクティブシート

「マクロの記録」で記録されるのはアクティブシートを対象にした記述になっています。アクティブでないシートには、そのシートを「Select」してアクティブにしてから対象セルを「Select」してセルをアクティブにする。必ずアクティブにしてから何かの処理をするなんてことをやっています

アクティブでないシートの指定

アクティブシートから非アクティブシートを対象にして直接何かをすることが出来ます。その方法は、対象にするシート名を(違うブックの場合ブック名も)指定します

'これは全部同じシートへ書き込んでいる
Sub Sample_01()
    Cells(1, 1) = 1000  'アクティブシートのA1へ書き込み
    Worksheets("Sheet1").Cells(2, 1) = 2000 'Sheet1のA2へ書き込み
    'このブックのSheet1のA3へ書き込み
    ThisWorkbook.Worksheets("Sheet1").Cells(3, 1) = 3000
    'ブック(sample037.xlsx)のSheet1のA4へ書き込み
    Workbooks("sample037.xlsx").Worksheets("Sheet1").Cells(4, 1) = 4000
    Cells(5, 1) = 5000  'アクティブシートのA5へ書き込み
End Sub

・これは全部同じシートに書き込んでいます
・指定の仕方を見本として示しています

'これは最初以外は違うシートへ書き込んでいる
Sub Sample_01()
    Cells(1, 1) = 1000  'アクティブシートのA1へ書き込み
    Worksheets("Sheet2").Cells(2, 1) = 2000 'Sheet2のA2へ書き込み
    'このブックのSheet3のA3へ書き込み
    ThisWorkbook.Worksheets("Sheet3").Cells(3, 1) = 3000
    'ブック(sample037.xlsx)のSheet4のA4へ書き込み
    Workbooks("sample037.xlsx").Worksheets("Sheet4").Cells(4, 1) = 4000
    Cells(5, 1) = 5000  'アクティブシートのA5へ書き込み
End Sub

・こちらは最初だけアクティブシートです
・そのほかは、違うシートに書き込んでいます
アクティブなシートはずっと最初のシートのままですがちゃんと書き込めます
シートを指定すれば、セレクトしたりアクティブにしなくても書き込みできます
ここで注意しなくてはいけないのは一番最後です。指定が無いとアクティブシートになることを覚えておいてください

非アクティブなシートに対して一連の操作を行う場合は「Withステートメント」やオブジェクトを使いましょう

ワークシートを制御する

ワークシートを制御するメソッドについて解説します

選択 Select/アクティブ Activate

「Activate」と「Select」はどちらもシートを選択するということです。違いは何でしょうか?

「Activate」と「Select」の違い

・「Activate」は複数選択はありません
・「Select」は複数選択できます
・どちらも「選択する」ですが、「Select」で複数選択した場合、最初に選択したシートが「Activate」(表示された状態)になっています。違うシートをアクティブにしたい場合はそのシートを「Activate」する必要があります
・これは、セルの場合でも全く同じです
・単一で選択する場合は「Activate」でも「Select」でも同じということです

「Activate」と「Select」の例文

・「Activate」と「Select」は単一シートの場合構文は同じです

Worksheets(“Sheet1”).Activate  ’”Sheet1″を指定してアクティブにする
Sheets(“Sheet1”).Activate    ’”Sheet1″を指定してアクティブにする
Worksheets(1).Activate     ’インデックス番号で指定してアクティブに

Worksheets(“Sheet1”).Select   ’”Sheet1″を指定して選択する
Sheets(“Sheet1”).Select     ’”Sheet1″を指定して選択する
Worksheets(1).Select      ’インデックス番号で指定して選択する

・インデックス番号とはシートが左から何番目にあるかということです。指定する場合は(1)のように括弧内に数字を入れます

・次は「Select」で複数選択する場合(「マクロの記録」で記録できます

Sheets(Array(“Sheet1”, “Sheet2”, “Sheet3” ・・・)).Select

「Sheets」コレクションには、ブックにあるグラフシート、ワークシートのすべてのシートが含まれます。したがって、ワークシートのみの指定は「Worksheets」が正式ですが、通常「Sheets」でも問題ありません

追加する(Addメソッド)

Addメソッドはシートを追加するためのメソッドです

Worksheets.Add       ‘アクティブなシートの次にワークシートを追加
Sheets.Add.Name = “名前”  ‘名前を付けてワークシートを追加する場合
Worksheets.Add Before:=Worksheets(“Sheet2”)  ‘”Sheet2″の前に追加
Worksheets.Add Before:=Worksheets(1)     ‘一番前に追加
Worksheets.Add After:=Sheets(Sheets.Count)   ‘末尾に追加
Worksheets.Add Count:=3   ‘ワークシートの枚数を指定して追加する場合

削除 Delete する

追加の次は削除です。Deleteメソッドでシートを削除します

ActiveSheet.Delete        ‘アクティブなシートを削除する
Worksheets(“Sheet10”).Delete  ‘指定シート名のシートを削除する
Worksheets(10).Delete  ‘指定インデックス番号のシートを削除する

コピー Copy/移動 Move

・「Copy」と「Move」の構文は同じです

‘”Sheet1″を”Sheet2″の後ろにコピーする
Worksheets(“Sheet1”).Copy After:=Worksheets(“Sheet2”)
アクティブなシートを“Sheet1″の前にコピーする 
ActiveSheet.Copy Before:=Worksheets(“Sheet1”)

‘”Sheet1″を”Sheet2″の後ろに移動する
Worksheets(“Sheet1”).Move After:=Worksheets(“Sheet2”)
‘アクティブなシートを”Sheet2″の前に移動する
ActiveSheet.Move Before:=Worksheets(“Sheet2”)

ワークシートに関する様々な処理

・ワークシートを操作するうえでシート名に関する様々な処理が必要になります
・思いつく例を記載しておきます

MsgBox ActiveSheet.Name  ‘シート名を取得してメッセージで表示
MsgBox ActiveSheet.Index  ‘シートのインデックス番号を取得して表示
Worksheets(“Sheet1”).Name = “Top” ‘”Sheet1″の名前を”Top”に変更
‘ブック内のシート数をカウントして(For)ループ処理に使用
For I = 1 To Worksheets.Count ・・・・・・・Next
‘全シート数分のループ処理(For Each)対象シートが無くなるまでループ
For Each shName In Worksheets ・・・・・・Next

・最初の二つはMsgBoxに取得したデータを表示していますが、ほとんどの場合はデータを変数に格納して使用するケースが多いでしょう
・3番目は、シート名を変更する場合です。Nameプロパティに代入しています
・For ループで使用する場合、シートをカウントして1~カウント数まで処理します
・For Each を使用する場合は、Worksheetsコレクションのワークシートオブジェクト数分をループ処理します

WorksheetsとSheetsの違い

WorksheetsとSheetsの違いは次のとおりです

名称詳細
WorksheetsWorksheetsコレクションはWorksheetオブジェクトの集合体です  
Worksheetオブジェクトだけが含まれています
SheetsSheetsコレクションはWorksheetオブジェクトとその他
(グラフシートなど)すべてのシートオブジェクトの集合体です

シートを扱うには、WorkSheetsとSheetsを利用します。通常はどちらを使っても構わないのですが、厳密には上記の表のような違いがあります
Excelでグラフを作成する際に、作成する場所の指定で「新しいシート」を選択すると、「グラフ」シートが作成されます。グラフシートが作成された状態で、次のマクロを実行するとその違いがよく分かります。試してみてください(^^)

Sub test()
    '全シート数の確認
    MsgBox "すべてのシート数は、" & Sheets.Count & " 枚です"
    'ワークシート数の確認
    MsgBox "ワークシート数は、" & Worksheets.Count & " 枚です"
    'グラフシート数の確認
    MsgBox "グラフシート数は、" & Charts.Count & " 枚です"
End Sub

グラフシートが無ければ、入力の手間も省けますから「Sheets」でOKです

まとめ(おわりに)

くるみこ
くるみこ

今回はここまでで終了です!
ワークシートの基本的なことは理解できましたか?

はい! だいたいわかりました。わたしはグラフを使うことは無いのでSheetsで問題ないということですね! でも、そのうち使うかもしれないのでしっかり頭に入れておきます(^^)

くるみこ
くるみこ

そうですね!理解したうえで使うということは大事なことです。これからもそのスタンスでいきましょうね(^^)
では、まだまだ続きがあるので次回も楽しみに待っていてね(^^)/

まとめと感想など

・シートがアクティブか非アクティブかの比較・違いがわかりました
・ワークシートシートを制御する各種のメソッドがわかりました
・Workseets と Sheets の違いがわかりました

マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロ」の記事を継続して書いていきます

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にご期待ください(^^)/

スポンサーリンク
スポンサーリンク

過去記事のサンプルファイルをダウンロードできます

今回の記事のサンプルはありません!コードをコピーしてご利用ください!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください