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

投稿時間:2003/07/08(Tue) 15:47
投稿者名:tea
Eメール:
URL :
タイトル:
ファイルの分割表示の質問
10行11列のcsvファイルを1から5行目までと
6行目から10行目までの2つにわけてMSFlexGrid2
の(0).(1)に表示したくて下記のようにコードを記述
してみたのですが駄目でした。
教えていただけないでしょうか?

Private Sub sFileOpen()
Dim DatN As Integer  'データのカウント'
Dim intFileNo As Integer   'ファイルナンバー'
Dim i As Integer
Dim j As Integer
DatN = 0
.
.
    With MSFlexGrid2(0)
    '読み込んだデータをセルに代入'
        .Rows = DatN + 2
        For i = 1 To 5
            .Row = (i)
        Next i
        .RowHeight(.Row) = 350
        .Col = 0
        .Text = Format$(DatN + 1, "##0")
        .Col = 1
        .Text = Format$(name, "####0")
        .
    .
        .
        DatN = DatN + 1
        
        Close #intFileNo
        
    End With
    

投稿時間:2003/07/08(Tue) 17:00
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: ファイルの分割表示の質問
ツッコミどころだらけなんでどこから突っ込んだら良いか悩みますねー(^^;

まず、

> 10行11列のcsvファイルを1から5行目までと
> 6行目から10行目までの2つにわけてMSFlexGrid2
> の(0).(1)に表示したくて下記のようにコードを記述
> してみたのですが駄目でした。

何がどうダメだったんでしょうか?
エラーでも出るんスか??


>         For i = 1 To 5
>             .Row = (i)
>         Next i

このループは何をしたいんでしょうか?


>         .Text = Format$(name, "####0")

nameってのはどこから出てきたんですか?


>         Close #intFileNo

そもそもどこでオープンしてどうゆう風にデータを取得してるんでしょうか?
1フィールドずつ?それとも1レコードずつ??

投稿時間:2003/07/08(Tue) 17:15
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: ファイルの分割表示の質問
> ツッコミどころだらけなんでどこから突っ込んだら良いか悩みますねー(^^;

わかりずらくてすみません。
以下のようなコードを記述してみたんですが、1つのcsv
ファイルをMSFlexGrid2(0),(1)に分割して表示させよう
と思ったのですがうまく動作しない状況です。
よろしくお願いします。

Private Sub sFileOpen()
'データ読み込み表示処理'
Dim name As String   '名前'
Dim Shot As String   'シュート回数'
Dim ThreePShot As String '3ポイントシュート成功回数'
Dim TwoPShot As String   '2ポイントシュート成功回数'
Dim FreeThrow As String   'フリースロー成功回数'
Dim Soutokuten As String   '総得点'
Dim Rebound As String   'リバウンド獲得回数'
Dim Assist As String   'アシスト成功回数'
Dim Steel As String   'スティール成功回数'
Dim BlockShot As String   'ブロックショット成功回数'
Dim Foul As String   'ファウル回数'

Dim DatN As Integer  'データのカウント'
Dim intFileNo As Integer   'ファイルナンバー'
DatN = 0

    'キャンセルボタンが押されたらエラーとして通知'
    CommonDialog1.CancelError = True
    
    'エラーが起きたら最終行へ'
    On Error GoTo Cancel_exit
    
    'フィルターは「*.csv」'
    CommonDialog1.Filter = "シート (*.csv)|*.csv"
    
    'ダイアログボックスの形を決める'
    CommonDialog1.Flags = cdlOFNExplorer Or cdlOFNFileMustExist Or _
        cdlOFNHideReadOnly Or cdlOFNLongNames Or cdlOFNNoChangeDir
        
    'ファイルを開くを表示'
    CommonDialog1.ShowOpen
    
    'ファイル名をfile_nameにセット'
    file_name = CommonDialog1.FileName
    
    With MSFlexGrid2(0)
        .Visible = False   '一旦非表示にする'
        .FillStyle = flexFillRepeat
        
        intFileNo = FreeFile
        
        'シーケンシャル入力モードでfile_nameをオープンする'
        Open file_name For Input As #intFileNo
        Do Until EOF(intFileNo)
            Input #intFileNo, name, Shot, ThreePShot, TwoPShot, FreeThrow, _
                        Soutokuten, Rebound, Assist, Steel, BlockShot, Foul
            
            '読み込んだデータをセルに代入'
            .Rows = DatN + 2
            .Row = DatN + 1
            .RowHeight(.Row) = 350
            .Col = 0
            .Text = Format$(DatN + 1, "##0")
            .Col = 1
            .Text = Format$(name, "####0")
            .Col = 2
            .Text = Format$(Shot, "####0")
            .Col = 3
            .Text = Format$(ThreePShot, "####0")
            .Col = 4
            .Text = Format$(TwoPShot, "####0")
            .Col = 5
            .Text = Format$(FreeThrow, "####0")
            .Col = 6
            .Text = Format$(Soutokuten, "####0")
            .Col = 7
            .Text = Format$(Rebound, "####0")
            .Col = 8
            .Text = Format$(Assist, "####0")
            .Col = 9
            .Text = Format$(Steel, "####0")
            .Col = 10
            .Text = Format$(BlockShot, "####0")
            .Col = 11
            .Text = Format$(Foul, "####0")
                        
            DatN = DatN + 1
        Loop
        Close #intFileNo
        
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
    
    With MSFlexGrid2(1)
        .Visible = False   '一旦非表示にする'
        .FillStyle = flexFillRepeat
        
        intFileNo = FreeFile
        
        'シーケンシャル入力モードでfile_nameをオープンする'
        Open file_name For Input As #intFileNo
        Do Until EOF(intFileNo)
            Input #intFileNo, name, Shot, ThreePShot, TwoPShot, FreeThrow, _
                        Soutokuten, Rebound, Assist, Steel, BlockShot, Foul
            
            '読み込んだデータをセルに代入'
            .Rows = DatN + 2
            .Row = DatN + 1
            .RowHeight(.Row) = 350
            .Col = 0
            .Text = Format$(DatN + 1, "##0")
            .Col = 1
            .Text = Format$(name, "####0")
            .Col = 2
            .Text = Format$(Shot, "####0")
            .Col = 3
            .Text = Format$(ThreePShot, "####0")
            .Col = 4
            .Text = Format$(TwoPShot, "####0")
            .Col = 5
            .Text = Format$(FreeThrow, "####0")
            .Col = 6
            .Text = Format$(Soutokuten, "####0")
            .Col = 7
            .Text = Format$(Rebound, "####0")
            .Col = 8
            .Text = Format$(Assist, "####0")
            .Col = 9
            .Text = Format$(Steel, "####0")
            .Col = 10
            .Text = Format$(BlockShot, "####0")
            .Col = 11
            .Text = Format$(Foul, "####0")
                        
            DatN = DatN + 1
        Loop
        Close #intFileNo
        
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
    
    'ファイル名を表示する'
    frmGameStats.Caption = file_name
    
    Exit Sub
    
    'エラー処理'
Cancel_exit:

    MsgBox Err.Description

End Sub

投稿時間:2003/07/08(Tue) 18:11
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: ファイルの分割表示の質問
ちょっとCSVファイル以前の問題だと思いますが…。

> 「行の値が不正です。」と出ます。

このエラーが出るのはどこでしょうか?
てゆーか、たぶん

> > >         For i = 1 To 5
> > >             .Row = (i)
> > >         Next i

ここで出てると思うんですが。

> csvファイルの1行目から5行目までをMSFlexGrid2(0)
> に表示させようともって記述してみました。

.Rowプロパティがなんだか知っていますでしょうか?
これはFlexGrid内のアクティブセルの座標(行)を指定するプロパティです。
つまり、ここでは1行目から5行目まで移動しているだけで何もしていません。

> DatN = 0
> .
> .
>     With MSFlexGrid2(0)
>     '読み込んだデータをセルに代入'
>         .Rows = DatN + 2

んで、このソースを見る限り、この時点でたぶん.Rowsは2でしょう。
行の総数が2なのに5行目まで移動しようとしてるから
「行の値が不正です。」というエラーが出ます。


煽りのつもりで書いているわけではありませんが、提示されたソースでは
どの個所を省略しているか全然分からないので、正直回答のしようがありません。

投稿時間:2003/07/08(Tue) 18:34
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: ファイルの分割表示の質問
なんかいつの間にか投稿内容が全く違うものになってますね。
ま、別に良いですけど…。

> 以下のようなコードを記述してみたんですが、1つのcsv
> ファイルをMSFlexGrid2(0),(1)に分割して表示させよう
> と思ったのですがうまく動作しない状況です。

だから、どううまくいかないのか説明して欲しいもんです。

パッと見ただけですが、前回おっしゃってたエラー「行の値が不正です。」はたぶん出ないでしょう。
MSFlexGrid2(0)の1行目から10行目までに表示されて
MSFlexGrid2(1)の11行目から20行目までに同じ情報が表示されるんじゃないかな?

DatNを途中でリセットしていないことと ファイルの終わりまで全部読み込んでいるのが原因です。

5行目まで表示したところでDatNをリセットして
ファイルを閉じずにそのままMSFlexGrid2(1)の処理に持っていけば希望通りに表示されると思います。

投稿時間:2003/07/08(Tue) 19:23
投稿者名:tea
Eメール:
URL :
タイトル:
Re^4: ファイルの分割表示の質問
> DatNを途中でリセットしていないことと ファイルの終わりまで全部読み込んでいるのが原因です。
> 5行目まで表示したところでDatNをリセットして
> ファイルを閉じずにそのままMSFlexGrid2(1)の処理に持っていけば希望通りに表示されると思います。

nanashiさんがご指摘の通りで、現状で動作させるとMSFlexGrid2(0)に
10行全てが表示されてしまいMSFlexGrid2(1)には何も表示されないと
いう状況です。
しかし、どうしたらよいのかわかりませんでした。
教えてもらえないでしょうか?

投稿時間:2003/07/09(Wed) 10:03
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: ファイルの分割表示の質問
> nanashiさんがご指摘の通りで、現状で動作させるとMSFlexGrid2(0)に
> 10行全てが表示されてしまいMSFlexGrid2(1)には何も表示されないと
> いう状況です。
> しかし、どうしたらよいのかわかりませんでした。
> 教えてもらえないでしょうか?

ちょっとは考えたのでしょうか?
特に難しいことは何も無いのでもう少し自分で考えるべきだと思いますが。
そうしないと身につきませんよ。

基本的に前回指摘した通りです。

1.まずファイルをオープンします。
2.(0)には1行目から5行目までのデータを表示すると決まっているようなので
  ループはFor文を使って5回ループさせます。
3.(1)への表示も同様にFor文を使って5回ループさせます。
4.ファイルをクローズします。

以上です。

投稿時間:2003/07/09(Wed) 11:45
投稿者名:tea
Eメール:
URL :
タイトル:
Re^6: ファイルの分割表示の質問
> 1.まずファイルをオープンします。
> 2.(0)には1行目から5行目までのデータを表示すると決まっているようなので
>   ループはFor文を使って5回ループさせます。
> 3.(1)への表示も同様にFor文を使って5回ループさせます。
> 4.ファイルをクローズします。

nanashiさん、簡潔なご指導ありがとうございます。
コードを書き直した結果、MSFlexGrid2(0)には5行が正しく表示される
ようになりましたが、MSFlexGrid2(1)では何故か10行表示されて1行
から5行が空白で6行目から10行目までは正しく表示されます。
何度もコードを書いてしまって申し訳ないんですが、教えてください。
Private Sub sFileOpen()
'データ読み込み表示処理'
Dim name As String   '名前'
Dim Shot As String   'シュート回数'
Dim ThreePShot As String '3ポイントシュート成功回数'
Dim TwoPShot As String   '2ポイントシュート成功回数'
Dim FreeThrow As String   'フリースロー成功回数'
Dim Soutokuten As String   '総得点'
Dim Rebound As String   'リバウンド獲得回数'
Dim Assist As String   'アシスト成功回数'
Dim Steel As String   'スティール成功回数'
Dim BlockShot As String   'ブロックショット成功回数'
Dim Foul As String   'ファウル回数'

Dim DatN As Integer  'データのカウント'
Dim intFileNo As Integer   'ファイルナンバー'
Dim i As Integer
Dim j As Integer
DatN = 0

    'キャンセルボタンが押されたらエラーとして通知'
    CommonDialog1.CancelError = True
    
    'エラーが起きたら最終行へ'
    On Error GoTo Cancel_exit
    
    'フィルターは「*.csv」'
    CommonDialog1.Filter = "シート (*.csv)|*.csv"
    
    'ダイアログボックスの形を決める'
    CommonDialog1.Flags = cdlOFNExplorer Or cdlOFNFileMustExist Or _
        cdlOFNHideReadOnly Or cdlOFNLongNames Or cdlOFNNoChangeDir
        
    'ファイルを開くを表示'
    CommonDialog1.ShowOpen
    
    'ファイル名をfile_nameにセット'
    file_name = CommonDialog1.FileName
    
    With MSFlexGrid2(0)
        .Visible = False   '一旦非表示にする'
        .FillStyle = flexFillRepeat
        
        intFileNo = FreeFile
        
        'シーケンシャル入力モードでfile_nameをオープンする'
        Open file_name For Input As #intFileNo
        
        '1行目から5行目まで表示'
        For i = 1 To 5
                
            Input #intFileNo, name, Shot, ThreePShot, TwoPShot, FreeThrow, _
                        Soutokuten, Rebound, Assist, Steel, BlockShot, Foul
                
            '読み込んだデータをセルに代入'
            .Rows = DatN + 2
            .Row = DatN + 1
            .RowHeight(.Row) = 350
            .Col = 0
            .Text = Format$(DatN + 1, "##0")
            .Col = 1
            .Text = Format$(name, "####0")
            .Col = 2
            .Text = Format$(Shot, "####0")
            .Col = 3
            .Text = Format$(ThreePShot, "####0")
            .Col = 4
            .Text = Format$(TwoPShot, "####0")
            .Col = 5
            .Text = Format$(FreeThrow, "####0")
            .Col = 6
            .Text = Format$(Soutokuten, "####0")
            .Col = 7
            .Text = Format$(Rebound, "####0")
            .Col = 8
            .Text = Format$(Assist, "####0")
            .Col = 9
            .Text = Format$(Steel, "####0")
            .Col = 10
            .Text = Format$(BlockShot, "####0")
            .Col = 11
            .Text = Format$(Foul, "####0")
                        
            DatN = DatN + 1
            
        Next i
            
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
    
    With MSFlexGrid2(1)
        .Visible = False   '一旦非表示にする'
        .FillStyle = flexFillRepeat
        
        '6行目から10行目まで表示'
        For i = 6 To 10
                
            Input #intFileNo, name, Shot, ThreePShot, TwoPShot, FreeThrow, _
                        Soutokuten, Rebound, Assist, Steel, BlockShot, Foul
            
            '読み込んだデータをセルに代入'
            .Rows = DatN + 2
            .Row = DatN + 1
            .RowHeight(.Row) = 350
            .Col = 0
            .Text = Format$(DatN + 1, "##0")
            .Col = 1
            .Text = Format$(name, "####0")
            .Col = 2
            .Text = Format$(Shot, "####0")
            .Col = 3
            .Text = Format$(ThreePShot, "####0")
            .Col = 4
            .Text = Format$(TwoPShot, "####0")
            .Col = 5
            .Text = Format$(FreeThrow, "####0")
            .Col = 6
            .Text = Format$(Soutokuten, "####0")
            .Col = 7
            .Text = Format$(Rebound, "####0")
            .Col = 8
            .Text = Format$(Assist, "####0")
            .Col = 9
            .Text = Format$(Steel, "####0")
            .Col = 10
            .Text = Format$(BlockShot, "####0")
            .Col = 11
            .Text = Format$(Foul, "####0")
                        
            DatN = DatN + 1
        
        Next i
        
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
    
    Close #intFileNo
    
    'ファイル名を表示する'
    frmGameStats.Caption = file_name
    
    Exit Sub
    
    'エラー処理'
Cancel_exit:

    MsgBox Err.Description

End Sub

投稿時間:2003/07/09(Wed) 12:02
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re^7: ファイルの分割表示の質問
ご自身の書いたソースのデバックを人にお願いしているように
見えるのですが。
望まれた処理になっていないのは、そういう処理をするコード
を書いているからです。

DatNを初期化しないから、下5行を表示する為のグリッドが
10行になるんです。

投稿時間:2003/07/09(Wed) 12:10
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^7: ファイルの分割表示の質問
DatNをリセットせずにRowsやRowの設定に使っているからです。

MSFlexGrid2(1)の表示設定を開始する時、DatNの値は5です。
つまり(1)の最初のループでRowsは7、Rowは6になっています。
データは5行と決まっているようなのでループの外で.Rows=6とした方が良いと思います。

(1)のループでiを6から始める意味はありません。
For i = 1 To 5で良いです。
また、せっかくループカウンタがあるのでRow=iとしましょう。

私が見る限り、DatNを使う必要は全くありません。

投稿時間:2003/07/09(Wed) 14:26
投稿者名:tea
Eメール:
URL :
タイトル:
Re^8: ファイルの分割表示の質問
nanashiさん、ありがとうございます。
(0),(1)ともに表示されました。
しかし、以下の方法がわかりません。

> DatNをリセットせずにRowsやRowの設定に使っているからです。

Reset = DatNなどと記述してみても出来ませんし、MSDNでリセット
を調べてみてもわかりませんでした。
MSFlexGrid2(0)、(1)共に.FixedColsを1から5としたいのですが、
教えていただいた方法では(1)が6.7.8.9.10と表示されてしまいま
す。下記にDatNがあるだけにどうしていいものかわかりません。
.Text = Format$(DatN + 1, "##0")
恥ずかしいほど無知ですが教えてください。
よろしくお願いします。

投稿時間:2003/07/09(Wed) 14:41
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^9: ファイルの分割表示の質問
> > DatNをリセットせずにRowsやRowの設定に使っているからです。
>
> Reset = DatNなどと記述してみても出来ませんし、MSDNでリセット
> を調べてみてもわかりませんでした。

DatN = 0

です。
データを初期値に戻すことを「リセット(再設定)する」と言います(一般的じゃないのかな??)。
「初期化」とかも同じ意味で使われます。

> MSFlexGrid2(0)、(1)共に.FixedColsを1から5としたいのですが、
> 教えていただいた方法では(1)が6.7.8.9.10と表示されてしまいま
> す。

この部分は何を言いたいのかよく分かりません。
FixedColsってのはそのまんま直訳で「固定化した行」という意味ですが
提示されたソース内でそれを指定しているところは無いようですが??

> 下記にDatNがあるだけにどうしていいものかわかりません。
> .Text = Format$(DatN + 1, "##0")
> 恥ずかしいほど無知ですが教えてください。
> よろしくお願いします。

別にDatNのところを「i」に変えたり、「i + 5」に変えたりしておけば問題ないと思いますが。

投稿時間:2003/07/09(Wed) 17:40
投稿者名:tea
Eメール:
URL :
タイトル:
解決しました。
> DatN = 0

こんな簡単なことだったんですね。
解決しました。
nanashiさん、ご迷惑おかけしました。
本当にありがとうございました。

投稿時間:2003/07/09(Wed) 13:06
投稿者名:匿名
Eメール:
URL :
タイトル:
Re^7: ファイルの分割表示の質問
DatNを有効に使うとこんな感じですかね。

Private Sub sFileOpen()
    'データ読み込み表示処理'
    Dim name As String   '名前'
    Dim Shot As String   'シュート回数'
    Dim ThreePShot As String '3ポイントシュート成功回数'
    Dim TwoPShot As String   '2ポイントシュート成功回数'
    Dim FreeThrow As String   'フリースロー成功回数'
    Dim Soutokuten As String   '総得点'
    Dim Rebound As String   'リバウンド獲得回数'
    Dim Assist As String   'アシスト成功回数'
    Dim Steel As String   'スティール成功回数'
    Dim BlockShot As String   'ブロックショット成功回数'
    Dim Foul As String   'ファウル回数'
    
    Dim DatN As Integer  'データのカウント'
    Dim intFileNo As Integer   'ファイルナンバー'
    Dim i As Integer
    Dim j As Integer

    'キャンセルボタンが押されたらエラーとして通知'
    CommonDialog1.CancelError = True
    
    'エラーが起きたら最終行へ'
    On Error GoTo Cancel_exit
    
    'フィルターは「*.csv」'
    CommonDialog1.Filter = "シート (*.csv)|*.csv"
    
    'ダイアログボックスの形を決める'
    CommonDialog1.Flags = cdlOFNExplorer Or cdlOFNFileMustExist Or _
        cdlOFNHideReadOnly Or cdlOFNLongNames Or cdlOFNNoChangeDir
        
    'ファイルを開くを表示'
    CommonDialog1.ShowOpen
    
    'ファイル名をfile_nameにセット'
    file_name = CommonDialog1.FileName
    
    DatN = 0
    intFileNo = FreeFile
    Open file_name For Input As #intFileNo
        Do Until EOF(intFileNo)
            Input #intFileNo, name, Shot, ThreePShot, TwoPShot, FreeThrow, _
                        Soutokuten, Rebound, Assist, Steel, BlockShot, Foul
            With MSFlexGrid2(DatN \ 5)
                .Visible = False   '一旦非表示にする'
                .FillStyle = flexFillRepeat
                '読み込んだデータをセルに代入'
                .Rows = 5 + 2
                .Row = (DatN Mod 5) + 1
                .RowHeight((DatN Mod 5) + 1) = 350
                .TextMatrix(.Row, 0) = Format$(DatN + 1, "##0")
                .TextMatrix(.Row, 1) = Format$(name, "####0")
                .TextMatrix(.Row, 2) = Format$(Shot, "####0")
                .TextMatrix(.Row, 3) = Format$(ThreePShot, "####0")
                .TextMatrix(.Row, 4) = Format$(TwoPShot, "####0")
                .TextMatrix(.Row, 5) = Format$(FreeThrow, "####0")
                .TextMatrix(.Row, 6) = Format$(Soutokuten, "####0")
                .TextMatrix(.Row, 7) = Format$(Rebound, "####0")
                .TextMatrix(.Row, 8) = Format$(Assist, "####0")
                .TextMatrix(.Row, 9) = Format$(Steel, "####0")
                .TextMatrix(.Row, 10) = Format$(BlockShot, "####0")
                .TextMatrix(.Row, 11) = Format$(Foul, "####0")
            End With
            DatN = DatN + 1
        Loop
    Close #intFileNo
    
    With MSFlexGrid2(0)
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
    
    With MSFlexGrid2(1)
        'カレントセルをホームポジションに'
        .FillStyle = flexFillSingle
        .Row = 1
        .Col = 1
        .Visible = True   '再表示'
        .SetFocus
    End With
        
        'ファイル名を表示する'
    frmGameStats.Caption = file_name
    
    Exit Sub
    
    'エラー処理'
Cancel_exit:

    MsgBox Err.Description

End Sub

投稿時間:2003/07/09(Wed) 17:42
投稿者名:tea
Eメール:
URL :
タイトル:
Re^8: ファイルの分割表示の質問
> DatNを有効に使うとこんな感じですかね。

匿名さん、ご回答ありがとうございます。
今回はnanashiさんから教わったコードで解決しました。
匿名さんのコードは今後の参考のために大切に保存して
おきます。
本当にありがとうございました。