Excel2007VBAウォッチ式の結果の原因は?

このQ&Aのポイント
  • Excel2007VBAのウォッチ式で、自作と参考書例の結果が異なる原因について知りたい。
  • ウォッチ式の追加で入力した内容と、実際の結果が異なる問題について考えている。
  • 参考書通りにウォッチ式を設定したが、結果が予想と異なる理由を教えてほしい。
回答を見る
  • ベストアンサー

Excel2007VBAウォッチ式の結果について

●質問の主旨 ウォッチ式の「値」と「型」が、自分で作成した場合と参考書例が異なるのは、 どんな原因が考えられるでしょうか?ご存知の方ご教示願います。 ●質問の補足 下記のコードでウォッチウィンドウの操作の学習を行っています。 「ウォッチ式の追加」には以下の通り、入力しています。 ・式 i=3 ・対象 (プロシージャ)lesson3 (モジュール) Module1 ・ウォッチの種類 式がTrueのときに中断 ところがこの状態でマクロを実行し、ウォッチウィンドウを見ると 自分で作成した場合と、参考書例とで「値」と「型」の結果が異なります。 参考書通りにやっているつもりですが、なぜ結果が異なるのか さっぱり分かりません。 (自分) 値→対象範囲外 型→Empty (参考書) 値→True 型→Boolean ●コード Option Explicit Sub lesson3() Dim i As Long For i = 1 To 3 Cells(i, 1) = Worksheets(i).Name Next MsgBox "終了しました" End Sub

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

エクセル2007ですが、ウォッチウィンドウは参考書と同一、その他は以下の通りです。 ■マクロ内でブレイク ■シート1のA列にはシート2まで表示 ご質問者の結果からは別のマクロを起動している事は無いでしょうか。 (要はウォッチ対象のマクロを起動していない様に思える) 因みにシート1のA列やマクロ内でのブレーク有無は上記の通りでしょうか?

dradra33
質問者

お礼

mu2011様 いつもご回答ありがとうございます >(要はウォッチ対象のマクロを起動していない様に思える) 上記のアドバイスの通りでした。私はマクロを 実行していませんでした。 「ウォッチ式の追加」の画面で「OK」ボタンを押せば、 「値」と「型」の結果が出るものとばかり思っていました。

その他の回答 (1)

  • spar
  • ベストアンサー率46% (35/75)
回答No.1

こんにちは (自分) 値→対象範囲外 型→Empty と結果が出るのはコードが最後まで実行されたからではないですかね 【・ウォッチの種類 式がTrueのときに中断】 がウォッチ式の編集を見て選択されているか確認してもらって、それでもダメなら next にブレークポイントを設定してみますか(茶色い●がつく) ツールバーのデバッグのステップインを使って式の結果を追いかけてみれば何か分るはずです その際はウォッチ式に i も追加しておけばいいと思います 私のEXCEL2003では参考書通りの結果が出ましたよ

dradra33
質問者

お礼

spar様 ご回答ありがとうございます。 >コードが最後まで実行されたからではないですかね おっしゃるようにマクロの実行ボタンを押さずにいてました。 マクロを実行すると、 値→True 型→Boolean がそれぞれでてきました。

