• 締切済み

アクセスで桁数を増やしたい

アクセスで桁数を増やしたい 従業員のデータベースをアクセスで作成しているのですが、 諸般の事情と従業員の出入りが激しいので桁数を増やしたいのですが、 方法がわかりませんのでお願いします 今現在は、 従業員の個人コードを10001の5桁で管理しておりますが、 それを、7桁にしたいのです。 最初の1は、部署を表し、0001は、個人コードです。 部署 1を11と2桁にし 個人コード0001の4桁を00001の5桁にしたいのです たとえば                   旧個人コード  新個人コード 最初の1を11に  10001   1100001    1を11に  12222   1102222       2を12に  23333   1203333    3を13に  32222   1302222    4を21に  43333   2103333    5を22に  51234   2201234    6を31に  68888   3108888    7を41に  70001   4100001したいのです このフィールドのデータ型は数値型で主インデックスです OSはXP ソフトはオフィス2003です。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

色々方法があります。 VBAでレコードを加工 SQLで加工 関数で など。 ーーー VBA,SQLを使わないのがアクセスの主義とすると、DLOOKUP関数でやってみました。 まず変換用のテーブルを作ります。 番号変換T テーブル 内容 ID 先頭桁 加算数 ID 先頭桁 加算数 1 1 1100000 2 2 1200000 3 3 1300000 4 4 2100000 5 5 2200000 6 6 3100000 7 7 4100000 ーーー クエリで フィールド1は、もとの番号で 左1桁: Mid([フィールド1],1,1) 右4桁: Right([フィールド1],4) 変換後: [右4桁]+DLookUp("[番号変換T]![加算数]","[番号変換T]","[番号変換T]![先頭桁]=" & [左1桁]) の3つのフィールドを作る(""のつける場所に苦労する。) ーーー 実行すると 結果 ID フィールド1 左1桁 右4桁 変換後 1 12222 1 2222 1102222 2 23333 2 3333 1203333 3 32222 3 2222 1302222 4 43333 4 3333 2103333 5 51234 5 1234 2201234 6 68888 6 8888 3108888 7 70001 7 0001 4100001

runner0023
質問者

お礼

入院しておりまして、お礼が大変遅れましてどうもすみません。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

#2です。 張り付けたコードが文字数の関係でずれています。 Right(rs!個人 コード, 4)) のようになっていますが、 Right(rs!個人コード, 4)) です。 標準モジュールに張り付けて 実行してみてください。

runner0023
質問者

お礼

入院しておりまして、お礼が大変遅れましてどうもすみません。 失礼ながらまとめてお礼申し上げます。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

#2です。 >Set rs = db.OpenRecordset("tデータ", dbOpenDynaset) で、tデータというのは一応テーブル名です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

いろいろ方法はあります。Select Caseを 使う方法もありますが、一応以下で。 DAOを使っています。参照設定でDAOの設定を 確認してください。 なお、主キーとなっているようなので 一旦、主キーを解除してください。 一応確認のため、テーブルは別名で保存して おいてください。 Sub test() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("tデータ", dbOpenDynaset) rs.MoveFirst Do Until rs.EOF If Left(rs!個人コード, 1) = 1 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "1", "11" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 2 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "2", "22" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 3 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "3", "13" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 4 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "4", "21" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 5 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "5", "22" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 6 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "6", "31" & Right(rs!個人コード, 4)) rs.Update End If If Left(rs!個人コード, 1) = 7 Then rs.Edit rs!個人コード = Replace(Left(rs!個人コード, 1), "7", "41" & Right(rs!個人コード, 4)) rs.Update End If rs.MoveNext Loop rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub

  • szk9998
  • ベストアンサー率45% (1026/2241)
回答No.1

式の確認(実行)はしていませんが、 更新クエリで簡単に直ります。 ただし、主インデックスデータということで、 新しいフィールドを作って、そこへ作成してから、 コピーしたほうがいいかと思いますが・・・ 簡単に更新してしまいますので、ちょっと注意を・・・ 下記がSQL式です。 テーブル1はあたりのテーブル名です。 UPDATE テーブル1 SET テーブル1.個人コード = Switch( [個人コード]>70000,([個人コード]-70000)+4100000, [個人コード]>60000,([個人コード]-60000)+3100000, [個人コード]>50000,([個人コード]-50000)+2200000, [個人コード]>40000,([個人コード]-40000)+2100000, [個人コード]>30000,([個人コード]-30000)+1300000, [個人コード]>20000,([個人コード]-20000)+1200000, [個人コード]>10000,([個人コード]-10000)+1100000); このあとは、おわかりですよね??

runner0023
質問者

お礼

入院しておりまして、お礼が大変遅れましてどうもすみません。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。

関連するQ&A