- 締切済み
アクセスで桁数を増やしたい
アクセスで桁数を増やしたい 従業員のデータベースをアクセスで作成しているのですが、 諸般の事情と従業員の出入りが激しいので桁数を増やしたいのですが、 方法がわかりませんのでお願いします 今現在は、 従業員の個人コードを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です。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
色々方法があります。 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
- piroin654
- ベストアンサー率75% (692/917)
#2です。 張り付けたコードが文字数の関係でずれています。 Right(rs!個人 コード, 4)) のようになっていますが、 Right(rs!個人コード, 4)) です。 標準モジュールに張り付けて 実行してみてください。
お礼
入院しておりまして、お礼が大変遅れましてどうもすみません。 失礼ながらまとめてお礼申し上げます。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
#2です。 >Set rs = db.OpenRecordset("tデータ", dbOpenDynaset) で、tデータというのは一応テーブル名です。
- piroin654
- ベストアンサー率75% (692/917)
いろいろ方法はあります。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)
式の確認(実行)はしていませんが、 更新クエリで簡単に直ります。 ただし、主インデックスデータということで、 新しいフィールドを作って、そこへ作成してから、 コピーしたほうがいいかと思いますが・・・ 簡単に更新してしまいますので、ちょっと注意を・・・ 下記が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); このあとは、おわかりですよね??
お礼
入院しておりまして、お礼が大変遅れましてどうもすみません。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。
お礼
入院しておりまして、お礼が大変遅れましてどうもすみません。 当方の技量は、はじめてシリーズの程度なのでよくわかりませんが、書かれていることが理解 できるように本を探してみます。 ありがとうございました。