[リストへもどる]
一括表示

投稿時間:2004/04/30(Fri) 01:28
投稿者名:初心者です。
Eメール:
URL :
タイトル:
MSFlexGridの使い方で…。
MSFlexGridに表示させた表の数値(たとえば売上表とか)
の各セル値を取り出して、100以上なら赤色の文字で表示するとか
50以下なら青色で表示するという具合にしたいのですが、
どう操作してよいかわかりません。また、VB6を使っているのですが
上記のような処理はできるのでしょうか?
わかる方、どなたかお願い致します。

投稿時間:2004/04/30(Fri) 05:51
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: MSFlexGridの使い方で…。
> MSFlexGridに表示させた表の数値(たとえば売上表とか)
> の各セル値を取り出して、100以上なら赤色の文字で表示するとか
> 50以下なら青色で表示するという具合にしたいのですが、

この掲示板で書き込む前には少なくても「MSFlexGrid関係」に
目を通してからにしましょう。
例え目的そのもののコードが無かったとしても個々のコード
「各セル値を取り出して」や「100以上なら赤色の文字で表示する」とかは
分かるはずです。
「MSFlexGridの主要プロパティ一覧表」を見るだけでも答えがあるでしょう。

その上でまだ分からない様なら、どのサンプルのどこがどの様に
分からないかを具体的に書くようにしましょう。

投稿時間:2004/04/30(Fri) 10:06
投稿者名:初心者です。
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの使い方で…。
はい、わかりました。
もう一度、目を通して考えてみます。
ありがとうございます。

投稿時間:2004/04/30(Fri) 13:06
投稿者名:除菌ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGridの使い方で…。
IF文で条件を設定して、
CellForeColor=vbRed
みたいにしたらどうでしょうか?


簡単なサンプルです。

値が100未満は黒字
値が100以上150未満は赤字
値が150以上は緑字にするです。

______________________________________________________________

Private Sub Form_Load()
Dim i As Integer
Dim Atai As Integer

i = 1
Atai = 50


With MSFlexGrid1
.Col = 1
.Row = 0
.CellAlignment = flexAlignCenterCenter
.Text = "適当な値"
.ColWidth(1) = 2000

    Do
        .Row = i
        .CellAlignment = flexAlignCenterCenter
        .Text = Atai
        
        
        If Atai >= 100 And Atai < 150 Then
            .CellForeColor = vbRed
        ElseIf Atai >= 150 Then
            .CellForeColor = vbGreen
        End If
        
        .Rows = .Rows + 1
        
        i = i + 1
        Atai = Atai + 10
        
        
    Loop While (i < 20)
.Col = 0
.Row = 0

End With

End Sub
______________________________________________________________

投稿時間:2004/05/01(Sat) 15:20
投稿者名:初心者です。
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの使い方で…。
ご親切にご指導ありがとうございます。

Dim x As Integer 'Row
Dim y As Integer 'Col
Dim a As Integer 'セルのデータ

With MSFlexGrid1

For x = 1 To 4
For y = 1 To 5
  .TextMatrix(x, y) = a
Next
Next
If a <= 35 Then
.CellForeColor = vbRed
End If

自分なりに考えて、このような方法で
できないものかと考えましたが、表示ができません。
どこがいけないのか、教えていただければうれしいです。
よろしくお願いします。

投稿時間:2004/05/02(Sun) 01:02
投稿者名:除菌ちゃん
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの使い方で…。
> Dim x As Integer 'Row
> Dim y As Integer 'Col
> Dim a As Integer 'セルのデータ
>
> With MSFlexGrid1
>
> For x = 1 To 4
>  For y = 1 To 5

      a=.TextMatrix(x, y)

      If a <= 35 Then
         .Row=x
         .Col=y
         .CellForeColor = vbRed
      End If

>  Next
> Next

上のように変更して見て下さい。。

投稿時間:2004/05/02(Sun) 09:42
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの使い方で…。
すでに修正個所のフォローがあるので分かったとは思いますが

> For x = 1 To 4
>  For y = 1 To 5
>   .TextMatrix(x, y) = a  <--- セルに値をセットする時はこの書式

