- ベストアンサー
accessについて(初心者)
会社で必要なのでaccessの勉強を始めたばかりです。 本を購入して勉強しているのですが具体的にどうすれば良いのか分かりません。 もともと作成されていたものを変更したいのですが、テーブルでフィールド名「年月日」とされていて、「○○○○/○○/○○」 と入力していたものを「年」「月」「日」と別々に入力するにはどのようにしたらよいのでしょうか? どのように質問して良いかもわからないので、意味がわからなかったらすみません(>.<)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
s_husky です。 <年月を固定して日付のみを分離入力するには?>という質問の答えです。 1、フォームに非連結で[年月]を配置します。 2、フォームに非連結で[年月日入力欄]を配置します。 3、フォームに連結で[年月日]を配置します。<非表示で可> ・[年月日入力欄]の初期値が[年月]であれば質問者の要求を満たします。 ・[年月日入力欄]で日付へカーソルが移動すれば質問者の要求を満たします。 ・また、既存レコードと新規レコードで各コントロールの整合性を取る必要があります。 この場合、フォームのコードは次のように書けばよいと思います。 Option Compare Database Option Explicit Private Sub Form_Current() If Me.NewRecord Then Me.年月日入力欄 = Me.年月 Else Me.年月日入力欄 = Me.年月日 End If End Sub Private Sub 年月日入力欄_AfterUpdate() Me.年月日 = Me.年月日入力欄 End Sub Private Sub 年月日入力欄_GotFocus() If Len(Me.年月日入力欄 & "") = 0 Then Me.年月日入力欄 = Me.年月 SendKeys "{F2}", True ElseIf Len(Me.年月日入力欄 & "") = 8 Then SendKeys "{F2}", True End If End Sub
その他の回答 (5)
- O_cyan
- ベストアンサー率59% (745/1260)
>入力のところだけ分けるということはできないですか フォーム上で日・時間を別々に入力したいという事で 簡単に出来ます。 フォーム上にテキストボックスを3つ配置します。例えば年月を表示するコントロールを年月、日をDay1という名前とします。他にフォーム上に年月日というテーブルの年月日のフィールドをコントロールソースとするテキストボックスがあるとします。 年月のプロパティで書式をyyyy/mmとしてデータのコントロールソースに =Format(Date(),"yyyy/mm") とします。これで年月には今月の2006/03が自動で表示されるようになります。 日のDay1のプロパティの更新後処理のイベントにコードビルダで Private Sub Day1_AfterUpdate() Me!年月日 = CDate(Me!年月 & "/" & Day1) End Sub のようにします。 これで日にちにあたるDay1に数字を入力しEnterキーで確定させれば年月日に日付を代入入力できます。 間違った日付(例えば2006/03/35になるような)を入力すると型の不一致のエラーになります。エラートラップが必要になりますが入力する日にちを間違えないようにすればこれだけで入力できます。 開始時間・終了時間は従来通り(年月日と一緒にではなく別々のフィールドで保存)のフィールドでフォーム上で入力すれば良いと思います。
s_husky です。 しりきれトンボでした。 ******************* 入力フォームのコード ******************* Option Compare Database Option Explicit Private Sub 月_AfterUpdate() 年月日更新 2 End Sub Private Sub 日_AfterUpdate() 年月日更新 3 End Sub Private Sub 年_AfterUpdate() 年月日更新 1 End Sub Public Sub 年月日更新(ByVal I As Integer) On Error GoTo Err_年月日更新 Me.年月日 = CDate(Me.年 & "/" & Me.月 & "/" & Me.日) Me.Refresh Exit_年月日更新: Exit Sub Err_年月日更新: MsgBox "不正な年月日が入力されました" If I = 1 Then Me.年.SetFocus ElseIf I = 2 Then Me.月.SetFocus Else Me.日.SetFocus End If SendKeys "{UP}", False SendKeys "{ESC}", False Resume Exit_年月日更新 End Sub ※ただし、補足を読めば、個別入力の必要は全くなさそうですね! ※単に、「入力の初期設定をしたいが?」という質問ですね! ※あーっ!シンド!というところです。
<出来るならば考え直すべきです!> ※思ったよりコードが煩雑です。 ※思ったより経験が必要です。 という事を踏まえて... 1、入力フォームに非連結タイプのテキストボックスを配置します。 ・名前は<年><月><日>と仮定します。 2、フォームのロード時、新規レコード発生時の<年><月><日>の初期値設定が必要です。 3、<年>だけ更新されても<年月日>が更新されるように<年月日更新関数>を用意します。 4、<年月日>更新時エラーが発生した場合、<年><月><日>のどれかにカーソルを戻す仕掛けをします。 5、<年月日>を更新してもフォームに反映されないケースもあるというAccess固有の不具合対策も行います。 以上を完璧に行う限りで分離が可能です。 ******************* [年]のプロパティ ******************* 書式=0000 規定値==Format([年月日],"yyyy") ******************* [月]のプロパティ ******************* 書式=00 規定値==Format([年月日],"mm") ******************* [日]のプロパティ ******************* 書式=00 規定値==Format([年月日],"dd") ******************* [熱月日]のプロパティ ******************* コントロールソース=年月日 書式=yyyy/mm/dd 規定値=Now() ******************* 入力フォームのコード ******************* Option Compare Database Option Explicit Private Sub 月_AfterUpdate() 年月日更新 2 End Sub
お礼
ご返答ありがとうございました(^^) 難しそうなのでじっくり理解しながらしてみようと思います。また質問することがあると思いますので、その時はよろしくお願いします<(_ _)>
- O_cyan
- ベストアンサー率59% (745/1260)
>フィールド名「年月日」とされていて「○○○○/○○/○○」と入力していたものを「年」「月」「日」と別々に入力するにはどのようにしたらよいのでしょうか テーブルのフィールドの変更ということで良いのでしょうか? mdbを開きデータベースウィンドウのテーブルからその変更したいテーブルを選び右クリックでデザインビューをクリックしデザインビューで開きます。 フィールドに行を挿入するか一番したに新たに追加しフィールド名を年と月と日を順に作ります。データ型は日付で書式に年はyyyy、月はmm、日はddとすれば別々に入力できる様になります。または年・月・日のデータ型を長整数型にしても入力出来ますが入力規則等で日付に該当するような縛りを入れておかないと入力ミスの元になりかねません。 フォームで入力を行っているのであればフォームに年・月・日の各コントロールを新たに配置すれば入力できます。 各フィールドが出来たら年月日のフィールドを削除しても良いですが年・月・日の各フィールドから年月日を作成する事もできます。 用途に合わせての事だと思いますが年・月・日を別々に保存して管理するより通常は年月日で管理する方が多いと思います。
補足
ご回答ありがとうございます。 年月日を分けて入力したいというのが、スケジュールの管理で利用しており、今までは社員コード、年月日、仕事内容、開始時間、終了時間をテーブルですべて手入力していたものを1人ごとに ・社員コード ・仕事内容 ・○○○○年○○月 まで確定させて、あとは日にちと時間を入力するだけにするように変更したいのです。 説明が足りなくてさらにわかりにくくてすみません・・・(>_<、)入力のところだけ分けるということはできないですか?
フィルードの書式を yy mm dd の3つに分けてください。 現状のデータはクエリーを作成して、 今の日付のデータを3つに区分して、テーブルに置き換えれば、使用できるはずです。
補足
さっそくご回答ありがとうございます(><) 大変申し訳ないのですが、勉強3日目なのでもう少しだけ詳しく説明してもらっても良いでしょうか(>_<、) フィールドの書式を3つに分けるというのはどうしたらいいですか?
お礼
ありがとうございました(^^) ゆっくり考えないとまだわからないのでしっかり理解しながらがんばりたいと思います!