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.使用コントロールと配置図 |
まず、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) コントロール |