関連するQ&A

  • ウォッチ式について

     お世話になります。VB2005Expressです。  あるプロジェクトが、a.vb及びb.vbから構成されています。  a.vbの中身は、 Option Explicit On Option Strict Off Public Class a Public c As String End Class となっています。  これを、b.vb上で、 Module b Public Sub test() Dim t As String t = a.c End Sub End Module としているのですが、これはこれで期待通りの動作をしています。(cが"123"なら、tも"123"になる)  さて、デバッグのステップイン等を使う際に、test()中のコードを追いかけている時で、tの値を知りたい場合はウォッチ式に"t"を与えれば良いのですが、cの値を知りたい場合はウォッチ式に何を与えれば良いのでしょうか。  "c"だと、「名前cは宣言されていない」というエラーが出ます。  "a.c"だと、「非共有メンバを参照するには、オブジェクト参照が必要です」というエラーが出ます。

  • EXCEL2007 VBA IF文について

    プログラム If Sheets("sheet1").Cells(85, 1).Value = Cells(13, 1).Value Then msgBox "true" Else msgBox"false" End If 値 Sheets("sheet1").Cells(85, 1).Value ← 0.38125 Cells(13, 1).Value ← 0.38125 上記のプログラムと値のとき、結果はtrueが表示されると思うのですが、なぜかfalseが表示されてしまいます。なぜ、falseが表示されるのか解りましたら教えてください。 値はウォッチで確認しています。

  • VBA EXCEL optionbuttonの選択

    現在オプションボタンにて設定下記のようにしています。 オプションボタンをいくつか設置しており、どれか選択すると下記のコードへ飛んできます。 どれか選択すると、enabledをtrueにし、OKボタンをクリックできる。そしてどのオプション ボタンを選択したのか他のモジュールから確認する為tagにその痕跡を残すように設定しています。 Public Sub OptionButton1_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton1.Tag = True End Sub Public Sub OptionButton2_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton2.Tag = True End Sub Public Sub OptionButton3_Click() 'オプションボタン選択動作。OKボタンを有効へ Cmd_ok.Enabled = True OptionButton3.Tag = True End Sub ****************** そして下記のコードでどのオプションボタンが選択されたのか確認しています。 For i = 1 To 3 If UserForm1.Controls("OptionButton" & i).Tag = True Then xxx = i End If Next i ******************** 一番上にある『OptionButton1.Tag = True』と設定しているものを選択されたオプションボタン からみて相対的な表現に変更できないでしょうか? 意味としては『現在選択されているオプションボタンのtag = true』といった表現です。 現状でも目的は果たせますが、これからボタンが複数になった場合、オプションボタンのオブジェクト名を変更しなくなった時に手間がしないようにする事が目的です。 もしくはもっとスマートなコードがあれば歓迎です。 ご指導お願いします。

  • Excel2007VBA「区」のところで改行したい

    ●質問の主旨 エクセルワークシートのB列にある任意の住所をD列に転記します。 転記の際に「区」のところで改行したいと思いますが、 自作のコードではその通りになりません。 どのように書き換えたら良いでしょうか? ご存知の方、ご教示願います。 ●質問の補足 1.「住所1」には必ず「区」の文字が入ります 2.Mid関数の第2引数にInStr(Cells(i, 2), "区")を 使っていますが、この引数に何を使えば良いのかが分かりません。 3.添付の画像は自作のコードを使った結果、 作成された住所で、意図通りの改行はできていません。 ●コード Sub Macro1() Dim i As Integer For i = 2 To 6 Cells(i, 4) = Left(Cells(i, 2), InStr(Cells(i, 2), "区")) _ & Chr(10) & Mid(Cells(i, 2), InStr(Cells(i, 2), "区")) Next i End Sub

  • excel/vba/public変数

    excel VBAで下記のようなコードを書きました。 他のプロシージャでも共通の変数を使用したいと思っています。 その為、public変数を宣言して使用したいと設定しましたが。 うまくいきません。 testmainを実行し、iに何も入っていないことを確認しました。 その後『1』を代入し、testmainは終了します。 testsubをその後実行し、iに先ほど代入された値を確認しようとしても何も代入されていない状態です。 全プロシージャでその変数を使用したいと思っているのですが、 何か方法、もしくはこのような使用方法ではないのでしょうか? public変数を使用してもプロシージャが終了すれば変数はクリアされるのでしょうか? 構造化の方法の問題上参照渡しや、戻り値など、指定する方が複雑になっていきます。 ご指導よろしくおねがいします。 Public i As Variant Sub testmain() MsgBox test i = 1 End Sub Sub testsub() MsgBox i End Sub

  • DATE型だと思っていたのですがVariant型で

    DATE型だと思っていたのですがVariant型でもあるのですか? VBAのデータ型について質問です。 Sub test() MsgBox Date End Sub とコードを記述し、 Dateの部分を選択して、ウォッチ式に追加しました。 F8で、ステップインしながらウォッチ式の「型」を見ていると、 Variant/Date となっています。 DATE型だと思っていたのですがVariant型でもあるのですか?

  • VBA教えて下さい

    VBAのコード考えましたが上手くできません まず、例として ファイル名を 試験1 試験2の2つのエクセルのファイルがあります やりたい事 セルを1つ1つ調べる 試験1のファイル(今開いてるシート) のD1~D20セルのどれかのセルが何か入力されているならば 試験2のファイル(今開いてるシート) のB1~B20セルのどれかのセルをクリアする(例えばD5セルに値が入ってればB5セルをクリアすると言う内容です) をしたいです 考えたコードを書きます sub test() dim a as variant dim i as variant set a = workbooks("試験2").activesheet with workbooks("試験1").activesheet for i = 1 to 20 if cells(i,"D") <> "" then cells(i,a).clear end if next i end with end sub これでは上手く結果がでませんでした 勉強不足ですみませんm(__)m 宜しければコードを書いてくれると助かります 回答お願いします

  • EXCEL_VBAのコードのコード修正

    EXCEL_VBAのコードのコード修正での質問です。 現在以下のコードを利用しています。 (ほぼネットからの入手したコードで    私は、マクロに関しては初心者レベル以下です。) 変更したいのは、名前変更対象の列を現在E列固定なのを  名前変更対象列をマクロ途中で指定できるようにしたいのです。  つまり、イメージとしては    処理途中でダイアログが表示されて処理対象列を指定して    処理を開始するような。。。        現在、E,F,G列が候補となりますが将来増加する予定です。 どのようなにコードを追加すれば良いでしょうか ?    --------------------------------------- Sub フォルダー名の変更() ' Name "C:\Users\tmp.txt" As "C:\Users\tmp\tmp.txt"  ←移動となる。 ' B列現在のフォルダー名 C列=新しいフォルダー名(入力要) ' OKキャンセルボタンとデフォルトアクティブボタンの設定は数値の加算で行う。 '   1              第2ボタン256 = 1+256 = 257 Dim i As Long Dim atai As String   '処理列選択コード挿入予定 ------- ? atai = MsgBox("B列フォルダー名E列フォルダー名に変更されます!" & vbCrLf _ & "B,E列に値がなければ、処理は行いません。", 257, "フォルダー名変更") If atai = vbCancel Then Exit Sub i = 4 'subフォルダ名取得が4行目からフォルダー名を表示するため。 Do While Range("b" & i).Text <> "" If Range("E" & i).Text <> "" Then ' 新ファイル名がある場合のみ、名前変更を行う。 Name Range("a2").Text & Range("b" & i).Text As Range("a2").Text & Range("E" & i).Text End If i = i + 1 Loop End Sub

  • VBAで列全てに式を入れたいんです。

    エクセルで 例えばセルA1,B1,C1を選択して 3つのセルの値をD1に値としてコピーする事は出来ませんか? A1,B1,C1はVBAで得た値です。 関数で1つにすると、もう一度コピーして値として 貼り付けなけねばなりませんので・・・ VBAは他の方に作成して頂いたので、 知識としてはありません。 VBAでの追加の仕方があればお教え下さい。 下記の回答を頂きまして 上手くいったのですが、 その式を、列全てで行うのはどうすればいいのでしょうか? 「 次のコードをEnd Subの上の行に挿入してください With Sheets("シート名") .Range("D1") = .Range("A1") & .Range("B1") & .Range("C1") End with 」 すみません。誰かお教え下さい。

  • Excel VBA で処理中断(DoEvents)ができなくて困ってい

    Excel VBA で処理中断(DoEvents)ができなくて困っています。 まず、CommandButton1ボタンでSampleをコールし、Sample処理の中でループを廻し、途中でCommand1ボタンをクリックして、処理中断(DoEventsによって)をいれたいと思っています。 しかし、Command1ボタンをクリックしても処理中断がきかないのです。 グローバル変数fStopにはCommand1ボタンをクリックしたときにTrueが入っていることは、MsgBoxで確認していますが、Sample処理の方に値がつたわっていないようで、ループが最後まで止まりません。 コードが悪いのでしょうか、それとも、DoEventsの使い方が悪いのでしょうか。 もし、DoEventsが使えないのであれば、代替手段はありますでしょうか。 (長時間の印刷中の処理中断に応用したいと思っています) 環境はExcel 2002 SP3 , VB 6.0 , Windows XPです。 なお、DoEventsのコードは以下のURLを参考にして作成しました。 http://officetanaka.net/excel/vba/function/DoEvents.htm コードは以下のとおりです。 '********* Dim fStop As Boolean 'グローバル変数を宣言 '********* Sub Sample() Dim i As Long fStop = False For i = 1 To 1000000 DoEvents If fStop = True Then MsgBox "処理が中断されました" Exit For End If Next i End Sub '******** Private Sub CommandButton1_Click() Call Sample End Sub '******** Private Sub Command1_Click() fStop = True MsgBox "fStop=" & fStop End Sub