excel vba でシートを指定する時の様々な方法
シートを指定する時の様々な方法を紹介します。
方法1 オブジェクトの名前を指定する方法
上図のようにプロジェクトエクスプローラに表示されている
オブジェクトの名前を指定する方法です。
今回の場合sheet1がシートのオブジェクト名 サンプルがexcel上のシート名となります。
※オブジェクトの名前とexcel上のシート名前は異なるのでご注意ください
例
sheet1.range(sheet1.cells(1,1),sheet1.cells(1,1)).valule=1
実行結果
上記を実行するとオブジェクト名がsheet1のcell(1,1)に値が1と入力されます。
※別シートのセルをrangeとcellsを使用して使う注意点は過去記事を参照してください。
方法2 シートのindex番号を指定する方法
シートのindex番号とは、excel上のシート位置が一番左のシートを1として、その右隣のシートは2、またそのさらに右隣は3という考え方で、番号でシートを指定することができます。
例
sheet(1).range(sheet(1).cells(1,1),sheet(1).cells(1,1)).value=1
実行結果
excel上のシートが一番左のシートのcells(1,1)の値が1と入力されます。
※こちらの指定の仕方は、エクセル上のシート追加やシート削除などにより、シートの位置関係に変更が行われた時に参照先が意図せず変わってしまう可能性が高いのであまりお勧めしません。
方法3 シートの名前を指定する方法
こちらはエクセル上のシートの名前を指定する方法です。
例
書き方パターン1
worksheets("サンプル").range(worksheets("サンプル").cells(1,1),worksheets("サンプル").cells(1,1)).value=1
書き方パターン2
sheets("サンプル").range(sheets("サンプル").cells(1,1),sheets("サンプル").cells(1,1)).value=1
実行結果
サンプルという名前のシートのcells(1,1)の値が1と入力されます。
※こちらの方法では2つのパターンで記述することが出来ます。
以上、excel vbaを使用した時のシートを指定する方法を3パターン紹介しました。
私は方法3のエクセル上のシートの名前を使用してシートを指定する方法をよく使用しますが、エクセル上で名前を変更されてしまうとプログラムが正常に行われなくなってしまいます。そのような場合を回避するためにも方法1のオブジェクト名を使用してシートを指定する方法を使うのが一番無難なような気がします。