Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【VBAスタンダードに挑戦!】オブジェクト変数

【VBAスタンダードに挑戦!】

f:id:tuna-kichi:20200614200940p:plain

 

本日の5分勉強の内容

 

 

********************************************************

オブジェクト変数

宣言

・オブジェクト(Range, Cell, Worksheet など)を格納する変数

・例)Dim WS As Worksheet、 Dim WB As Workbook

・Dim A As Object とすれば、Cell や Worksheet など、
 固有のオブジェクトではなく、すべてのオブジェクトを対象に指定できる

※ Object ・・・物、目的、
        オブジェ(仏語、展示物の意味として、なじみ があるかも)

 

格納方法

・「Set」という命令を使用して格納する

・例)Set A = Range("A1")、 Set WS = ActiveSheet

・「Nothing」を使用して、明示的に変数を破棄することができる
 (何かが原因で変数に値が残ってしまい、続けてマクロを実行するときに
  影響がないように変数を空っぽにします)

※Set・・・設定
 Active・・・活動中(Excelの場合は最上位で開いているsheet(かな?))
 Nothing・・・何もない、何でもない

********************************************************

Sub Sample()

 Dim WS1 As Worksheet 'Worksheetを変数として定義
 Dim WS2 As Worksheet

 Set WS1 = Worksheets("July") 'シート名「July」(7月)を WS1 に格納
 Set WS2 = Worksheets("Total") 'シート名「Total」(合計)を WS2 に格納

 WS1.Activate 'シート July を一番上に表示

 Range("A10").Copy 'シート July の Range("A10")の値をコピー

 With WS2.Range("B2") 'シート Total の Range("B2")・・・
  .PasteSpecial xlPasteValues 'に値貼り付け
  .Font.ColorIndex = 3 'の、文字色を赤に変更
  .RowHeight = 30 'の、行高を30に変更
 End With

 Application.CutCopyMode = False  'コピーを解除
 Set WS1 = Nothing  'オブジェクト変数を空っぽにする
 Set WS2 = Nothing

End Sub

 

********************************************************

 

シートやブックをまたいで、データのやり取りをするときなど、

Worksheets("Sheet2") とか、Workbooks("macro001").xlsm

などと、長い名前を何度も書かなくていいのでとっても便利。

 

以前、ネットで参考になるコードをまねして書いては見たものの、

エラーで動かない・・・

 

なぜなら、「Set」 を書いて格納していなかったから。

文字列とか、数値であれば不要なんですけどね。

 

これからは、Worksheet, Workbook 変数に入れて、

長いファイル名は最初に一回だけ記入してマクロを作れる!

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/