• 締切済み

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/17069)
回答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