今回の様にセルの値により色を変更する様な時は
セルの値を取得する必要があるので
a = .TextMatrix(x, y)  と言う書式にする必要があります。

>  Next
> Next

値を判断して色を変えたい訳ですから下記では最後に1回のみしか
判断していません。

> If a <= 35 Then
> .CellForeColor = vbRed
> End If

処理手順を考えて見ましょう。
1.各行に付いての
2.左側のセルから順次右側のセルの値を取得して
3.取得した各セルの値により色を変えて表示する。
4.1行の全てのセルの値の取得、判断、色表示が終わったら
5.次の行へ移る。
 
これを繰り返して最後の行まで処理する必要がありますので

For x = 1 To 4
  For y = 1 To 5
   a = .TextMatrix(x, y)
     <----   ここの取得した値により色を変えて表示する処理を書く
  Next y
Next x

プログラムを書く時には手作業で処理をする時の手順を考えて見ましょう。
フローチャートと言う図を書いてからプログラムする事も必要かも。

投稿時間:2004/05/02(Sun) 18:53
投稿者名:初心者です。
Eメール:
URL :
タイトル:
ありがとうございます。
きちんと色を分けて表示することができました。
nobuさま、除菌ちゃんさま、適切なご指導ありがとうございました。

投稿時間:2004/05/05(Wed) 17:28
投稿者名:初心者です。
Eメール:
URL :
タイトル:
MSFlexGirdの保存について
ほかに新たに保存をしようと思い、このサイトの
サンプルを参考にいろいろしてみたのですが、
保存できません。
氏名    国語    算数    理科    社会
A君    85    89    54    65
B君    98    95    85    70
Cさん    45    35    55    75
Dさん    65    75    75    55
E君    30    20    15    10
表は上記のようなもので、コードは下記になります。
Private Sub Command3_Click()
    Dim lngCountI As Long       'ループのカウンタ
    Dim FileNo As Integer
    Dim name      As String     '名前
    Dim kokugo    As Single     '国語の点数
    Dim sansuu    As Single     '算数の点数
    Dim rika      As Single     '理科の点数
    Dim syakai    As Single

    Dim kokugo_    As String '科目名
    Dim sansuu_    As String
    Dim rika_      As String
    Dim syakai_    As String
    Dim name_      As String
    


With MSFlexGrid1

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 1
            .Text = kokugo_

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 2
            .Text = sansuu_

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 3
            .Text = rika_
  
            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 4
            .Text = syakai_
        
            .Row = 0
            .Col = 0
            .Text = name
            .Col = 0
            .Text = name
  
            
    FileNo = FreeFile
    Open "Seiseki.csv" For Output As #FileNo
    
    
        For lngCountI = 1 To .Rows - 1
    
            .Row = lngCountI
            .Col = 0
            name = .Text
            .Col = 1
            kokugo = .Text
            .Col = 2
            sansuu = .Text
            .Col = 3
            rika = .Text
            .Col = 4
            syakai = .Text
            
    
            Write #FileNo, name, kokugo, sansuu, rika, syakai


    Next lngCountI
    Close #FileNo
End With

End Sub
氏名、科目名、各教科の点数を保存したいのです。
どこを訂正すればよいのかご意見をお聞かせ願えたら幸いです。
よろしくお願い致します。

投稿時間:2004/05/05(Wed) 20:05
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: MSFlexGirdの保存について
提示コードに近い形で書くと以下の様では如何ですか?
表示用のファイルを"C:\Seiseki.csv"としてあり
中身は下記です。
氏名,国語,算数,理科,社会
A君,85,89,54,65
B君,98,95,85,70
Cさん,45,35,55,75
Dさん,65,75,75,55
E君,30,20,15,10


保存後のファイルは "C:\Seiseki_2.csv" としてあります。

なお name はVBでの予約語ですので使用不可と思います。

Option Explicit

    Dim lngCountI As Long       'ループのカウンタ
    Dim FileNo As Integer
    Dim name_      As String     '名前
    Dim kokugo    As Single     '国語の点数
    Dim sansuu    As Single     '算数の点数
    Dim rika      As Single     '理科の点数
    Dim syakai    As Single

    Dim kokugo_    As String '科目名
    Dim sansuu_    As String
    Dim rika_      As String
    Dim syakai_    As String
    Dim i As Integer          '行

