ExcelでRDB(リレーショナルデータベース)を操作してみようという連載のその23です。前回の記事はこちらです。
入力規制機能の追加
前回はデータ入力機能を実装してみました。実際に動かして結果を確認できると面白くなってきますね!!
でも、何でも入力できればいいというものではありません。まず、データ型に合った入力以外は受け付けないようにしましょう。Excelのセルの入力規制、書式設定を使えば実現可能だと思います。
入力規制を考える
それでは、今回実装する入力規制を考えてみましょう。現在データ入力ツールがサポートしているデータ型と対応する入力規制の設定です。また、データ入力時にVBA側でもチェックしましょう。
データ型 | 入力規制 | セルの書式設定 | データ入力時の確認 |
---|---|---|---|
テキスト | 文字列 | ||
メモ | 文字列 | ||
整数 | 整数 -32768~32767 | ||
長整数 | 整数 -2147483648 ~2147483647 |
||
単精度浮動小数点 | IsNumericで確認 | ||
倍精度浮動小数点 | IsNumericで確認 | ||
日付 | 日付 | IsDateで確認 | |
通貨 | IsNumericで確認 |
入力規則とセルの書式設定
それでは機能を実装していきましょう。まずは入力規則とセルの書式設定からです。以下のプロシージャを作成しました。
'入力規則とセルの書式を設定します Public Sub SetValidaion(rng As Range) TopSheet.Unprotect rng.Validation.Delete Select Case rng.Offset(0, -2).Value Case "整数" rng.Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="-32768", Formula2:="32767" Case "長整数" rng.Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="-2147483648", Formula2:="2147483647" Case "テキスト", "メモ" rng.NumberFormatLocal = "@" Case "日付" rng.NumberFormatLocal = "yyyy/mm/dd hh:mm:ss;@" End Select TopSheet.Protect Userinterfaceonly:=True End Sub
入力セルの2つ左のセルでデータ型を判定して、対応する処理をしています。引数がRangeになっていますので、このプロシージャを前回作成したプロシージャDispColumnListでセルのロック解除の直後で呼び出しましょう。
データ入力時の確認
お次はデータ入力時の確認です。データ型に応じてIsNumericかIsDateで確認します。プロシージャWorksheet_Changeの処理を以下の様に変更しました。上と同様にデータ型を確認した上で、値が正しいかどうかを確認します。
'選択テーブルが変更された際にカラムリストの表示を変更します '入力された値の確認を行います Private Sub Worksheet_Change(ByVal Target As Range) 'カラムリスト表示の更新 If Target.Address = Me.Range("TableName").Address And Target.Text <> "" Then DispColumnList Me.Range("FileName").Text, Me.Range("TableName").Text End If '入力された値の確認 If Not Target.Locked Then Select Case Target.Offset(0, -2).Value Case "単精度浮動小数点", "倍精度浮動小数点", "通貨" If Not IsNumeric(Target.Value) Then MsgBox "数値ではありません" Target.ClearContents End If Case "日付" If Not IsDate(Target.Value) And Target.Value <> "" Then MsgBox "日付型ではありません" Target.ClearContents End If End Select End If End Sub
今回のプログラムとサンプルファイルは、以下からダウンロードできます。興味のある人は試してみてください。(サンプルなので実務には使用しないでください!!)
23_データ入力ツール④.zip - Google ドライブ
次回は制約
いかがでしょうか?これで少し使いやすくなったと思います。次回は制約です。主キーや外部キーなどに設定されているフィールドは、入力内容に制約がかかります。この仕様に対応していこうと思います。お楽しみに!!