Windows XP & Office 2003 Access 2003

オートナンバー型を使わずに[数値型]を使って自動的に連番を入力する

投稿日:2017年1月7日 更新日:

Accessのテーブルでコードなどに、オートナンバー型を使っているとなにかと不便を感じることもあります。

番号に欠番が生じた場合、再度、番号を振りなおすのが面倒なんですね。

オートナンバーを振り直す方法はいろいろあります。

以下は、私が一番簡単だと思う方法を解説しています。

オートナンバー型の番号の振り直し(切り取りと貼り付けでリセット)

Accessのテーブルでフィールドのデータ型を[オートナンバー型]にして、レコードを削除すると、そのレコードは欠番になります。 以下のテーブ ...

続きを見る

追加クエリを使って振り直す方法もあります。

追加クエリを使ったオートナンバー型フィールドの番号の振り直し

オートナンバー型のあるテーブルでレコードを削除すると、欠番が出てしまいます。 Accessにとっては問題はなくても、見た目としては1から綺麗 ...

続きを見る

Excelにエクスポートして番号を振りなおして、再度、それをインポートする方法もあります。

オートナンバーの振り直しができても、やっぱり、できるだけ面倒なことは避けたいですよね。

オートナンバー型を使わずに自動的に連番を入力していく方法です。

いくつか方法はあるようですが、その中の1つの方法と思ってくださいね。

データ型を数値型に変更

下のような[管理テーブル]があります。[ナンバー]フィールドのデータ型は、数値型にします。

主キー]の設定をします。

テーブルのデザインビュー[データ型]-[数値型]

そして、[管理テーブル]を基に作成した入力用のフォームがあります。

[管理テーブル]を基に作成した入力用のフォーム

注意フィールド名を[NO]にすると、動作しないので[NO]以外のフィールド名にしてください。

挿入前処理のイベントで設定

入力用のフォームをデザインビューで開いて、フォームセレクタをダブルクリックして、フォームのプロパティを表示させます。

[イベント]タブから[挿入前処理]プロパティの[ビルダー選択]ボタン[…]をクリックします。

フォームのプロパティ[イベント]タブの[挿入前処理]

[ビルダの選択]ダイアログボックスから[コードビルダ]を選択して[OK]ボタンをクリックします。

[マクロビルダー]で設定する方法も解説しています。

[ビルダの選択]ダイアログボックスの[コードビルダ]

下のようにコードを書きます。

[DCount]と[DMax]の[ナンバー]は、テーブルのフィールド名です。[管理テーブル]は、テーブル名です。

[Me!]は、私自身という意味です。[Me![ナンバー]]は、フォームのテキストボックス[ナンバー]に入力するということです。

赤線の部分だけ書き直します。

管理テーブルのレコード件数を数えて、0だったら1を返して、それ以外なら管理テーブルの中で一番大きな値に1を足したものを返すというものです。

If DCount("ナンバー", "管理テーブル") = 0 Then
Me![ナンバー] = "1"
Else
Me![ナンバー] = Format(DMax("ナンバー", "管理テーブル") + 1)
End If

VBAコード

これでOKです。

もしも、データが入力された後なら、下のように一行だけでもいいです。 ([ナンバー]フィールドに[1]が入力された後ならという意味です。)

Me![ナンバー] = Format(DMax("ナンバー", "管理テーブル") + 1)

VBAコード

ビューを切り替えて、入力してみます。

ナンバーには入力しないで[所属]フィールドに選択(入力)した時点で自動的に番号が振られると思います。

設定後のフォームビュー

マクロビルダーで設定するには

マクロアクションで設定する方法を追記しておきます。

画像は、Access2010です。

フォームをデザインビューで開いて、フォームのプロパティを表示します。

プロパティシートで[フォーム]が選択されていることを確認します。

もし、[フォーム]以外になっている場合は、▼ボタンをクリックして一覧から[フォーム]を選択するか、フォームのルーラーの左端にある■をクリックすると、[フォーム]が選択されます。

[イベント]タブの[更新前処理]の[ビルダー選択]ボタン[…]をクリックします。

フォームのプロパティ[挿入前処理]

[ビルダーの選択]ダイアログボックスが表示されますので、[マクロビルダー]を選択して[OK]ボタンをクリックします。

