• 締切済み

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

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

  • アクセスで桁数をそろえ数字の前に0をつけたい

    例えば、 12 345 5678 という数字があり、桁数を6桁表示にさせます。 000012 000345 005678 エクセルであれば =TEXT(A1,"000000") で可能ですがアクセスのフィールドでは TEXTが使用できません。 どうのようにすればいいのでしょうか?

  • アクセスのNZ関数のことで教えて頂きたいです。

    アクセスのNZ関数のことで教えて頂きたいです。 アクセス2000です。クエリで 売上日計: nz([売上計],0) というフィールドにプロパティ書式で#,###を入れましたがそうなりません。そのクエリの [売上計]に同じことをしましたら出来ました。 桁数が多いので、桁区切りを入れたいのですが、何か方法があるのでしょうか。 よろしくお願いします。

  • 主キーが二つないと、フォーム入力が思ったようにできないのか?

    こんばんは。 従業員の出入りが激しいため、従業員の入社時の「志望動機」と 「退社理由」をデータベースで残して 分析しようという試みのため、 入力用にフォームを作ったけどうまくいきません。 (1)社員基本情報テーブル(主キーは、社員コード。フィールドは、社員コード、氏名、入社日、退社日、部署) (2)入退社テーブルを新規に作成(主キーは社員コード。フィールドは志望動機、退社理由) (1)、(2)を社員コードで結合してクエリを作成しました。 このクエリを元に、フォームを作成しました。 こちらで作成したいフォームのイメージは 社員コードを入れると、氏名と部署、入社日、退社日が自動的に参照。 あとは志望動機と退社理由を入れる。 ところが、実際には 社員コードを入れても自動的に参照は行われず、ただ、一度フォームを閉じてもう一度開けるとそこには上記データが参照されてきます。 ちなみに、(2)で主キーを社員コードと志望動機の二つにすると うまくいったのです。 うまくいった理由も分からないですし、うまくいかなかった理由も分かりません。 これは何がどう悪くてこのようになっているのでしょうか?

  • Access フィールド内の値で、右端から5桁目の値だけを抽出する方法について

    Accessのフィールド内にある半角英数字(10桁~20桁)の右端から5桁目(または左端から5桁目)だけを抽出する方法を教えて下さい。 以下のように 各フィールド内に値が入力されています。 入力されている桁数は10桁以上20桁未満です。(全て半角) ◆元データ(レコードが10万件以上ある)  フィールド1    フィールド2     フィールド3 (1) 12345678910    11aa22bb33cc44dd55  1010101010101010 (2) 9876540000     aaaaaabbbbbb1111    11111111111111 ◆右端から5桁目だけを抽出する  フィールド1    フィールド2     フィールド3 (1)  7          4          0 (2)  4           1           b よろしくお願い致します。

  • Access 主キーの変更について

    調査データの集計、蓄積用のDBを制作しております。 制作しているDBは主キーに県コードが含まれています。 そのため、調査データの住所に変更があるとコードを変えなければなりません。 AccessでのDBはほぼ完成しており、今からコードの形態を変更することは避けたいです。(もともと古い独自のDBのデータを流用しています。) 現在、主キーに県コードが含まれていますが、それとは別に県コードフィールドを設けています。 ※コードの形態 (先頭の二桁又は一桁が県コード、コードは4桁又は5桁) 例   主キー 北海道 1001 東京  13199 沖縄  47001 新規のデータを入力する際に主キーを入力しているのですが VBAの知識がないので県コードは個別に入力しています。 住所が変わり県が変更になった場合主キーを変更する必要が あるのですが一対多でリレーションシップをいくつもしてあり サブフォームなども使用してます。 主のフォームで主キーを変更した場合、関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか?

  • accessのフィールドに10桁の数字は入らない??

    あるCSVからAccessのテーブルに読みこんだのですが 一部のフィールドで文字の欠落がありました。 元のCSVの内容どおりに、手入力で欠落した箇所に 値を入れようとしたのですが、どうも9ケタの数字は入るのですが 10桁の数字は入らないようでエラーが出ます。 ★メッセージは以下の通りです。  このフィールドに入力した値が正しくありません。  たとえば、数値型のフィールドに文字列を入力しました。 Accessの仕様として、数字の桁数制限があるのでしょうか? また、解決策は何かないでしょうか? XP2、ACCESS200です

  • ACCESS2003のテキストボックスの最大桁数について

    Access2003のテキストボックスには、MaxLengthプロパティがありません。変わりに以下のような、コードで対応しようと試みたのですが、いまいち動きが悪いのです。以下のコードは、最大4桁までテキストボックスに入力可能とします。 Private Sub txtBox_KeyPress(KeyAscii As Integer)   If Len(txtBox.Text) > 3 Then     KeyAscii = 0   End If End Sub 最大入力桁数4桁を実現していますが、4桁入力後『Insert』キーを押下して、上書きモードでの修正ができません。 以下例1はOKですが、例2が実現できません。 例1:1回目新規入力『12』 ⇒ 2回目修正『123』⇒3回目修正『1234』 例2:1回目新規入力『1234』 ⇒ 2回目修正『9999』 VBのMaxLengthプロパティのようなことはできないのでしょうか?

  • Accessの短いテキスト型の後ろ空白埋めさせない

    Accessで短いテキスト型で項目を定義してデータを登録すると、 設定した桁数まで後ろに空白が勝手に埋まります。 例えばフィールドサイズを10桁に設定して "abcdefg"という7桁データを入れると、 "abcdefg"+半角スペース3桁になります。 半角スペースで埋まらないようにできませんか?

  • 桁数の異なるコードを分解したい

    製品のコードを分類別に表にしたいと考えています。 例えば コード     機能1 機能2 機能3 AABBCCC  AA   BB   CCC のような感じです。 しかし、あるメーカーのコードは機能部分の桁数が決まっていません。 AABCCC、ABBBCC、AABBBBCC、などのように1~4桁ぐらいの英数字で機能分けされています。 機能1や機能2に登場する組み合わせは決まっています。 まずはExcelやAccessでの表作りの検討を始めているのですが、 どのように自動化できるものでしょうか。 Officeシリーズでは無理なのでしょうか。。。 どうぞよろしくお願いします。

  • フィールドの分割

    DBはアクセスなのですが、例えばフィールド1の桁数が 10桁とします。しかし実際VB上のテキストで入力させ る桁数を5桁とした場合、SELECT文で比較する時にDBの フィールド1の5桁分だけを持ってきたいわけなんですが 5桁のみをどうやって把握させれば良いのでしょうか? 初心者で申し訳ありませんが、よろしくお願いします。

専門家に質問してみよう