Windows XP & Office 2003 Access 2003

オートナンバー型を使わずに自動的に連番を入力する

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

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

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

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

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

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

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

続きを見る

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

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

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

続きを見る

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

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

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

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

データ型を数値型に変更

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

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

テーブル データ型

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

テーブル

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

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

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

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

イベントタブ

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

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

ビルダの選択

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

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

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

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

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

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

VBE

これでOKです。

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

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

VBE

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

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

フォームビュー

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

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

画像は、Access2010です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[ナンバー]

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

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

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

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

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

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

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

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

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

アクションの完成

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

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

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

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

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

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

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

[マクロビルダー]と[コードビルダー]を使う場合に気をつけること

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

続きを見る

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

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

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

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

データタブ

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

フォームビュー

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

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

テーブル

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

入力

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

フォームビュー

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

DMin、DMax 関数 - Access(Microsoft)

DCount 関数 - Access(Microsoft)

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

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

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

続きを見る

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

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

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

続きを見る

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

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

続きを見る

テーブルにレコードがない時にメッセージウィンドウを表示する

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

続きを見る

重複しないデータの個数とレコードの抽出件数を自動表示

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

続きを見る

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

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

続きを見る

検索

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

Profile

執筆者/はま

-Windows XP & Office 2003 Access 2003

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

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