[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択

マクロウィンドウが表示されます。

[新しいアクションの追加]の▼ボタンをクリックします。

[新しいアクションの追加]の▼ボタンをクリック

アクションの一覧から[If]を選択します。

アクションの一覧から[If]を選択

そして、以下のように入力します。

DCount("ナンバー","管理テーブル")=0

[if]のテキストボックスに入力

[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]ボタンをクリックします。

すぐ下にある[新しいアクションの追加]の▼ボタンをクリックして、[値の代入]を選択します。

一番下までスクロールすると、見つかります。

[新しいアクションの追加]で[値の代入]

[値の代入]アクションの[アイテム]には、テキストボックス名を入力します。

[ナンバー]

[式]には、[1]と入力します。

入力が終わったら、[Elseの追加]をクリックします。

[値の代入]アクションを完成

再度、アクションの一覧から[値の代入]を選択します。

[アイテム]にはテキストボックスの名前です。

[式]には、以下のように入力します。

DMax("ナンバー","管理テーブル")+1

[Else]に[値の代入]アクションを追加

以下のように完成したら、上書き保存して、マクロウィンドウを閉じます。

アクションの完成

プロパティには、[埋め込みマクロ]と表示されます。

マクロアクション設定後のプロパティ

参考[ビルダーの選択]ダイアログボックスで[コードビルダー]を選択して、コードを記述した場合は[イベントプロシージャ]と表示されます。

[コードビルダー]で設定後のプロパティ

コードは、以下のように省略しても動作すると思います。

If DCount("ナンバー", "管理テーブル") = 0 Then
  ナンバー = 1
Else
  ナンバー = (DMax("ナンバー", "管理テーブル") + 1)
End If

コードで記述するか、マクロで設定するかの違いについては、以下の記事で解説しています。

マクロアクション(マクロビルダー)とVBA(コードビルダー)

Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一 ...

続きを見る

[ナンバー]テキストボックスにカーソルが移動しないように設定

ナンバーテキストには、カーソルが移動しないようにした方がいいかもしれませんね。

[ナンバー]テキストボックスのプロパティの[データ]タブから、[使用可能]を[いいえ]、[編集ロック]を[はい]にします。

これで、ナンバーのテキストボックスにはカーソルは移動しなくなります。

[ナンバー]テキストボックスのプロパティ[使用可能]を[いいえ]、[編集ロック]を[はい]

ビューを切り替えて、確認してみてください。

フォームビューで確認

レコードを削除して欠番を使用する場合

管理テーブルでナンバー3のレコードを削除したとします。

ナンバー3のレコードを削除したテーブル

テーブルで新しくナンバー3を入力します。

ナンバー3のレコードを追加

フォームを開くと、ちゃんと並び変わっています。もちろんテーブルも昇順になります。

フォームビュー

参考DMax関数とDCount関数については、Microsoftの記事を参照してください。

DMin、DMax 関数 - Access(Microsoft)

DCount 関数 - Access(Microsoft)

DMax関数は、以下の記事でも使用しています。

ファイルのバージョンが異なる場合はメッセージを表示して更新をお知らせ

Accessでデータベースを作成して、それを複数人で共有する場合、データベースを分割して、リンクテーブルがあるフロントエンド側にフォームやレ ...

続きを見る

以下は、DCount関数を使用した記事です。

レコード検索時に該当するレコードがない場合はメッセージを表示する

フォームに検索ボックス(テキストボックス)を設置して、管理番号を入力したら該当のレコードを抽出する仕組みを作ります。 その時、検索ボックスに ...

続きを見る

重複データが入力されたらオリジナルのメッセージを表示する

Accessのフォームで受付番号を入力するように作成しています。 受付番号を入力したときに、既に入力済みの番号であればメッセージウィンドウを ...

続きを見る

0を除く平均値を求めるには(Sum関数とDCount関数)

Accessでアンケート集計を作成することになりました。 各質問に[0から5]の5段階の評価をつけもらうことにしました。 ただし、[0]は、 ...

続きを見る

テーブル/クエリにレコードが1件もない時にメッセージを表示する

Accessのテーブル/クエリでレコードが1件もない時、そのテーブルを基にして作成したフォームを開こうとする場合は、[データがありません]と ...

続きを見る

重複しないデータの個数とレコードの抽出件数をテキストボックスに自動表示

Accessのフォームに重複しないデータの個数を表示する方法を紹介します。 下のようにフォームヘッダーのテキストボックスに部署数の重複しない ...

続きを見る

フィールドの同じ値の数をカウントするにはクエリでグループ化

クエリのグループ化は、グループごとに集計できる便利な機能です。 たとえば、1つのフィールド内の同じデータをグループ化して、合計やカウント、平 ...

続きを見る

検索

ほかの記事も検索してみませんか?

Access / Excel / PowerPoint / Word

Profile

執筆者/はま

-Windows XP & Office 2003 Access 2003

Copyright © 2001-2024 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2024 AllRights Reserved Powered by AFFINGER4.