• 締切済み

Excel VBAの変数の値全体を表示するには

Excel2010 VBAでデバックしていますが ブレーク時に変数の値を確認する時 カーソルを合わせても値の全体が表示されないため ウォッチ式に追加して確認すると 値が途中で切れて表示されます。 251文字までしか表示されないのでしょうか。 すべて表示することはできないでしょうか。

みんなの回答

回答No.5

すいません、回答ではありません。 なんというか、半ば愚痴です(笑)。 私は変数で・・というか、エクセルでそこまで長い文字列を 扱うことが無かったので、全くの盲点ではありました。  ※まぁ、文書作成ソフトではないですし。と言い訳。 少し考えてみたのですが、 やはりウォッチ式にMID関数で区切って登録、 が善手なのではないかなぁ、と思います。 「最」善手は他にあるような気がしますが、 思いつきませんので悪しからずです。 その他、既出ではありますが、 変数の内容を確認したいのならイミディエイトウインドウに表示、 文字数を数えるのが目的なら、 任意のセルに書き出してLEN関数でカウント、 あるいはウォッチ式にLEN(変数)でもやりやすいかと。 そんな気がします。 以下、余談。 そもそも、2003まではセルの幅に255文字分、 セルに格納できる文字数は32767文字、 セル上の表示は1024文字、という制限がありました。  ※すべて1バイト文字換算 この「格納されているけど表示できない」と同じことがVBAでも起こり、 それが未だに続いてる・・という、勝手な憶測をしています。 それを解除できる設定やツールが見当たらないことを考えると (私が見つけられないだけかもしれませんが)、 需要があまりないのかなぁ、というところなのだと思います。 前述の通り、軽い手間ではありますが、 MID関数などの対策で充分である、と考える人の方が多いのでしょう。 多数派に従え、という意味ではありません。 ただなんとなく、探す時間があるのなら、自力で作るか、 出来る範囲で対応できないかを検討すべきなのだろうなぁ、と思います。 手間を軽減するのがマクロの目的です。 が、そのマクロを作るときは少々手間をかけてでも 納得いく使いやすい応用しやすいものを作りたいなぁ。 と考える今日この頃です。

yam2012
質問者

お礼

>私は変数で・・というか、エクセルでそこまで長い文字列を >扱うことが無かったので、全くの盲点ではありました。 別の人が作ったプログラムをデバッグしていますが 長い文字列だなと感じています。 >そもそも、2003まではセルの幅に255文字分、 >セルに格納できる文字数は32767文字、 >セル上の表示は1024文字、という制限がありました。 >この「格納されているけど表示できない」と >同じことがVBAでも起こり、 >それが未だに続いてる・・という、勝手な憶測をしています。 従来の仕様のままになっているので このようになっているように思います。 (マイクロソフトに早く直してほしい) >ただなんとなく、探す時間があるのなら、自力で作るか、 >出来る範囲で対応できないかを検討すべきなのだろうなぁ、と思います。 方法はよく分かりませんが、 カーソル位置のコードの変数の値を クリップボードにコピーすることでも 自分で作成ができればいいなと思います。 ありがとうございました。

回答No.4

> 「プログラムを挿入して表示させる方法ではなく >  ツールの機能として」 めんどくさいですが、ウォッチ式に、 mid(myStr,1,250) mid(myStr,251,250) mid(myStr,501,250) mid(myStr,751,250) と、250文字ずつ表示とか。

yam2012
質問者

お礼

251文字を超える場合だけでなく 251文字以下の文字列でも長い文字列は ウォッチウインドウでは列幅を調整しないと 全体が確認できなかったので これは使えると思います。 ありがとうございました。

回答No.3

