• ベストアンサー

Excel Setステートメントについて

Setステートメントの使いかたがよくわかりません。 普通に代入する場合。 SetStr = Range("A2") Setステートメントを使う場合。 Set SetStr = Range("A2") この2つに違いはあるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

私にわかる範囲での違いって、こんな感じに使い分けてます。 try1:セルの値を取得(例:文字列) try2:セル情報の取得 Sub try1()   Dim SetStr As String   SetStr = Range("A2").Value   MsgBox SetStr End Sub Sub try2()  Dim SetStr As Range  Set SetStr = Range("A2")  With SetStr       MsgBox "セル番地  " & .Address & vbLf & _              "セルの値  " & .Value & vbLf & _              "セルの行  " & .Row & vbLf & _              "セルの列  " & .Column & vbLf & _              "セルの書式 " & .NumberFormatLocal  End With End Sub ご参考になれば。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Setステートメントはオブジェクト(ここでは範囲)を変数に代入します。 ここではセルの範囲A2を変数「範囲」という名前の変数に代入します。 従って、Setステートメントでない、test1はエラーになります。 Sub test1() SetStr = Range("A2") MsgBox SetStr.Address End Sub Sub test2() Set SetStr = Range("A2") MsgBox SetStr.Address End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Setステートメントの使い方について

    いつもお世話になっています。 私は普段あまりVBを使わないので、素人同然なのですが、たまたま 業務でVBを使う事になったのですが、一つ疑問に思う事があります。 オブジェクトを扱う際に Set ステートメントと言うものがありますが、 この Set ステートメントを付けた時と、付けなかった時で何が違うのでしょうか? おそらく、メモリの利用方法が違うのかと思いますが、どなたか簡潔にお答え 頂けないでしょうか? 素人考えでは、普通に代入(Setステートメントを使わない)した場合は、 オブジェクトのリファレンスが渡り、Setステートメントを使用した場合は、 内容が渡るのかなぁ。。。 と、おぼろげに考えてはいるのですが。。。 よろしくお願い致します。

  • Excel: SetステートメントでRangeオブジェクトに名前付きセルを指定したい

    Excel VBAです。 RangeオブジェクトにSetステートメントで名前付きセルを指定したのですが、結果、RangeオブジェクトはEmpty値になってしまいます。名前付きではない別のセルでやってみるとうまくいきます。 Dim sSheet as Worksheet Dim wRange as Range Worksheets("Sheet1").Select 【失敗する例:名前付きセルを指定】 Set wRange=Range("c_ControlNo") 【うまくいく例:セルA1を指定】 Set wRange=Range("A1") 名前付きセルは指定できないなんてことはない、と思うのですが、どこがおかしいのでしょうか? アドバイスをお願いします。

  • VBA Setステートメント

    エクセル2002使用です。 B列に本日の日付が入るようにワークシートに関数(DAY関数)が入っています。 そのB列を検索して、同じ日付け(数字)がなければ、今日の日付を入力するVBAを組もうと思っているのですが、 Setステートメントで実行時エラー13になります。 ご教示いただけませんでしょうか? Private Sub CommandButton1_Click() ' 出勤ボタン B列に同日日付があればキャンセル Dim tuki, Hiduke1 As String Dim Hiduke1kekka As Variant tuki = Range("B3").Value Hiduke1 = Range("D3").Value Worksheets(tuki & "月").Activate Set Hiduke1kekka = ActiveSheet.Columns("B:B") _ .Find(What:=Hiduke1, After:=ActiveCell, LookIn:=xl, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False) If Hiduke1kekka Is Nothing Then ActiveSheet.Range("D1000").End(xlUp).Select Selection.Value = "出" Worksheets("sheet1").Activate Else Worksheets("sheet1").Activate Exit Sub End If End Sub

  • Setステートメントをまとめて記述する方法 (エクセル2000VBA)

    お世話になります。 Setステートメントで以下のように書いて、シート名を省略して使っています。  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") これをプロシージャ毎に書くとコードが長くなるので、先頭かどこかに1回書くだけで、全てのプロシージャで使えるようにしたいのですがどうしたら良いでしょうか? このようなプロシージャを実行したいのですが、 Private Sub CommandButton1_Click()  a.Range("A2").Value = "データ1"  b.Range("B4").Value = "データ2"  c.Range("C9").Value = "データ3" End Sub (他にもコマンドボタンやチェックボックス用のプロシージャがあります) Setステートメントだけを先頭に書くと、 「プロシージャの外では無効です」というエラーが出ましたので、 Public Sub hensuu()  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") End Sub のようにしたら、「実行時エラー"424":オブジェクトが必要です」というエラーが出てしまいました。 どのようにしたらエラーが出ず正しく動くようになりますでしょうか?よろしくお願いします。

  • ExcelVBAのSetステートメントについて

    お世話になります。 この土日で、ExcelVBAの勉強でもしようと思っていたのですが 掲題の件で躓いてしまいました。 具体的には、オブジェクト変数には、Setステートメントを使って 「オブジェクトへの参照」を代入するということらしいのですが、 恥ずかしながら理解できませんでした。 当方、財務・法務を担当しているのでプログラミングとは無縁の キャリアを歩んできました。 Setステートメントについて、知見のある方からご指導いただけると 幸いです。どうぞ、よろしくお願い申し上げます。

  • ステートメントについて

    お世話になります。 Option Explicitステートメント を記述するのとしない場合の違いが今一良く 分かりません。 どなたかサルにでも分かるようにご教示 頂けませんか? よろしくお願い致します。

  • SETステートメントについて

    こんにちは^^ vb6.0のSETステートメントについて質問です。 SETの使い方がいまいちよくつかめないのですがどういった時に使われるものなのでしょうか?

  • エクセルVBAのSetステートメントについて(長文)

    Sub PlusA002() Dim myTgCell As Range Dim myCounter As Integer Set myTgCell = Range("E2") Do Until myTgCell.Value = Empty If myTgCell.Value >= 80 Then myTgCell.Offset(0, 1).Value = "優" ElseIf myTgCell.Value < 80 And myTgCell.Value > 50 Then myTgCell.Offset(0, 1).Value = "良" Else myTgCell.Offset(0, 1).Value = "追試" End If Set myTgCell = myTgCell.Offset(1, 0) Loop End Sub このプログラムを例にして、Setステートメントについて質問します。Set myTgCell = Range("E2")を削除して実行すれば実行エラーという文言がでるし、またSet myTgCell = myTgCell.Offset(1, 0)を削除すればエクセルが固まるし、Setがこのプログラムに対して必要なのは判ります。しかし、Setがどのような役割を果たしているのかVisualBasicEditorのヘルプを見ても判りません。 どのような場面で使えるものなのですか?どなたか教えてください。

  • エクセルVBAのSETステートメントについて

    マクロを組み込んだエクセルファイルが完成したのですが、ファイルサイズが大きくなってしまった ため、ファイルサイズを軽くするために現在 試行錯誤を繰り返しています。(シート数:50シート) ファイルサイズを軽くするために今までに取り組んできたのは下記の9項目です。 ・数式を値に変換 ・シートイベントプロシージャをThisWorkbookイベントに変換してマクロ構文を簡素化 ・隠れオブジェクトを全て削除(オブジェクト数を最小限・最小サイズに抑える) ・条件付書式、入力規則、名称登録を最小限に抑える ・必要な条件付書式のセル番地には必ず 『 $ 』 を付ける ・Offset 構文を最小限に抑える ・未使用セルの削除(最終セルの位置を正常化) ・Call マクロを多用してマクロ構文の情報量を極力減らす ・型に応じた変数宣言を徹底(バリアント変数扱いを最小限に抑える) ただ、『 型に応じた変数宣言 』 のSETステートメントの正しい使い方について私自身が良く理解 をしていないためにご指導を頂きたく投稿をさせて頂きました。不明なのは下記の2点です。 (1)『 SET a = ○○○○ 』 はオブジェクト型変数に対してのみ使用するものなのでしょうか?   データ型(Date)や文字列型(String)の変数に対してはSETステートメントは使用しないもの   なのでしょうか?仮にデータ型や文字列型変数に対してSETステートメントを使用した場合の   メリットとデメリットについて教えて下さい。もしかして、データ型や文字列型の変数の場合は   ただ単純に 『 SET 』 の文字が省略されているだけなのでしょうか。この基本的な部分の   理解ができていないので、理屈が分からずに困っております。 (2)『 SET a = Nothing 』 の対応はどこまで必要なのでしょうか?   上記(1)の質問にも絡むのですが、メモリリソースを開放してファイルサイズを軽くするためには   『 SET a = Nothing 』 が有効であるという情報がインターネット上に多数掲載されてますが   データ型や文字列型変数に対してもプロシージャの末尾に 『 SET a = Nothing 』 の構文   を付け加えた方がファイルサイズが軽くなるものなのでしょうか?   また、下記マクロ処理の場合にも 『 SET a = Nothing 』 の構文は必要なのでしょうか?        'Shをオブジェクト型変数として宣言     Dim Sh As Worksheet           :           :     '全てのシートに対して以下の処理を実行     For Each Sh In Worksheets            固有のシートに対してではなく全てのシートに           :                      対してマクロを実行する処理においても           :                      末尾に 『 SET a = Nothing 』 の構文を     '次のブックに対しても同様の処理を実行   付け加えた方がファイルサイズが軽くなる     Next Sh                        ものなのでしょうか? とにかく、正攻法でファイルサイズを軽くする方法を探しています。コメントが長くなり過ぎてしまい ましたが、『 SETステートメントの正しい使用方法 』、『 ファイルサイズを軽くするための裏技 』 などについて、ご存知の方がいらっしゃいましたら是非教えて頂けますよう宜しくお願いします。

  • excelのifステートメントのテストで…

    御観覧ありがとうございます。 スパテクという本を買って、excelを勉強しようと、 サンプルを打ち込んでいて、何度かエラーになったりしましたが、 調べることや、入力ミスの確認で回避出来ていたのですが、 本通りに打っているのに、 「エラー438、オブジェクトは、このプロパティまたはメソッドをサポートしてません。」 と出ます。 エクセル2007です。入力したプロシージャは、 Option Explicit Dim nSample1_12 As Integer Sub Sample1_12() nSample1_12 = nSample1_12 + 1 ThisWorkbook.Worksheets("sheet1").Range("A1") = nSample1_12 End Sub Sub Sample1_13() Dim sA2 As String sA2 = ThisWorkbook.Worksheets("sheet1").Range("A2") If sA2 = "" Then ThisWorkbook.Worksheets("sheet1").Renge("A2") = "Sample1_13" ElseIf sA2 = "Sample1_13" Then ThisWorkbook.Worksheets("sheet1").Range("A2") = "基本の文法 ifステートメント" Else ThisWorkbook.Worksheets("sheet1").Range("A2") = "" End If End Sub このサンプル13を実行すると、A2にsample1_13と出るはずなそうなんですが…エラーになります。

専門家に質問してみよう