Private Sub Form_Load()
'表示する為にファイルを読み込み、表示する

    FileNo = FreeFile
    i = 0
    Open "C:\Seiseki.csv" For Input As #FileNo
    
With MSFlexGrid1
'見出しは文字型変数なので別扱い    
    Input #FileNo, name_
    Input #FileNo, kokugo_
    Input #FileNo, sansuu_
    Input #FileNo, rika_
    Input #FileNo, syakai_
    
    .Row = i
    .Col = 0: .Text = name_
    .Col = 1: .Text = kokugo_
    .Col = 2: .Text = sansuu_
    .Col = 3: .Text = rika_
    .Col = 4: .Text = syakai_

'ここからはデータ部    
'kokugo 等は数値としての扱いなので
'見出し部とは別扱いとしてある

    Do
    Input #FileNo, name_
    Input #FileNo, kokugo
    Input #FileNo, sansuu
    Input #FileNo, rika
    Input #FileNo, syakai
    
    i = i + 1
    .Row = i
    .Col = 0: .Text = name_
    .Col = 1: .Text = kokugo
    .Col = 2: .Text = sansuu
    .Col = 3: .Text = rika
    .Col = 4: .Text = syakai

    Loop Until EOF(FileNo)
    Close #FileNo

End With

End Sub


Private Sub Command3_Click()

With MSFlexGrid1
            
    FileNo = FreeFile
    Open "C:\Seiseki_2.csv" For Output As #FileNo

'見出しは文字型変数なので別扱い    
            .Row = 0
            .Col = 0
            name_ = .Text
            .Col = 1
            kokugo_ = .Text
            .Col = 2
            sansuu_ = .Text
            .Col = 3
            rika_ = .Text
            .Col = 4
            syakai_ = .Text
            
'見出し部を保存    
            Write #FileNo, name_, kokugo_, sansuu_, rika_, syakai_


'ここからはデータ部    
'kokugo 等は数値としての扱いなので
'見出し部とは別扱いとしてある
    
        For lngCountI = 1 To .Rows - 1
    
            .Row = lngCountI
            .Col = 0
            name_ = .Text
            .Col = 1
            kokugo = .Text
            .Col = 2
            sansuu = .Text
            .Col = 3
            rika = .Text
            .Col = 4
            syakai = .Text
            
'データ部を1行毎に保存    
            Write #FileNo, name_, kokugo, sansuu, rika, syakai

    Next lngCountI
    Close #FileNo
End With
End Sub

---------------
Private Sub Command3_Click() の中で

With MSFlexGrid1
            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 1
            .Text = kokugo_

などとなっていますが、ここは何をする積もりですか?
            .Text = name_ では name_ を表示しようと言う
意図かも知れませんが name_ にはまだ文字列がセットされていませんよ、
コードを順を追って何をしているのか、どう言う結果になるのかを
考えてください。

下記に先日書いた「フローチャート」に付いての記事があります。
これは自分の目的とする処理を実行する為の手順書です。
ある処理をする為には手順が必要です。
計算等をして答えを求めるには公式や手順が必要です。
アルゴリズムと言う語句に付いても調べて下さい。
闇雲にコードを書いても求める結果は出て来ません。
VBのコードの書き方だけが分かっていてもダメです。
手順に従った適切なコーディングが必要になります。

http://www005.upp.so-net.ne.jp/h-masuda/ProText/Flow/index.html

各項目毎に変数名を変えないで読み込み、表示、保存する
方法もありますが基本的には変わらないので
まずは1方法を確実に理解してください。

投稿時間:2004/05/05(Wed) 21:37
投稿者名:除菌ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGirdの保存について
とりあえず簡単なサンプルです。。

__________________________________________________________________________________
Private Sub Command1_Click()
Dim FileNum As Integer 'FreeFile番号
Dim Namae As String    '"名前"文字列格納
Dim kokugo As String    '"国語"文字列格納
Dim Hito As String      'A〜E格納
Dim Ten As String       '国語の点数格納
Dim i As Integer        'ROWの位置