ウォッチウィンドウでは字が小さくてめんどくさいので数えてませんが・・ たしかに   Dim myStr As String   For i = 1 To 257     myStr = myStr & (i Mod 10)   Next   myNo = Len(myStr) なんかを動かして、 エクセルに貼り付けてワークシート関数LENで数えると250文字でした。 まぁ、先頭に”があるから251文字、とも言えますが。 myNoには257が代入されていますね。 で、このmyStrをVBAからワークシートのセルに書き込んでみると、 ちゃんと257文字ありました。 なるほど、ちょっとおかしな感じです。 で、   myStr = myStr & StrConv((i Mod 10), vbWide) として、全角文字のみを重ねてみました。 で、動かして、ウォッチウインドウでコピーしてエクセルに貼り付け。 ワークシート関数のLENで確認できたのは127文字でした。 でも、VBA側のLEN(myNo)では257文字、数えてます。 ワークシートに書き込んでみると、こちらもやはり257文字ありました。 変数をVariant型で宣言しても結果は同じでした。 さすがにこの桁数の「数値」はあり得ないので、テストしていません。 推論ではありますが、 VBAのウォッチウインドウでは0~255バイトしか扱えない、 つまり、「仕様上の表示限界」なのかもしれませんね。 面白いですね。 > すべて表示することはできないでしょうか。 「仕様上の限界」なのだとすると、表示するのは難しそうです。 イミディエイトウインドウで確認するか、 ワークシートに出して確認するか、 どちらかなんだろうなぁ。とおもいます。  なお、「文字列型(String)には約20億文字入る」とか言われているようです。 当然ながら、検証したいとは思いません。 ・・・というか、私のパソコンではそんな文字数は扱えないかもしれません。 ・・・蛇足でした。

yam2012
質問者

お礼

251文字制限をなくす設定はないということですね。 ありがとうございました。

回答No.2

Debug.Print hensu でイミディエイトウィンドウに表示するとか。 1000文字くらいは問題なさそうでした。

yam2012
質問者

お礼

回答をいただいて気付いたのですが質問に 「プログラムを挿入して表示させる方法ではなく  ツールの機能として」 と一言付け加えておくべきでした。 設定で251文字の制限をなくす方法やアドインなどで できないでしょうか。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

どうせ、文字列でしょ。 Sub test02() Worksheets("Sheet1").Cells(1, "A").Value = String$(1200, "あ") x = Cells(1, "A") MsgBox Mid(x, 1, 300) MsgBox Mid(x, 301, 300) MsgBox Mid(x, 601, 300) MsgBox Mid(x, 901, 300) MsgBox Mid(x, 1201, 300) End Sub これはセルの値のばあいの例だが、それ以外の変数状態でもも、 こういう方法で確認できるのでは。 見やすいように、区切りや、参考文字を付加するとかすれば工夫ができる。 沢山の変数を対象にするには、画面表示の確認は面倒くさいが、そういうことも質問に書いてないね。 一時的な、例外の確認でしょ。なぜこんなことを質問で聞くのかよくわからない。 最大長は、見積もって何文字ぐらいかも質問には書くのが常識でしょう。

yam2012
質問者

お礼

>なぜこんなことを質問で聞くのかよくわからない 251文字までしか表示されないことを知らなかったため 文字列が欠ける原因がプログラムにあると勘違いして デバッグしていたため (プログラムを挿入して表示させる方法ではなく) ・251文字制限を解除する設定 ・アドインなどで251文字制限をなくす方法 などがあれば教えて欲しかったというのが質問の意図です。

