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

投稿時間:2004/01/19(Mon) 01:38
投稿者名:ましゃ
Eメール:
URL :
タイトル:
MSHFlexGridの検索について
たびたびお世話になっています。
現在MSHFlexGrid1の決まった1列に指定された文字が合った場合別のMSHFlexGrid2に行ごとコピーしようとしています。
総行数は30000前後なのですが今は指定された列をFor〜Nextで読んで指定された文字と比較し同じであればMSHFlexGrid1からMSHFlexGrid2にコピーしています。
言葉でいえば単純なのですが、行数が多くて動きが遅く困っています。
高速化するためによい方法はありますでしょうか?
    With MSHFlexGrid1
        k = 1
        DatN2 = 0
        For i = 1 To datNmax
            .Col = 5
            .Row = i
            If create = Mid(.Text, 1, 2) Then
                    MSFlexGrid2.Col = 0
                    MSFlexGrid2.Row = DatN2 + k
                    MSFlexGrid2.Text = MSFlexGrid2.Row
                For j = 1 To 11
                    .Col = j
                    MSFlexGrid2.Col = j
                    MSFlexGrid2.Text = .Text
                Next j
                k = k + 1
            End If
        Next i
    End With

投稿時間:2004/01/19(Mon) 10:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSHFlexGridの検索について
下記を試して見て下さい。
1.セル参照中は下記プロパティを False に設定しておく。
    MSHFlexGrid1.Visible = False
    MSHFlexGrid1.Redraw = False
2.MSFlexGrid1.Text を使用するより、MSHFlexGrid1.TextMatrix(i, j) を使用する。
3.セル個々のデータを移し変えるより、範囲を選択して移し変えるか、MSHFlexGrid1.Clip を使用する。
4.計測しながら、テストして見る。

又、この掲示板でもよく似た処理をしていたのがありますので、「ワード検索」で探して見てください。

投稿時間:2004/01/19(Mon) 15:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: MSHFlexGridの検索について
10,000 行のデータでテストして見ました。

元もとのコードでは 61秒でした。

1.の
    MSHFlexGrid1.Visible = False
    MSHFlexGrid1.Redraw = False
    MSHFlexGrid2.Visible = False
    MSHFlexGrid2.Redraw = False

  結果は、0.38秒でこの部分の効果が一番大きいです。
1.と2.と3.の合せた結果は、0.25秒でした。

3万行でも1秒程度なら1.だけでも十分かと思います。

投稿時間:2004/01/19(Mon) 23:12
投稿者名:ましゃ
Eメール:
URL :
タイトル:
Re^3: MSHFlexGridの検索について
いつもありがとうございます。
MSHFlexGrid1.Visible = False
MSHFlexGrid1.Redraw = False
をいれたら見違えるぐらい早くなりました。

最近VBの本をもらったのですが、本には書いてないものが多くてビックリしています。

これからもお力添えよろしくお願いします。