Set・Setステートメント |
||||
| わずかな知識で VBA! |
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