VBA Professional Office 2003の試験問題: 実行されるのはなぜ?

このQ&Aのポイント
  • VBA Professional Office 2003の試験問題について質問があります。
  • 試験問題の中で、(3)が実行される理由について教えてください。
  • (2)をIf myRange <> Null Thenに変更すると、正常に動作することも分かりました。
回答を見る
  • ベストアンサー

myRange = Null

VBA Professional Office 2003の試験問題ですが http://vbae.odyssey-com.co.jp/study/sample_2003.html Sub Sample1() Dim myRange As Range On Error Resume Next '――(1) If myRange = Null Then '――(2) Debug.Print "OK" '――(3) Else Debug.Print "NO" '――(4) End If End Sub の(3)が実行されるのは、 myRange = Null が正しいからではなく、 (2)のIf myRange = Null Thenのコードが無視されたから 次のコードの(3)がたまたま実行されただけですか? (2)をIf myRange <> Null Thenにしても OKになりました。

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

  • ベストアンサー
回答No.1

On Error Resume Next '――(1) が働いて次ステップへ、、、 エラー:91??

zugvebwoesn
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

質問者が示されている試験問題の答えに書かれていますが、 (2)でエラーが発生するが(1)でエラーが発生しても次の行を実行すると指定していますので、=も<>も関係なく(3)が実行されます。 ようするに(2)が問題です。 確認するには(1)を消すかコメントにすれば判ります。

zugvebwoesn
質問者

お礼

ありがとうございました。

