Set・Setステートメント

わずかな知識で VBA!

Set
Setステートメント


 

Setステートメント



  Setステートメントは、Object変数に「オブジェクトへの参照」を代入し、
  その変数をオブジェクトと同様に扱えるものにします。
 
  つまり、実際のオブジェクトを参照できるようになります。
  Setステートメントは、実に便利で、入力位置の検索や、データーベースの検索などに
  多用しております。

  考え方としては、
  「指定した場所を、オブジェクトとしてセットする」と覚えた方が分かりやすいでしょう。

  幼稚園の先生流に言うと、「小人さんを指定した場所にお使いにだします。」
  こちらの方がわかりやすかったりして!

     Set setcell = Worksheets("Sheet1").Range("C5")

     変数setcellを Worksheets("Sheet1").Range("C5")にセットする。


     Set setcell = Workbooks("単価表.xls").Worksheets("索引").Range("C7")

     setcellを Workbooks("単価表.xls").Worksheets("索引").Range("C7")にセットする。

  現在アクティブになっているブック以外にセットする場合には、
  コンテナの概念を使用して、ブック名を最初に記述します。
 
  この場合は、Workbooks("単価表.xls")は、Excel上でアクティブになっていなくても
  開いている必要があります。

      

わずかな知識で
VBA!





  

  ここまでは、単独のセルにセットしましたが、
  Setステートメントでセットできるのは、単独のセルだけではありません。
 
  特定の範囲やブック、ワークシートなどにセットすることもできます。
 
      Set setbook = Workbooks("単価表.xls")

      Set setsheet = Worksheets("索引")

      Set setcells = Range("A5:C10")


                            などです。

   下の例は、ユーザーインターフェースの章で使用した、
   入力フォームのコマンドボックスに、コードと製品名を設定するときの使用例です。

      Function kombosettei()
         Dim cntA As Integer
         Dim setcell As Range
         'コマンドボックスの設定
         cntA = 0
         With 入力.kohdo
            .ColumnCount = 2
            Set setcell = Worksheets("製品単価").Range("C7")    
表のコード欄のはじめの行にセット
            'RowSourceの入力
            Do Until setcell.Value = ""                   
setcellの値が空白になるまで続ける
               .AddItem                     
      項目追加宣言 
               .List(cntA, 0) = setcell.Offset(0, 0).Value    
入力.kohdo.List(cntA, 0)にsetcellの値を代入
               .List(cntA, 1) = setcell.Offset(0, 1).Value 
               
入力.kohdo.List(cntA, 1)にsetcellの1つ右のセルの値を代入
               Set setcell = setcell.Offset(1, 0)           
setcellを1つ下へ送る 
               cntA = cntA + 1                     
カウンター値を1つ増やす
            Loop
         End With
      End Function


   setcell近辺の値を取得していますが、逆に、setcell近辺にデーターを入力することもできます。

    '入力位置の検索
    Set setcell= Worksheets("入力").Range("B7")      Worksheets("入力").Range("B7")にsetcellをセット
    Do Until setcell.Value = ""              
setcellの値が空白になるまで操作を続ける。
       Set setcell= setcell.Offset(1, 0)         
setcellを1つ下へ送る
    Loop
    '値及び計算式の入力

    With setcell                      setcell近辺のセルにOffsetプロパティを用いてデーターを入力
      .Offset(0, 0).Value = strkohdo
      .Offset(0, 1).Value = strnamae
      .Offset(0, 2).Value = lokazu
      .Offset(0, 3).Value = strtanka
      .Offset(0, 4).Value = "=RC[-2]*RC[-1]"
      .Offset(0, 4).Style = "Comma [0]"
    End With


   Setステートメントで使用できる変数の宣言は、「Object型」としますが、オブジェクト変数には、
   「総称オブジェクト型」と「固有オブジェクト型」とういうものがあります。

     Dim setcell As Object 総称オブジェクト型

     Dim setcell As Range 固有オブジェクト型
             As Workbook
             As Worksheet

   総称オブジェクト型は、オブジェクトの種類を特定しない方法で、固有オブジェクト型は、オブジェクトの種類を
   特定して宣言する場合に使用します。

    どちらで宣言しても機能的に大きな差はないそうです。
   ただ、デバッグ時にエラーが発見しやすく、処理速度が若干向上するそうなので、
   固有オブジェクト型を使うように心がけた方がいいでしょう。

Setステートメント Bookが開いているかの確認方法


    この方法は、目的のBOOKが開いているかどうかを確認するために私が使用している方法です。
   方法は簡単で、SETステートメントとを用いて、目的のBookに参照セルをセットしてみるだけです。

    結果がエラーなら開いていないということなので、そのBOOKを開くようにエラーメッセージを出します。
    そうでなければ、サブルーチンを抜けて、そのまま処理を続けます。
   今回は、エラー時の飛び先に、「nontan」としていますが、
    わかりやすくしているだけで意味はありません。行番号の「100」でも「200」でも結構です。


   Sub 単価本確認()
     Dim settesuto As Range
       '
     On Error GoTo nontan                             'エラーならnontanへ
     Set settesuto = Workbooks("建物単価").Worksheets("索引").Range("P7")
     On Error GoTo 0
     Exit Sub
   nontan:
       MsgBox "使用する建物単価ファイルを開いてから再び実行してください!",64,"作業手順!"
   End Sub


        


  わずかな知識でVBA!       TOP

  マクロで何ができる?   ユーザーインターフェース    マクロの記録   マクロの登録
 
  イベントについて      マクロの編集とデバッグ    ゲームで覚えるVBAプログラミング
 
  オブジェクトの操作     セルの操作            MsgBox関数・InputBox関数
 
  変数の型           ヘルプの活用          イミディエイトウィンドウ  
 
  Withステートメント      Setステートメント
 
  条件分岐のステートメント   If Then Else,Select Case
 
  繰り返しのステートメント   Do Loop
 
  繰り返しのステートメント   For Next
  
  ダイアログボックスを作ってみよう1                 ダイアログボックスを作ってみよう2 【実践編】
  
  ActiveXコントロール     各コントロールのプロパティ       文字列の操作        Endプロパティ

  リンク・検索   相互リンク    マイプロフィール       YouTubeの部屋 

Copyright (C) わずかな知識でVBA! All Rights Reserved