VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 グリッド(MSFlexGrid)関係のメニュー
1.MSFlexGrid の主要プロパティ・メソッド一覧表
2.MSFlexGrid ワンポイントテクニック集(その1)
3.MSFlexGrid ワンポイントテクニック集(その2)
4.MSFlexGrid で Excel のようにセルに直接データを入力する
5.MSFlexGrid/MSHFlexGridへのデータ表示設定色々
6.MSFlexGrid/MSHFlexGrid の表示データをファイルに保存方法色々
7.MSFlexGrid/MSHFlexGrid で項目(科目)別集計をする
8.MSFlexGrid/MSHFlexGrid でコピー・アンド・ペースト色々
9.MSFlexGrid/MSHFlexGrid で列幅設定/行の高さ設定色々
10.MSFlexGrid/MSHFlexGrid にチェックボックスを表示する及び操作色々
11.MSFlexGrid/MSHFlexGrid に表示中のデータを罫線付きで印刷する
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、MSFlexGrid 関係で当サイト内に掲載しているサンプルの紹介


10.MSFlexGrid/MSHFlexGrid にチェックボックスを表示する及び操作色々
1.MSFlexGrid/MSHFlexGrid にチェックボックスを表示
2.MSFlexGrid/MSHFlexGrid のチェックボックスを削除
3.MSFlexGrid/MSHFlexGrid のチェックボックスのチェックを全てチェック及び全て解除する
4.MSFlexGrid/MSHFlexGrid のチェックボックスでチェックされている行のデータを取得する
5.MSFlexGrid/MSHFlexGrid のチェックボックスでチェックされている行だけにアクセスする
6. 

テストに使用しているデータはこちらをお使い下さい。このサイトでのMSHFlexGrid のサンプルで共通で使用しますので解凍してこのプログラムと同じフォルダーに全てのファイルを入れておいて下さい。(このデータを1万件コピーしてテスト計測しております。)
 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:
使用 API:
その他 :プロジェクト→コンポーネント→コントロールで Microsoft FlexGrid Control 6.0(SP6) 又は、
    :Microsoft Hierarchical FlexGridにチェックを入れ、表示されたコントロールをフォームに貼り付けて下さい。
    :尚、当サイトで掲載している MSFlexGrid / MSFlexGrid 関係のサンプルは、上記と同様とし、今後は省略します。
このページのトップへ移動します。 1.MSFlexGrid/MSHFlexGrid にチェックボックスを表示
上記テスト用データが表示されているものとします。(1万行×8列のデータでテスト)
サンプル投稿用掲示板に投稿されている分では、データ件数が多いと処理速度等に問題がでてくるので作り直して見ました。
直接チェックボックスを表示するのは件数が多いと難しいのとその他処理が面倒になるので、Wingdings 2 のフォントを使用する事にしました。
MSFlexGrid なら Wingdings の Chr$(112) と Chr$(254) が使用できるのですが、MSHFlexGrid では、Wingdings の Chr$(254) が表示されません、それで、代替フォントとして、Wingdings 2 の Chr$(42) と Chr$(82) を使用しておりますが、環境やお好みに合わせて下さい。

Option Explicit

Private frgCheck    As Boolean  'チェックボックスの表示・非表示用
Private frgMultiSelect As Boolean  '複数選択可か不可
Private CountSelect  As Long   '選択件数

Private Sub Command1_Click()
'チェックボックス列を新規作成
  '既に表示中なので処理を抜ける
  If frgCheck = True Then Exit Sub

  With MSHFlexGrid1
    '指定位置に列を挿入
    .Cols = .Cols + 1        '列を1列増やす
    .ColPosition(.Cols - 1) = 0   '増やした列を0列目に移動
    .Col = 0
    .Row = 1
    .ColWidth(0) = 300
    .RowHeight(-1) = 280
    .RowSel = .Rows - 1
    .FillStyle = flexFillRepeat
    .CellFontName = "Wingdings 2"  'MSFlexGrid = Wingdings
    .CellFontSize = 15
    .Text = Chr$(42)        'Wingdings = (CHR$(111) チェックなし)  ( Chr$(254) チェックあり)
    .Row = 0            'ホームポジションへ移動
  End With
  frgCheck = True           'チェックボックスを表示中
  CountSelect = 0           'チェック済み数
  frgMultiSelect = True        '複数選択可
End Sub


Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  If Button = vbLeftButton Then
    With MSHFlexGrid1
      '列 = 0 で チェックボックスが表示されている場合
      If .MouseCol = 0 And frgCheck Then
        'チェックマークが表示されていたら
        If .TextMatrix(.MouseRow, .MouseCol) = Chr$(82) Then
          'チェックマークを非表示
          .CellFontSize = 15
          .TextMatrix(.MouseRow, .MouseCol) = Chr$(42)
          CountSelect = CountSelect - 1  'チェックカウントを減らす
          ' Debug.Print CountSelect
        Else
          If frgMultiSelect = False And CountSelect > 0 Then
            '複数選択不可で既にチェック済みの場合
            Beep
          Else
            'チェックマークの表示
            .CellFontSize = 11
            .TextMatrix(.MouseRow, .MouseCol) = Chr$(82)
            CountSelect = CountSelect + 1  'チェックカウントを増やす
           ' Debug.Print CountSelect
          End If
        End If
      End If
    End With
  End If