関連するQ&A

  • 【デバッグ】変数の値が変わるとブレーク、ある値になったときにブレーク

    VC++2005で、ウオッチウインドウに変数を表示させる方法はわかりますが、ある変数の値が変わったりとか、ある値になったときにブレークする機能ってあるのでしょうか? ※昔、何かの開発ツールでそのような機能を見たことがあったので・・・

  • VBAの変数をエクセルで表示

    VBAで Dim num as Integer num = 1 のプログラムがあるとします。 このnumの変数をエクセルのセルで表示させたいのですが可能でしょうか? (例) セル(A,1)に変数numの値を表示させたいのですが、 数式バーに =num と入力してもうまく表示されません。 無理なのでしょうか?

  • vb2005からExcelの変数に値をセット

    vb2005、WindowsXP、Excel2000で開発しています。 vb2005にて、Excel内にコーディングしてあるVBAの変数に値をセットする ことは可能なのでしょうか。 Excel4MacroSheets.Applicationとかそうかなと思ったのですが行き詰って しまいました。 どなたかご存知の方がいらっしゃいましたら教えて下さい。 宜しくお願いします。

  • EXCEL2003 VBAでプログラミングをしています。

    EXCEL2003 VBAでプログラミングをしています。 その際にセルの値をString型変数に代入すると"「「「"みたいな謎の記号が付加されてしまいます。 デバッグ中にその変数にカーソルを当てたと時にだけ表示され、 イミディエイトウィンドウでその変数を?Str~で表示させてみても可視できません。(謎の記号のスペースは存在する) Len関数を使用してみるとちょうどその謎の文字列が追加された値が出てきます。 入力元のセルを参照しても無駄なスペースはありませんでした。 こいつの正体がわかる方いれば教えていただきたいです。 ※Trim関数でも除去できませんでした。

  • VBAで変数に改行を格納した場合

    セルA1に あああ いいい と入れて、 VBAで Dim str As String str = Range("a1") と言うコードを記述して、ステップモードでstrにカーソルを充てると あああいいい と、変数が格納されるのですが、 変数の値は改行されては表示されないのですか? うぃっちウインドウで監視すると、若干空白があるように感じます。 でも私はよくF8で変数にカーソルを充てて今の値を見るのですが 変数に改行があるかどうかは、この方法ではわからないということですか?

  • 変数の値の確認方法について

    Visual Studio 2010 Express WIN32 ユニコードビルド C言語 でプログラムを勉強中なのですがデバッグ中の変数の値の確認の仕方でわからないことがあります。 下のようなプログラムを作りx=HIWORD(lParam)*2;の次の行にブレークポイントを設定しました。 この式に*2がなければxを確認すればすむ話なのですが右辺に複数の値がある場合はHIWORD(lParam)の値が確認できません。 ブレークポイントで止まった時に(lParam)の上にカーソルを移動すると32637974と表示されxの上では996と表示されました。 たぶん右側はlParamの上位ワードを取り出す前の値が表示されているのだと思います。 HIWORD(lParam)の値を事前に変数に代入していない状態で、デバッグ中に上位ワード取り出し後のlParamの値を確認する方法がありましたら教えてください。(例えばxが496でHIWORD(lParam)が32506902と表示される場合に、右のHIWORD(lParam)の上にマウスを移動すると496と表示されるようにする方法) LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static int x; switch(message){ case WM_CREATE: break; case WM_SIZE: x=HIWORD(lParam)*2; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }

  • VBAで変数の値をセルに表示させる

    VBAで変数の値をセルに表示させる プログラム初級者です。 配列変数を使わずに 例えば、変数a1,a2・・・a10 の10個の変数を使ってセルにその値を表示する場合に a1,a2・・・a10をfor next を使って、省略化するにはどうすればよいでしょうか? 具体的には例えば、(私が書いたのは) Sub aaa() Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 as Integer Dim i as Integer a1=1 a2=2 a3=3 a4=4 a5=5 a6=6 a7=7 a8=8 a9=9 a10=10 For i = 1 to 10 ax= "a" & str(i) Cells(i, 1).value = ax Next End sub() 結果は a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 と表示されました。 a1と文字列をとってそれを変数と見なしさらにその変数の値を表示させたいのです。 ちなみにaxの値はa 1 とaと1の間に半角スペースが入ってしまいます。 どうすればいいか行き詰まっています。 解決方法はあるでしょうか?

  • EXCEL2010 VBA 変数への代入

    EXCEL2010のVBAを使用しています。 処理で繰り返しの処理があります。 繰り返しのたびに変数Aに変数A+セルの番地(A1等)を代入していきたいのですがうまくいきませんどうすればよいでしょうか? 説明が下手ですみません。 ようするに変数の中の値を上書きせずに、現在の値を後ろに追加したいということです。 (例) 変数Bは最初は「1」 繰り返し1回目  変数A =変数A&Cells(1,変数B)   ’変数Bは繰り返しのたびに1ずつ増えます 繰り返し2回目  変数A =変数A&Cells(1,変数B) 一回目は変数AにはA1が入る 2回目の処理時にはA1B1というふうになり、上書きされず追加で代入される。 というようなイメージです。

  • Excel VBA の自動データヒント

    こんばんは。 Excel VBAを使用していますが、ここ最近、マクロ中断中に変数にカーソルを合わせると値が表示される機能(自動データヒント?)の表示が遅くなってしまいました。 ポイントしたままずーっと待っていると、1、2分後に表示されるのですが、待ちきれないです>< PCの容量の問題かと思いましたが、ディスクは半分以上空いてました。 どなたか良い対処方法をご存知でしたら、教えてください。 よろしくお願いいたします。 WinXP、Excel2000です。

  • 静的変数の現在溜まってる値を知る方法

    Sub 静的変数() Static x As Long x = x + 10 MsgBox x End Sub このプロシージャーを実行するとXの値がどんどん加算されていきますが マクロを実行してない時にxの値を取得する方法はありますか? スッテプインやウォッチウインドウで確認すれば、マクロ実行中にxの値を確認できますが マクロを実行してない時に調べる方法があれば教えてください。 ちなみにウォッチウインドウで見てみると 値は<対象範囲外> 型はEmptyとなります。 (もしマクロを実行してなきゃわからないというのであればそれでも大丈夫です)

専門家に質問してみよう