MSFlexGridの列をFormatするには

解決


mishin  2004-03-24 18:59:56  No: 112499

教えて下さい
MSFlexGridでエクセルを読み込んでます。エクセルでの各セルの表示は、少数点
以下2位まで表示されてますが、MSFlexGridで表示すると例えば12.34はそのまま
表示されますが 56.00は 56で表示されます。これはformatで表示すればいいのは
分かるのですがコードの一部が分かりません。過去ログより
   With MSFlexGrid1
       For i = 1 To .Cols - 1
            .TextMatrix(i, 4) = Format$(x, "#,##0.00")
       Next
    End With
上の xの所には変数を入れるとは思うのですが、MSFlexGridの4列目の小数点の
表示をそろえるにはどうすればいいのでしょうか?
VB6 win2000です


特攻隊長まるるう  2004-03-24 19:49:37  No: 112500

Cols プロパティをヘルプで勉強すれば分かると思います。
ついでに TextMatrix の引数2つについても調べてください。


mishin  2004-03-24 20:27:06  No: 112501

ありがとうございます。頑張ります!


特攻隊長まるるう  2004-03-24 20:48:28  No: 112502

プロパティとメソッドの内容が理解できれば
コードの修正は10秒くらいで終わってしまうので
できたらソースコード載せてくださいね(^^)


mishin  2004-03-26 04:13:46  No: 112503

特攻隊長まるるう様
ここまでは理解できましたが、構文がおかしいでしょうか?
With MSFlexGrid1
    Dim mycols As String
        For i = 1 To .Rows - 1
          mycols = MSFlexGrid1.TextMatrix(i, 4)
             .TextMatrix(i, 3) = Format$(mycols, "#,##0.00")
        Next
End With


特攻隊長まるるう  2004-03-26 04:49:53  No: 112504

mishin さんの思った通りの動作が確認できること。
それが一番です。4行目の値を書式設定して3行目に
表示したんですね?。よく出来てるのではないでしょうか?。

では少しだけ改良します。
せっかく With を使ったのですからこうでしょうか?
>  mycols = MSFlexGrid1.TextMatrix(i, 4)
   mycols = .TextMatrix(i, 4)

更に i = i + 1 というプログラムを書いたことがありますか?
mycols は必要ないですね。

    With MSFlexGrid1
        For i = 1 To .Rows - 1
            .TextMatrix(i, 3) = Format$(.TextMatrix(i, 4), "#,##0.00")
        Next
    End With


mishin  2004-03-26 06:00:04  No: 112505

まるるう様、ありがとうございます。
> 4行目の値を書式設定して3行目に表示したんですね?
で気が付きました。とんでもないことをしてました。単にエクセルの
4列目(D列)の表示を小数点以下2位で揃えて表示をしたかったので
表示結果だけ見て喜んでました。確かに言われた通りでした。
もう一度やり直します。


mishin  2004-03-26 06:39:44  No: 112506

まるるう様、できました!
    With MSFlexGrid1
       For i = 1 To .Rows - 1
          .TextMatrix(i, 4) = Format$(.TextMatrix(i, 4), "#,##0.00")
       Next
    End With

重ねて質問して申し訳ないのですが、このままエクセルが 10,000行とかに
なった場合に Rows の値は最初から 20000 とかに設定しても良いのですか?


特攻隊長まるるう  2004-03-26 21:58:49  No: 112507

…えっと(汗)…プログラムというのは今までに無いものを作り出す作業です。
学校の問題のように答えが用意されているものではありません。それはプログラマ
のレベルとは関係ありません。初心者でも上級者でも同じです。実際に動かして
みないと分からないことがたくさんあります。そしてなぜ動かないか?その原因を
調べること、そして動くように工夫すること。それもプログラミングの一部です。
悩む前に実際に試してください。失敗でも経験した方がいいのです。

動かなくなる原因は1つで無い場合が多いです。更に実行環境によっても変わります。
ボクのパソコンでは動いても mishin さんのパソコンで動かないことがあるんです。
>Rows の値は最初から 20000 とかに設定しても良いのですか?
その質問に本当に答えられるのは mishin さん自身でしか有り得ないんです。
答えを出すのが自分だということをハッキリ知っておいて下さい。

その上で参考になることはカキコしましょう。
…ただ、ボクがこの掲示板で質問に答えるのは…ただ助けたいからではありません。
ボランティアではないんです。ちゃんと利益があります。それは質問者、そして
回答者の技術を盗むこと。そして回答することで自分の技術を高めることです。
ぶっちゃけ回答してる内容の6割くらいはやったこと無いことだったり…w。その場で
調べるんです。…3割くらいはどっかに答えが載ってます。しかも30分以内に
見つかります。…5割くらいは実際にやってみれば答えが見つかります。…2時間
くらいです。自称初心者でも倍の時間は必要としないでしょう。そのレベルの質問は
自分で解いたほうが早く上達するでしょうね?。まぁ、ここで質問してくれればボクの
技術が上がったりもしますが…。残り2割は宝物です。たとえ回答がカキコまれなくても
今後覚えていれば、他の作業中に答えが見つかるかもしれません。まだ知られていない
新しい技法…それはプログラマの武器となります。mishin さんがそんな質問をして
くれるまで成長することを期待しています。ま、そのレベルになると他の掲示板に
行くかもしれませんが。カキコはしないけど色々見てるのでだいじょぶw。

さて、パソコンは有限なメモリを使って動いています。必ず限界はあります。
(過去ログを『限界』『仕様』などで検索…)

・まず、はっきりと限界が決められている場合、分かりやすいです。仕様というやつです。
エラーが出ます。分かりやすいです。
Dim i As integer
i = 35000
理由は説明しません。エクセルワークシートは…65,536 行、256 列です。ヘルプに
書いてあります。そーいった制限に引っかかると動かないです。大抵、分かりやすい
エラーが出ます。エラーメッセージを覚えておきましょう。
・次に、理論上はOKでも動かすとダメ。大抵、固まります。時間が掛かるだけかも
しれません。初回は30秒くらいは待ってみましょう。MSFlexGrid だとどうでしょうね?
例えば、データは表示させず、
    With MSFlexGrid1
        .Cols = 256
        .Rows = 10000
    End With
で動かしてみましょう…すべて空白のセルです。問題ないですか?
        .Rows = 20000
ではどうですか?…増やしていってみてください。
遅くなりましたか?。ホームページで重たい画像ってありますよね?情報が多いから
です。画面に表示する情報(MSFlexGrid の場合セルの数)が増えれば遅くなります。
処理が増えれば重くなります。セルを1個所修正で30秒…また修正で30秒…ひどい時
には固まって再起動…では使えません。
・最後にそれ以外のエラー。デバッグしないと分かりません。
原因は色々です。VBとかWindows自体のバグとかまであったりしますが…9割は
プログラムミスです。
>> 4行目の値を書式設定して3行目に表示したんですね?
>で気が付きました。とんでもないことをしてました。
そんなミスが無いか?まず、チェックしましょう。
…そんなミスを質問しちゃうと恥ずかしい思いをします。

以上を意識しながら実行してみて下さい。


mishin  2004-03-26 23:52:11  No: 112508

まるるう様、貴重な意見をありがとうございました。
これからどんな気持ちで取り組めば良いか、とても参考になりました。
まるるう様クラスの方でも日々自分の技術を高める為に努力してる事も
よく分かりました。プログラムには答えが用意されてないというのは
とてもショックでした。でも、それが最終的にはレベルというものに繋がる
んですね。今日のレスは私にとって宝物となりました。この気持ちを
いつまでも忘れずに頑張ります。ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加