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 関係で当サイト内に掲載しているサンプルの紹介


4.MSFlexGrid で Excel のようにセルに直接データを入力する
1.使用コントロールと配置図
2.MSFlexGrid で Excel のようにセルに直接データを入力する
3. 
4. 
5. 
6. 
7. 
8. 
9. 
10. 
11. 
12. 
主に、フレキシブルグリッド (MSFlexGrid) コントロールについて書いておりますが、階層フレキシブルグリッド (MSHFlexGrid) コントロールの場合は、MSHFlexGrid に置き換えてご覧ください。
 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:
使用 API:
その他 :プロジェクト→コンポーネント→コントロールで Microsoft FlexGrid Control 6.0(SP6) 又は、
    :Microsoft Hierarchical FlexGridにチェックを入れ、表示されたコントロールをフォームに貼り付けて下さい。
    :尚、当サイトで掲載している MSFlexGrid / MSFlexGrid 関係のサンプルは、上記と同様とし、今後は省略します。
このページのトップへ移動します。 1.使用コントロールと配置図

 msflexgrid03_01.gif

まず、1.MSFlexGrid / MSHFlexGrid における基本的な動作確認用コードを試してからこのサンプルを試すようにして下さい。

このページのトップへ移動します。 2.MSFlexGrid で Excel のようにセルに直接データを入力する

Option Explicit

Private NextCell As Integer  'Enter の後の移動方向の選択

Private Sub Form_Load()
  Dim i  As Long      'ループ用カウンター
  Form1.Move 0, 0, 8640, 4000
  'MSFlexGrid の初期設定
  With MSFlexGrid1
  '----------表示位置及び行数・列数等の設定----------
   'カレントセルを反転表示(強調表示すればカレントセルが解りやすい)
   .FocusRect = flexFocusNone    'フォーカスを示す四角形を描かない
   .HighLight = flexHighlightAlways '選択されたセルを常に強調表示
   .Move 150, 150, 8170, 2850    '表示位置と大きさを設定
   .Rows = 10            '行の総数(固定行含む)
   .Cols = 8            '列の総数(固定列含む)
   .FixedRows = 1          '固定行の数 Rowsより1以上少ない事
   .FixedCols = 1          '固定列の数 Colsより1以上少ない事
  '----------項目の設定----------
   .TextMatrix(0, 1) = "No"
   .TextMatrix(0, 2) = "氏   名"
   .TextMatrix(0, 3) = "国 語"
   .TextMatrix(0, 4) = "数 学"
   .TextMatrix(0, 5) = "英 語"
   .TextMatrix(0, 6) = "合 計"
   .TextMatrix(0, 7) = "平均点"
  '----------列幅の設定----------
   Dim Wid As Long
   For i = 0 To .Cols - 1
     Select Case i
      Case 0
        Wid = 430
      Case 1
        Wid = 550
      Case 2
        Wid = 1800
      Case Else
        Wid = 1000
     End Select
     .ColWidth(i) = Wid
     .Col = i: .Row = 0
     .CellAlignment = flexAlignCenterCenter '項目の表示位置を設定
   Next i
  '----------行の高さ及び行番号を設定----------
   .Col = 0
   .RowHeight(0) = 350
   For i = 1 To .Rows - 1
     .RowHeight(i) = 350   '行の高さ
     .TextMatrix(i, 0) = i  '行番号を表示
   Next i
  '----------最初のセル位置に移動----------
   .Col = 1: .Row = 1
  End With
  With Text1
   .BackColor = &H80FFFF  '動きが分かりやすいように(通常は不必要)
   .Text = ""
   .Visible = False
  End With
End Sub

Private Sub MSFGEdit(MSFlexGrid As Control, _
              Edit As Control, KeyAscii As Integer)
'MSFlexGrid コントロールからテキストボックスにフォーカスを移動
  '入力された文字を使います。
  Select Case KeyAscii
   ' 空白は、現在のテキストの編集を示します。
   Case 0 To vbKeySpace
     Edit = MSFlexGrid
     Edit.SelStart = 1000

   'そのほかは、現在のテキストを置き換えます。
   Case Else
     Edit = Chr$(KeyAscii)
     Edit.SelStart = 1
  End Select

  'セルの位置にテキストボックスを表示
  With MSFlexGrid
   Edit.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
  End With
  Edit.Visible = True
  '実行します。
  Edit.SetFocus
End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
'テキストボックスの編集機能のルーチンへ
  Call MSFGEdit(MSFlexGrid1, Text1, KeyAscii)
End Sub

Private Sub MSFlexGrid1_DblClick()
'テキストボックスの編集機能のルーチンへ
  Call MSFGEdit(MSFlexGrid1, Text1, vbKeySpace)  '空白を代入します。