End Sub

  上記実行結果(0.084 秒/1万行)
 msflexgrid10_01.gif

 チェックボックスコントロールを表示したのと見た目は変わらないかと思います。

このページのトップへ移動します。 2.MSFlexGrid/MSHFlexGrid のチェックボックスを削除

Private Sub Command2_Click()
'チェックボックス列を削除
  '表示していないので処理を抜ける
  If frgCheck = False Then Exit Sub
  '指定列の移動及び削除
  MSHFlexGrid1.ColPosition(0) = MSHFlexGrid1.Cols - 1   '0列目を最後の列に移動
  MSHFlexGrid1.Cols = MSHFlexGrid1.Cols - 1        '最後の列を削除(削除しなければ移動になります)

  '設定値を初期値に戻す
  frgCheck = False    'チェックボックス未表示
  CountSelect = 0     'チェック済み数
  frgMultiSelect = False '複数選択可
End Sub

このページのトップへ移動します。 3.MSFlexGrid/MSHFlexGrid のチェックボックスのチェックを全てチェック及び全て解除する

Private Sub Command3_Click()
'全てチェックマークを付ける
  '表示していないので処理を抜ける
  If frgCheck = False Then Exit Sub
  '全て選択
  With MSHFlexGrid1
    .Col = 0
    .Row = .FixedRows
    .RowSel = .Rows - 1
    .FillStyle = flexFillRepeat
    .CellFontName = "Wingdings 2"  'MSFlexGrid = Wingdings
    .CellFontSize = 11
    .Text = Chr$(82)        'Wingdings = (CHR$(111) チェックなし)  ( Chr$(254) チェックあり)
    .Row = 0
    CountSelect = .Rows - 1     'チェック済み数
  End With
End Sub

Private Sub Command4_Click()
'全てのチェックを解除する
  '表示していないので処理を抜ける
  If frgCheck = False Then Exit Sub
  '全て選択
  With MSHFlexGrid1
    .Col = 0
    .Row = .FixedRows
    .RowSel = .Rows - 1
    .FillStyle = flexFillRepeat
    .CellFontName = "Wingdings 2"  'MSFlexGrid = Wingdings
    .CellFontSize = 15
    .Text = Chr$(42)        'Wingdings = (CHR$(111) チェックなし)  ( Chr$(254) チェックあり)
    .Row = 0
  End With
  CountSelect = 0           'チェック済み数
End Sub

どの操作も処理速度は、0.01 秒未満で問題になるようなレベルではないかと。

このページのトップへ移動します。 4.MSFlexGrid/MSHFlexGrid のチェックボックスでチェックされている行のデータを取得する

Private Sub Command5_Click()
'チェックされているデータを取得
  '表示していないので処理を抜ける
  If frgCheck = False Then Exit Sub
  '全て選択
  Dim i As Long, j As Long
  With MSHFlexGrid1
    For i = 0 To .Rows - 1
      If .TextMatrix(i, 0) = Chr$(82) Then
        Dim ColDat As Variant
        ColDat = ""
        For j = 1 To .Cols - 1
          ColDat = ColDat & vbTab & .TextMatrix(i, j)
        Next j
        Debug.Print ColDat
      End If
    Next i
    .Row = 0
  End With
End Sub

このページのトップへ移動します。 5.MSFlexGrid/MSHFlexGrid のチェックボックスでチェックされている行だけにアクセスする

Private Sub Command6_Click()
'チェックされている行だけにアクセスする
  '表示していないので処理を抜ける
  If frgCheck = False Then Exit Sub

  Dim i As Long, j As Long
  With MSHFlexGrid1
    .Col = 0              '並べ替えの基準となる列を指定
    .Sort = flexSortGenericDescending  '一般的な降順ソートを実施

    For i = .FixedRows To CountSelect
      '念の為チェック済みかを照合
      If .TextMatrix(i, 0) = Chr$(82) Then
        Dim ColDat As Variant
        ColDat = ""
        For j = 1 To .Cols - 1
          ColDat = ColDat & vbTab & .TextMatrix(i, j)
        Next j
        Debug.Print ColDat
      End If
    Next i
    .Row = 0
  End With
End Sub

  上記実行結果(0.076 秒/1万行)
 msflexgrid10_02.gif

アイデア次第では、色々な場面で使えるのではないでしょうか?
テスト用コードなので、条件設定やエラー処理も不十分ですし、ボタンのクリックイベントに書いておりますので、プロシージャ内に作成するなり、関数化するなりしてお使い下さい。

このページのトップへ移動します。 6.





このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
MSHFlexGrid にチェックボックスを表示 チェックボックスのチェックをすべてつける チェックボックスのチェックをすべて解除する チェックボックス列を削除する 
MSFlexGrid にチェックボックスを表示 チェックボックス列を挿入する
フレキシブルグリッド (MSFlexGrid) コントロール 階層フレキシブルグリッド (MSHFlexGrid) コントロール 

このページのトップへ移動します。