スポンサーリンク

【Excel/VBA】やってみよう!VBA⑤ワークシートの操作

やってみよう!VBA! やってみよう!VBA
btr
スポンサーリンク
※当サイトは広告を含みます

 勝手に初心者講座。パートのおばさんにもできたんだからあなたにもできる!やってみよう!VBA!

前回はよーーく使う基本構文をやりました。

VBAをやっていくと、別のシート、別のファイルに絡む操作をしたくなります。業務で使うVBAの場合、必ずといっていいほどその必要が出てくるでしょう。

今回は、別のシートの操作をするVBAを書いてみましょう!

■シートを操作するコードを書いてみよう

前回使った点数ファイルを使って、別のシートを操作するVBAを書いてみましょう。

①1シート目をコピーする

②コピーしたシートのシート名を4-6回に変更する。表内をクリアする。

③1シート目のシート名を1-3回に変更する。表内をクリアする。

シートをコピーし、シートを指定し各シートで各種操作をする内容です。 

「シート操作」というプロシージャを作成し、以下のように記述します。 

最初の行から順番に解説します。

Worksheets(1).Copy After:=Worksheets(1)

シート1をコピーしてシート1の後ろに挿入するという文です。

ActiveSheet.Name = “4-6回”

アクティブなシートの名前を「4-6回」にします、という文です。

コピーしたシートは操作直後にアクティブシートになります。

コピーしたシートは1シート目の後ろに挿入したので2シート目になるので、

WorkSheets(2).Name = “4-6回”

と書いても同じです。

ActiveSheetは単数形ですが(最後にsが付かない)「2番目のシート」と指定するWorkSheets(2)はワークシートの複数形になっていることに気が付きましたか?

指定するシートは単体ですが、「複数あるワークシート(=

WorkSheetsコレクション)のうち2番目のシート」と指定するためWorkSheets(2)と複数形になります。

ActiveSheet.Range(“B2:D6”).ClearContents

アクティブシートのセル範囲B2~D6の値をクリアします。

ActiveSheet.Range(“B2:D6”).Interior.ColorIndex = 0

アクティブシートのセル範囲B2~D6の塗りつぶしを「塗りつぶしなし」にします。

WorkSheets(1).Name = “1-3回”

コピー元の1シート目のシート名を「1-3回」とします。

さて、動かしてみましょう。ちゃんとシートがコピーされましたでしょうか?

■Withを使ってみよう

さて、うごいてやれやれ、ですが、もっと素敵なコードに修正してみましょう。

Withステートメントを使ってみましょう。

Withステートメントを使うと、操作対象となるオブジェクトを省略できます。ひとつの操作対象(オブジェクト)でいくつかの処理をしたいときに便利な書き方です。

上の赤枠内はすべてアクティブシートについて書かれています。

アクティブシートの名前を「4-5回」にする

アクティブシートのセル範囲B2~D6の値をクリアする

アクティブシートのセル範囲B2~D6の色を塗りつぶしなしにする

これをWithステートメントでまとめると

Withの後に対象となるオブジェクトを書き、End With で終わります。その間オブジェクト名を省略できますので、オブジェクトを省略しピリオドからコードを書きます。

アクティブシートの名前を「4-5回」にする

アクティブシートのセル範囲B2~D6の値をクリアする

アクティブシートのセル範囲B2~D6の色を塗りつぶしなしにする

としつこい書き方だったものを

アクティブシートの

  名前を「4-5回」にし、

  セル範囲B2~D6の値をクリアし、

  セル範囲B2~D6の色を塗りつぶしなしにする

アクティブシートに関する記述終わり

という書き方に変えた感じ。

なお、セル範囲B2~D6もかぶっているので、Withを入れ子にして書くこともできます。

With ActiveSheet
  .Name = “4-5回”
  With .Range(“B2:D6”)
    .ClearContents
    .Interior.ColorIndex = 0
  End With
End With

セル範囲を指定するのにRange(“B2:D6”)のほかにCellsを使って書くこともできますと前回書きました。

WorkSheets(1)のRange(“B2:D6”)をCellsを使って書くと以下のようになります。

WorkSheets(1).Range(WorkSheets(1).Cells(2,2), WorkSheets(1).Cells(6,4)).ClearContents

むむむ!変数を使ってセル範囲を指定するときにCellsは便利ですがさすがにこんな長ったらしいのはいやですね!

Withを使うことですっきりかけます。

With WorkSheets(1)
    .Range(.Cells(2,2), .Cells(6,4)).ClearContents
End With

WorkSheets(1)を省略したRange、Cellsの前にはピリオドがつきます。特にCellsの前のピリオドを忘れがちになるのでご注意ください(私はよく忘れてエラーになるので・・・)

Withは使っても使わなくてもよいのですが、処理速度が向上するそうですし、可読性もよくなるので使う場面が出てきたらWithを思い出してみてください。

■ざっくり、オブジェクトを意識したVBAの書き方について

VBAをやっていると「オブジェクト」「プロパティ」「メソッド」等という言葉をよく見かけます。

オブジェクトとは操作される対象。ワークシートやブック、セルなどの、なんとなく一言で言うと「モノ」みたいな感じのものです。

プロパティとはオブジェクトが持つ「状態・様子」といった感じです。

オブジェクトとプロパティをピリオドでつなぎ、オブジェクト.プロパティ=〇〇と書きます。

メソッドとはオブジェクトに対する動作を指定するものです。

対象(オブジェクト)に対する命令という感じです。

オブジェクトとメソッドをピリオドでつないで書きます。

オブジェクト.メソッド 引数1:=〇〇, 引数2:=△△ といった書き方もします。

引数は動作をより詳しく記述するものです。「どのように」動け、の「どのように」の部分です。

例えば、山田.眠れ だと、山田(オブジェクト)に眠れと命令していますがいまいち指示があいまいで、どのくらい寝てていいのかわかりません。その場で30分の昼寝でも、家で12時間爆睡でも。

引数を使って家で6時間寝て来いと細かく指示を出しましょう。

山田.眠れ 場所:=家, 時間:=6時間

と、引数を使うと細かい指示付きの命令が書けます。

上の例のシートコピーでも引数を使っています。

さて、だいぶ話が膨らんでしまいましたがこの会はこれで終わりです。
最後までお読みいただきありがとうございました。

次回はVBAのファイル操作編を予定しています。

☆おさらい☆こんなことをやりました

・シートを操作するコードの書き方

・ワークシートの指定方法

・Withの使い方

・オフジェクトとは「操作される対象」

・プロパティとはオブジェクトの「状態・様子」

・メソッドとはオブジェクトに対する「命令」

・メソッドの引数とは「命令」に「どのように」を付け加えるもの

やってみよう!VBA!シリーズ

【Excel/VBA】やってみよう!VBA①

【Excel/VBA】やってみよう!VBA!②

【Excel/VBA】やってみよう!VBA!③

【Excel/VBA】やってみよう!VBA!④

【Excel/VBA】やってみよう!VBA⑥ファイルの操作

【Excel/VBA】やってみよう!VBA!⑦ファイルの操作その2

【Excel/VBA】やってみよう!VBA⑧最後に

コメント

タイトルとURLをコピーしました