End Sub

'=============================================================
'ここまでで一応入力テキストボックスに入力が可能
'=============================================================
Private Sub Text1_KeyPress(KeyAscii As Integer)
'改行文字を削除し、警告音が発生しないようにします。
  If KeyAscii = vbKeyReturn Then
   KeyAscii = 0
  End If
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'入力キーの判定移動処理へ
  Call EditKeyCode(MSFlexGrid1, Text1, KeyCode)
End Sub

Private Sub EditKeyCode(MSFlexGrid As Control, _
               Edit As Control, KeyCode As Integer)
'フォーカスを移動するルーチン
  With MSFlexGrid
   ' 標準の編集コントロールの処理です。
   Select Case KeyCode
     Case vbKeyEscape   'Esc キーは、非表示にしてフォーカスを
               'MSFlexGrid に戻します。
      Edit.Visible = False
      .SetFocus
     Case vbKeyReturn, vbKeyTab ' EnterとTabによるフォーカス移動。
      '↓移動を選択した場合
      If NextCell = 1 Then
        .SetFocus
        DoEvents
        If .Row < .Rows - 1 Then
         '1つ下に移動
         .Row = .Row + 1
        End If
      End If
      If NextCell = 0 Then '→移動を選択の場合(デフォルト)
        .SetFocus
        DoEvents
        '右端に行った場合の折り返し処理
        If .Col = .Cols - 1 And .Row < .Rows - 1 Then
         .Row = .Row + 1
         .Col = 0
        End If
        '1つ右に移動
        If .Col < .Cols - 1 Then
         .Col = .Col + 1
        End If
      End If

     Case vbKeyUp   ' ↑キー。
      .SetFocus
      DoEvents
      If .Row > .FixedRows Then
        .Row = .Row - 1
      End If

     Case vbKeyDown  ' ↓キー。
      .SetFocus
      DoEvents
      If .Row < .Rows - 1 Then
        .Row = .Row + 1
      End If
   End Select
  End With
End Sub

Private Sub mnuDown_Click()
'Enter の後下方向に移動(Excelと同様の操作に)
  NextCell = 1
End Sub

Private Sub mnuRight_Click()
'Enter の後右方向に移動
  NextCell = 0
End Sub

Private Sub MSFlexGrid1_GotFocus()
  If Text1.Visible = False Then Exit Sub
  'セルからフォーカスが移動した時にテキストボックスの
  'データをセルにコピーしテキストボックスを非表示に設定
  MSFlexGrid1 = Text1
  Text1.Visible = False
End Sub

Private Sub MSFlexGrid1_LeaveCell()
  If Text1.Visible = False Then Exit Sub
  'セルからフォーカスが移動した時にテキストボックスの
  'データをセルにコピーしテキストボックスを非表示に設定
  MSFlexGrid1 = Text1
  Text1.Visible = False
End Sub

'=============================================================
'これで入力・編集・フォーカス移動が可能
'=============================================================
Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
'漢字キーが押された状態での入力が出来ないので
  If KeyCode > 127 Or KeyCode = vbKeyF2 Then '漢字及び[F2]キーの場合
   Call MSFGEdit(MSFlexGrid1, Text1, vbKeySpace)  '空白を代入します。
  End If
End Sub

'タブキーでの移動が出来ないので 別途ダミーのテキストボックスを2個
'見えない所に配置しておいて下さい。
Private Sub Text2_GotFocus()
'タブキーによる右移動
  'テキストボックスは下端か右端の見えない所に配置
  '動きが逆の場合TabIndexの番号を入れ替えて下さい
  With MSFlexGrid1
   If .Col < .Cols - 1 Then
     .Col = .Col + 1
   ElseIf .Row < .Rows - 1 Then
     .Row = .Row + 1
     .Col = 1
   End If
   DoEvents
   .SetFocus
  End With
End Sub

Private Sub Text3_GotFocus()
'シフトキー+タブキーによる左移動
  'テキストボックスは下端か右端の見えない所に配置
  '配置場所の動きに関係しない
  With MSFlexGrid1
   If .Col > 1 Then
     .Col = .Col - 1
   ElseIf .Row > 1 Then
     .Row = .Row - 1
     .Col = .Cols - 1
   End If
   DoEvents
   .SetFocus
  End With
End Sub

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


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


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


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


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



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



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


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


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


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


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
フレキシブルグリッド (MSFlexGrid) コントロール エクセルのように操作する エクセルのようにセルに直接書き込み
階層フレキシブルグリッド (MSHFlexGrid) コントロール 


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