「みんな教えて! 選手権!!」開催のお知らせ

アクセスで桁数を増やしたい
従業員のデータベースをアクセスで作成しているのですが、
諸般の事情と従業員の出入りが激しいので桁数を増やしたいのですが、
方法がわかりませんのでお願いします
今現在は、
従業員の個人コードを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です。

A 回答 (5件)

色々方法があります。


VBAでレコードを加工
SQLで加工
関数で
など。
ーーー
VBA,SQLを使わないのがアクセスの主義とすると、DLOOKUP関数でやってみました。
まず変換用のテーブルを作ります。
番号変換T テーブル
内容
ID 先頭桁 加算数
ID先頭桁加算数
111100000
221200000
331300000
442100000
552200000
663100000
774100000
ーーー
クエリで
フィールド1は、もとの番号で
左1桁: Mid([フィールド1],1,1)
右4桁: Right([フィールド1],4)
変換後: [右4桁]+DLookUp("[番号変換T]![加算数]","[番号変換T]","[番号変換T]![先頭桁]=" & [左1桁])
の3つのフィールドを作る(""のつける場所に苦労する。)
ーーー
実行すると
結果
IDフィールド1左1桁右4桁変換後
112222122221102222
223333233331203333
332222322221302222
443333433332103333
551234512342201234
668888688883108888
770001700014100001
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/16 10:00

#2です。


張り付けたコードが文字数の関係でずれています。
Right(rs!個人
コード,
4))
のようになっていますが、
Right(rs!個人コード, 4))
です。

標準モジュールに張り付けて
実行してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/16 09:59

#2です。


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

いろいろ方法はあります。

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
    • good
    • 0

式の確認(実行)はしていませんが、


更新クエリで簡単に直ります。

ただし、主インデックスデータということで、
新しいフィールドを作って、そこへ作成してから、
コピーしたほうがいいかと思いますが・・・
簡単に更新してしまいますので、ちょっと注意を・・・

下記が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);

このあとは、おわかりですよね??
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/16 09:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報