i = 1
FileNum = FreeFile

With MSFlexGrid1
    .Row = 0
    .Col = 1
    Namae = .Text
    
    .Col = 2
    kokugo = .Text
    
    Open "C:\WINDOWS\デスクトップ\test.txt" For Output As #FileNum
        Print #FileNum, Namae, kokugo
        
        Do
            .Col = 1
            .Row = i
            Hito = .Text
            
            .Col = 2
            Ten = .Text
            
            Print #FileNum, Hito, Ten
            
            i = i + 1
        Loop While (i < .Rows)
            
    Close #FileNum
    
    
End With

    
End Sub
__________________________________________________________________________________
Private Sub Form_Load()
Dim i As Integer
Dim Namae As Variant
Dim NamaeBangou As Integer
Dim KokugoTen As Integer

NamaeBangou = 0
KokugoTen = 20

Namae = Array("A", "B", "C", "D", "E")

With MSFlexGrid1
    .Col = 1
    .Row = 0
    .Text = "名前"
    
    .Col = 2
    .Text = "国語"
    
'**********************************************
'**名前(A〜E)表示*****************************
    .Col = 1
    For i = 1 To 5
        .Row = i
        .Text = Namae(NamaeBangou)
        NamaeBangou = NamaeBangou + 1
        .Rows = .Rows + 1
    Next i
    
'**名前(A〜E)表示_END**************************
'***********************************************

'***********************************************
'**国語の点数表示********************************

    .Col = 2
    For i = 1 To 5
        .Row = i
        .Text = KokugoTen
        KokugoTen = KokugoTen + 20
    Next i
    
'**国語の点数表示_END****************************
'***********************************************

.Rows = .Rows - 1 '最後のROWが余分なので削除

'***********************************************
'**初期位置**************************************
.Col = 0
.Row = 0
'**初期位置_END**********************************
'************************************************
End With

End Sub
__________________________________________________________________________________


Open "C:\WINDOWS\デスクトップ\test.txt" For Output As #FileNum

はデスクトップに保存するようにしているのですが、
OSによって書き方が違うので注意です。
除菌ちゃんのPCのOSはWindowsMeなので↑の書き方でデスクトップのパスが出来ますが、
XPだとAllUserなんとかかんとかあったような気が・・・。

#上記コードをコピペして試してみて下さい。
#MSFlexGridのプロパティで「Cols」は2にして下さい。
#拡張子は.txtにしてますが、.csvに変えればCSVファイルで保存されます。

投稿時間:2004/05/05(Wed) 22:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
投稿されたコードで保存できていますよ
> ほかに新たに保存をしようと思い、このサイトの
> サンプルを参考にいろいろしてみたのですが、
> 保存できません。

投稿されたコードを試して見ましたが問題なく保存できましたよ。
保存したパス内を見ましたか?

下記のようにパスを指定するか、Currentフォルダ内(VB6.EXE があるフォルダ か
プログラムを起動したフォルダ内)に保存されているはずですから探して見て下さい。

Open "c:\Seiseki01.csv" For Output As #FileNo

ただ、下記のコードの部分は何をしょうとしておられるのでしょうか?
項目名も保存するなら、その前にファイルをOpenしておき、下記の部分だけ
書き込みする必要があります
その後 点数の部分を書き込みして下さい。

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 1
            .Text = kokugo_

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 2
            .Text = sansuu_

            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 3
            .Text = rika_
  
            .Row = 0
            .Col = 0
            .Text = name_
            .Col = 4
            .Text = syakai_
        
            .Row = 0
            .Col = 0
            .Text = name
            .Col = 0
            .Text = name

>なお name はVBでの予約語ですので使用不可と思います。

一応予約語には入っていないで問題はないようですが、紛らわしいので Sname とでも
しておいて下さい。
 

投稿時間:2004/05/11(Tue) 16:52
投稿者名:初心者
Eメール:
URL :
タイトル:
解決しました。
みなさまのおかげで何とかやりたいことができました。
ワーム サッサーのおかげでお礼が送れてしまいました。
どうも、ありがとうございました。