関連するQ&A

  • 【エクセル】ActiveCellはなぜNullではないのでしょうか?

    私は今まで新規のシートを挿入した際のActiveCellは、Nullだと思っていたのですが Sub Empty空白なら() If ActiveCell.Value = Empty Then Debug.Print "空白セルです" End Sub Sub Null空白なら() If ActiveCell.Value = Null Then Debug.Print "空白セルです" End Sub Sub Null空白なら2() If IsNull(ActiveCell.Value) = True Then Debug.Print "空白セルです" End Sub VBAでこのコードを実行すると Emptyの方だけ「空白セルです」となりました。 (1)なぜ空白でもNullだと反応しないのでしょうか? (2)NullとEmptyの違いはなんですか? ご教授よろしくお願い致します。

  • VBA null判定

    Accessでテキストボックスの値をテーブルへ書き込むVBAを作成しているのですが、Null判定がうまくいきません。 ◎環境 OS:Windows7Pro Var:Access2010 DB:MySQL5.6 Private Sub cmdSubmit_Click() Dim Rst As DAO.Recordset Dim ErrT As String Set Rst = CurrentDb.OpenRecordset("m_plan", dbOpenDynaset) '各テキストボックス、Null判定 If IsNull(txtPid) Then MsgBox "プランID[" & txtPid & "]が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPName) Then MsgBox "プラン名が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPsdate) Then Me!txtPsdate = #01/01/2010# End If If IsNull(Me!txtPedate) Then Me!txtPedate = #01/01/2010# End If Debug.Print "プランID["; Me.txtPid & "]" Debug.Print "プラン名[" & Me!txtPName & "]" Debug.Print "開始日[" & Me!txtPsdate & "]" Debug.Print "終了日[" & Me!txtPedate & "]" ↑↑↑↑↑↑↑↑↑ ここで、Null判定を行ってますが、データがあるにも関わらず、処理が続行されたり、Null判定結果が起動するたびに変わります。 On Error GoTo err With Rst .MoveLast .AddNew .Fields("PlanID") = Me!txtPid .Fields("PlanName") = Me!txtPName .Fields("PlanSt") = CDate(Me!txtPsdate) .Fields("PlanEn") = CDate(Me!txtPedate) .Fields("P_Remaks") = Me!txtPbikou .Update End With Rst.Close Set Rst = Nothing err: MsgBox "DBエラー" Debug.Print Rst.Type Debug.Print err.Description Call txtCrer End Sub ただし、下記判定だけのボタンとプロシージャーでは、正常に判定されます。 判定だけの、プロシージャー 'Null判定テスト Private Sub cmdtest_Click() If IsNull(txtPid) Then Debug.Print "[" & txtPid & "]" & "Nullです。" Else Debug.Print "[" & txtPid & "]" & "Not Nullです。" End If If IsNull(txtPName) Then Debug.Print "[" & txtPName & "]" & "Nullです。" Else Debug.Print "[" & txtPName & "]" & "Not Nullです。" End If If IsNull(txtPsdate) Then Debug.Print "[" & txtPsdate & "]" & "Nullです。" Else Debug.Print "[" & txtPsdate & "]" & "Not Nullです。" End If Debug.Print "===============================" End Sub どこが間違っているかまったくわかりません、アドバイスを頂けましたら幸いです。

  • Nullについて

    こんばんは!よろしくお願いします。 新規に作成したフォームにコンボボックスを設置して Sub test1() If Form_フォーム1.コンボ0.Value = Null Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub Sub test2() If IsNull(Form_フォーム1.コンボ0.Value) = True Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub 上記2つのサンプルを実行した時に、 test1のほうだけ 実行時エラー94 Nullの使い方が不正です。 となります。 ウォッチウインドウで見ていくと、 「オブジェクト変数、またはwithブロック変数が設定されていません。」 となりますが 「If Form_フォーム1.コンボ0.Value = Null Then」 を通過したら Nullになります。 何が起こっているのでしょうか?

  • VBAで配列のNULL判定

    VBAで下記のように配列に設定したNULL値を判定しようとしました。 Dim str() ReDim Preserve str(2) str(0) = "aaa" str(1) = Null str(2) = "bbb" 以下(1)、(2)の分岐処理ではNullと判定されませんでした。 どのように判定すれば良いでしょうか? (1) If str(1) = Null Then Debug.Print "Null値です" End If (2) If str(1) = "" Then Debug.Print "Null値です" End If

  • ifステートメント notと!は同じ意味ですか?

    VBAのifステートメントで、notと!は同じ意味ですか? 「a」で始まらない。 と言う意味で、下記のコードを作ったのですが、どちらも思い通りの結果が得られます。 If "あabc" Like "[!a-z]*" Then Debug.Print "OK" End If If Not "あabc" Like "[a-z]*" Then Debug.Print "OK" End If End Sub ネットからのサンプルをコピペしたので、いまいち理解できてないのですが notと!は同じ意味ですか?

  • vbaにおいてセミコロン;はどういう意味ですか?

    Sub Sample() Debug.Print "OK"; End Sub を実行すると、OKが返るのですが、 このコードにおいて セミコロンは何の意味があるのですか? OK; になると思ってました。

  • エクセルvba 検索対象をシートではなく、ブック全

    このコードでシート内に検索文字があるかどうかを取得できるのですが 検索対象をシートではなく、ブック全体にするには どうすればいいでしょうか? Sub Sample() If Not Cells.Find(What:="test", LookAt:=xlPart) Is Nothing Then Debug.Print "あります" Else Debug.Print "ありません" End If End Sub

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • 2次配列について Null値?

    例えば、あるセル範囲(ここではA1:B3としておきます)に [ 1 ] [ 4 ] [ 2 ] [ 5 ] [ 3 ] [ ] というように数値が入力されているとします。 RefEdit1つと[実行]ボタン1つ、[キャンセル]ボタン1という簡単なユーザーフォームを作成して以下のようなコードを書きます。 ' 実行ボタンに登録したコード Private Sub CommandButton1_Click() Dim myRange As String Dim dat As Variant myRange = RefEdit1.Text dat = Range(myRange) '選択したセル範囲のデータをdatに代入 Unload UserForm1 'ユーザーフォームの終了 End Sub ' キャンセルボタンに登録したコード Private Sub CommandButton2_Click() Unload UserForm1 'ユーザーフォームの終了 End Sub それで質問なのですが、この場合、dat(3,2)には何が入っていることになっているのでしょうか。Null値なるものが代入されているのでしょうか、、、 最終的にデータ行列において、各列のデータ数を取得したいのですがどうすればよいでしょうか。1列目=3、2列目=2といったように。 もしNull値?が代入されていることになっており、2次配列においてNull値を判断する関数でもあればそれをカウントして、列数-Nullの数で取得できるだろうと考えてはいるのですが。

  • 引数 compareについて

    エクセルで Sub sample() Debug.Print InStr(1, "abcde", "C", vbTextCompare) End Sub このコードを実行する際、vbTextCompareはどういう役目を果たしてるのでしょうか? Sub sample() Debug.Print InStr(1, "abcde", "C") End Sub や Sub sample() Debug.Print InStr(1, "abcde", "C", vbBinaryCompare) End Sub にすると0が返りますが、 なぜ0が返るのかわかりません。 ヘルプを読むと、vbTextCompareは 「テキスト モードの比較を行います。」と書いてありますが、それがどういう意味なのか分かりません。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbDatabaseCompare) End Sub にすると、エクセルで実行しているからかエラーになりました。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbUseCompareOption) End Sub これだと、コンパイルエラーになりました。

専門家に質問してみよう