Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1291 / 2272 ツリー ←次へ | 前へ→

【7670】顧客コードの頭に定型の番号を振る TB1 06/4/10(月) 17:12 質問[未読]
【7671】Re:顧客コードの頭に定型の番号を振る まさ7251 06/4/10(月) 22:52 発言[未読]
【7672】Re:顧客コードの頭に定型の番号を振る TB1 06/4/11(火) 11:28 発言[未読]
【7673】Re:顧客コードの頭に定型の番号を振る まさ7251 06/4/11(火) 12:44 発言[未読]
【7678】Re:顧客コードの頭に定型の番号を振る The-Third-Man 06/4/12(水) 14:39 回答[未読]
【7680】Re:顧客コードの頭に定型の番号を振る TB1 06/4/12(水) 15:26 発言[未読]
【7831】Re:顧客コードの頭に定型の番号を振る TB1 06/5/17(水) 15:01 質問[未読]
【7856】Re:顧客コードの頭に定型の番号を振る 855 06/5/23(火) 17:46 発言[未読]
【7863】Re:顧客コードの頭に定型の番号を振る TB1 06/5/24(水) 15:45 発言[未読]
【7864】Re:顧客コードの頭に定型の番号を振る 855 06/5/24(水) 16:25 発言[未読]
【7871】Re:顧客コードの頭に定型の番号を振る TB1 06/5/25(木) 11:15 質問[未読]
【7873】Re:顧客コードの頭に定型の番号を振る 855 06/5/25(木) 12:48 発言[未読]
【7874】Re:顧客コードの頭に定型の番号を振る TB1 06/5/25(木) 16:21 質問[未読]

【7670】顧客コードの頭に定型の番号を振る
質問  TB1  - 06/4/10(月) 17:12 -

引用なし
パスワード
   宜しくお願いします。
12桁の顧客コードを作成する際、頭5桁は22220と決まっております。
次に02など各店番が来ます。そして、下5桁が個々人でオリジナルのナンバーになっています。

フォームで新規登録をする際、店番を入れると自動で
2222002
のようになり、下5桁のみの入力でコードを生成するように作りたいのです。

会員情報というテーブルを使って下記のようなコードを書いたのですが、間違ってました。

Private Sub Form_BeforeInsert(Cancel As Integer)
  If DCount("正規会員コード", "会員情報") = 0 Then
  Me![正規会員コード] = "222200000001"
  Else
  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
  ("会員番号", "会員情報") + 1, "000000000000")
  
  End If
  
End Sub

考え方は、頭に22220という整数をつけ、会員情報テーブルの店コードを拾い、オリジナルの5桁会員番号を入力すると、会員情報テーブルの正規会員コードに12桁のコードが生成される、というつもりでした。

コードは赤くなってました。ろくに知識無いままやっております。
どうか教えてください。

【7671】Re:顧客コードの頭に定型の番号を振る
発言  まさ7251  - 06/4/10(月) 22:52 -

引用なし
パスワード
   >会員情報というテーブルを使って下記のようなコードを書いたのですが、間違ってました。
>
>Private Sub Form_BeforeInsert(Cancel As Integer)
>  If DCount("正規会員コード", "会員情報") = 0 Then
>  Me![正規会員コード] = "222200000001"
>  Else
>  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
>  ("会員番号", "会員情報") + 1, "000000000000")
>  End If
>End Sub

どこの部分でエラーになっているかくらいは、質問者がきっちりと
明記すべきかと思いますけど。

Format関数に3つも引数があるのはなぜですか?
2番目の引数部分、何をしようとしているのですか?

>考え方は、頭に22220という整数をつけ、会員情報テーブルの店コードを拾い、
>オリジナルの5桁会員番号を入力すると、会員情報テーブルの正規会員コードに
>12桁のコードが生成される、というつもりでした。

考え方とコードを見比べてみても、
どこでどの何をやろうとしているのかがまったくわかりません。

上記コードだと。
1.会員情報が0件(空っぽ)の場合、
 正規会員コード="222200000001"
2.それ以外
 エラーと思われる行。
 (何をしようとしているのか不明)

>コードは赤くなってました。ろくに知識無いままやっております。

コンパイルエラーくらいは、ヘルプや使用例を見て、
ご自分でなんとかするべきかとは思いますけど。

適当に書いたコードを投稿して直してもらおうという
考え方自体がおかしいと感じますけど、どうでしょうか。

【7672】Re:顧客コードの頭に定型の番号を振る
発言  TB1  - 06/4/11(火) 11:28 -

引用なし
パスワード
   ▼まさ7251 さん:
>>会員情報というテーブルを使って下記のようなコードを書いたのですが、間違ってました。
>>
>>Private Sub Form_BeforeInsert(Cancel As Integer)
>>  If DCount("正規会員コード", "会員情報") = 0 Then
>>  Me![正規会員コード] = "222200000001"
>>  Else
>>  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
>>  ("会員番号", "会員情報") + 1, "000000000000")
>>  End If
>>End Sub
>
>どこの部分でエラーになっているかくらいは、質問者がきっちりと
>明記すべきかと思いますけど。

  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
  ("会員番号", "会員情報") + 1, "000000000000")
この部分が赤でした。

>
>Format関数に3つも引数があるのはなぜですか?
>2番目の引数部分、何をしようとしているのですか?
投稿したとおり、以下のようなつもりでした。
 考え方は、頭に22220という整数をつけ、会員情報テーブルの店コードを拾い、
 オリジナルの5桁会員番号を入力すると、会員情報テーブルの正規会員コードに
 12桁のコードが生成される、というつもりでした。000000000000は12桁を指定す るものです。


>考え方とコードを見比べてみても、
>どこでどの何をやろうとしているのかがまったくわかりません。

>上記コードだと。
>1.会員情報が0件(空っぽ)の場合、
> 正規会員コード="222200000001"
>2.それ以外
> エラーと思われる行。
> (何をしようとしているのか不明)
>
>>コードは赤くなってました。ろくに知識無いままやっております。
>
>コンパイルエラーくらいは、ヘルプや使用例を見て、
>ご自分でなんとかするべきかとは思いますけど。
ここはなんとかします。


>適当に書いたコードを投稿して直してもらおうという
>考え方自体がおかしいと感じますけど、どうでしょうか。

サンプルを改造してのことなので適当ではないと思いますが、まささんにはおかしいと感じていらっしゃる。

分からないことは分からないと正直に書いているつもりですが、何がしたいかまったくわからない、と言われるなら、まささんには無理に回答いただかなくても結構です。丸投げではなく、とっかかりがこれしか書けない、ということもあります。
それで無視されても仕方の無いことだと覚悟してのことです。

「初心者の質問も大歓迎です」とここのポリシーにも書いてあります。
「質問者を批判しないでください」ともあります。が、この気持ちは少なからず理解は出来ます。


どなたか、こんな奴でもヒントを与えてやろう、という方がいらしたら宜しくお願いします。

【7673】Re:顧客コードの頭に定型の番号を振る
発言  まさ7251  - 06/4/11(火) 12:44 -

引用なし
パスワード
   >  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
>  ("会員番号", "会員情報") + 1, "000000000000")
>>
>>Format関数に3つも引数があるのはなぜですか?
>>2番目の引数部分、何をしようとしているのですか?
>投稿したとおり、以下のようなつもりでした。
> 考え方は、頭に22220という整数をつけ、会員情報テーブルの店コードを拾い、
> オリジナルの5桁会員番号を入力すると、会員情報テーブルの正規会員コードに
> 12桁のコードが生成される、というつもりでした。000000000000は12桁を指定するものです。

・”頭に22220という整数をつけ”というのは問題ないかと思います。
(整数なのか、文字列なのかという観点は放っておくとして。)

・”会員情報テーブルの店コードを拾い”というのは、
 ”dcount("店番", "会員情報")”この部分でやろうとしていますか?
 もしそうなら、これでは、会員情報というテーブルのデータ数が返ってくるだけです。
 中身や構成が判らないので、一概にダメかどうかは判りませんが。
 DLookUpの方が適しているのではないかと思います。
 ちなみに、何らかの条件も要るような気がしますが。(あるいは1件しかない?)

・”オリジナルの5桁会員番号を入力する”とは?
 ”("会員番号", "会員情報") + 1”この部分でやろうとしているのでしょうか?
 コレだけでは構文エラーなので、何ともコメントのしようがありませんが。
 ”入力する”とあるので、画面から入力されているのでしょうか?

・”12桁のコードが生成される”とありますが、先頭に5桁固定で付加しているので、
 format関数へ000000000000を指定するのはおかしいと思います。

※上記全てのことを1行で処理しようとする前に、
 1つづつのことを分けて記述し、1つづつ解決していったほうが
 判りやすいかと思いますよ。 


追伸:
 私の発言にて不快に感じられたようですので、申し訳ありません。
 何をどういっても、関係ない方向に発展するだけですので、
 これ以上は特に触れません。

【7678】Re:顧客コードの頭に定型の番号を振る
回答  The-Third-Man  - 06/4/12(水) 14:39 -

引用なし
パスワード
   会員番号の自動採番を行いたいんですよね。
正規会員コードとありますが、そうでない方も同じテーブルに入力されているのでしょうか?
取り敢えず、コードについて書きますね。

>Private Sub Form_BeforeInsert(Cancel As Integer)
>  If DCount("正規会員コード", "会員情報") = 0 Then
>  Me![正規会員コード] = "222200000001"
 
 まず、この部分ですが条件分岐させるために、Dcountで件数を拾い、件数が「0」つまり、まだ誰も会員登録されてなければ、めでたく第1号として「22220 00 00001」の初期値が与えられるんですよね。
 ここで気づくことは、店番号の選択がされていないことです。
 このコードのままでは、すべてのレコードを拾って、1件もなければ店番号「00」(そういう店番号はないと思いますが)の会員を初期化することになります。
 ですから、このままでは不都合なのでDcount関数に条件を設定しなければなりません。

  If DCount("正規会員コード", "会員情報","店番号=02") = 0 Then
  Me![正規会員コード] = "2222 02 000001" 
                ↑↑(スペースを入れたのは強調するためです。実際には連続数字でよいです)

 これで店番号「02」の会員のみがDcountで拾われ、誰も登録していなければ、第1号として登録されるはずです。
 店が複数ある場合は、コンボボックスなりで選択するようにすればいいかもしれません。
 その場合は、

  If DCount("正規会員コード", "会員情報","店番号=' & Me.cmb店番号 & "'") = 0 Then
  Me![正規会員コード] = "22220" & me.cmb店番号 & "00001"

で、よいかと思われます。(「cmb店番号」こちらが勝手につけたもので、任意の名前でかまいません。「Me」は入力するフォームを指します) 
 次に、もしすでに同じ店で会員登録されていた場合ですが、ここは、Dcount()ではなくDMax関数を使うべきだと思います。

  Else
   me![正規会員コード] =Fromat(DMax("正規会員コード","会員情報","店番号=02")+1,"000000000000")
  End If
End Sub
 
 これで対象とする店から正規会員の最大コード番号を選ぶことになり、それに「1」を加算することによって、常に新規番号が振られることになります。
 店番号を変化させたい場合は、最初のコードを参考にしてください。
 
考え方を示しただけで、実際にコードは走らせていませんので、不具合があったらご勘弁ください。
 定義集域関数は、覚えると便利な関数なのでヘルプ等を参照することをお奨めします。

【7680】Re:顧客コードの頭に定型の番号を振る
発言  TB1  - 06/4/12(水) 15:26 -

引用なし
パスワード
   ▼The-Third-Man さん:
ご教授ありがとうございます。
こんなぼよよんとした質問内容にご丁寧に教えていただき感謝です。
今、詳しく拝見、実行する時間が無くて申し訳ありません。実行した結果を必ず報告いたしますのでしばし時間をください。
ありがとうございました。

【7831】Re:顧客コードの頭に定型の番号を振る
質問  TB1  - 06/5/17(水) 15:01 -

引用なし
パスワード
   ▼The-Third-Man さん:
ご無沙汰しております。ようやく時間が出来ましたので再開させていただきます。
早速ですが、以下のコードで試してみました。

Private Sub Form_BeforeInsert(Cancel As Integer)
If DCount("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") = 0 Then
  Me![正規会員コード] = "22220" & Me.店番 & "00001"

  
  Else
   Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")
  End If
End Sub

店番のコンボボックスを付け、そこで店番(ex.02)を選ぶと下の欄に自動的に会員コードが振られる、という具合に出来ました。

しかし、問題が。
出来上がったコードは10桁。店番が入っていないのです。
ここから先どのようにしたらよいでしょうか。どうかご教授ください。
宜しくお願いします。

【7856】Re:顧客コードの頭に定型の番号を振る
発言  855  - 06/5/23(火) 17:46 -

引用なし
パスワード
   どこでうまくいってないのか解らないので勘なのですが。

>>Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")

この文で確認なのですが正規会員コードって言うのは数値型なのですか?
そうでないのなら足し算はできないと思いますけど。

Dim i as Currency

i = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'"), "000000000000")

Me![正規会員コード] = i + 1

で、どうでしょうか?

【7863】Re:顧客コードの頭に定型の番号を振る
発言  TB1  - 06/5/24(水) 15:45 -

引用なし
パスワード
   ▼855 さん:
ご教授、ありがとうございます。
やってみますので少々お時間をください。

【7864】Re:顧客コードの頭に定型の番号を振る
発言  855  - 06/5/24(水) 16:25 -

引用なし
パスワード
   時間があったので同じようにを書いてみたのですが、
私が指摘した・・・

>>Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")

は上のコードで問題なくできました。。。


コードが10桁しか取れてないってことは単純に

Me![正規会員コード] = "22220" & Me.店番 & "00001

の店番に値が入ってないだけのような気がします。
ブレークポイントなどでプログラムを止めて中身を確認してみて下さい。
入力しているのにデータが反映されていないのなら、、
Me.店番.Requeryを先に書いてみて実行してください。

【7871】Re:顧客コードの頭に定型の番号を振る
質問  TB1  - 06/5/25(木) 11:15 -

引用なし
パスワード
   ▼855 さん:
ご指摘ありがとうございます。
一応、自分のコードと見比べるのですが、どこが悪いのかわかりません。
その後、下5桁はオラクルのほうから指定されるので手入力で良くなりました。
由って上7桁が自動で入ればよいのですが、うまく行きません。
     _________
店番  |_________|←コンボボックスで店番が入っています。
     _________
会員番号|_________|←現状2222099999となってしまう。

以下コード

Private Sub Form_BeforeInsert(Cancel As Integer)

If DCount("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") = 0 Then
  Me![正規会員コード] = "22220" & Me.店番 & "99999"

  Else
  Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")

  End If
End Sub


855さんがコードを走らせて問題なかったとおっしゃるものと比較してみてもどうして私のはだめなのかわかりません。

それからサンプルとして取り込んだデータの店番を変更してみても、始めの希望する形なら
22220 01 12345 を コンボボックスで02に変えると  22220 02 12345
と反映されるはずなんですが、されていません。

間違えている箇所を教えてください。
宜しくお願いします。

【7873】Re:顧客コードの頭に定型の番号を振る
発言  855  - 06/5/25(木) 12:48 -

引用なし
パスワード
   新規の会員登録(データなし

>Me![正規会員コード] = "22220" & Me.店番 & "99999"

すでに1件でも登録されている(データあり

>Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")

サンプルデータを使って両方とも動作してないんですか?

それなら店番の値が入ってこないってところから

店番の値が入力しているにもかかわらず反映されてないってことだと思います。

コードにMe.RefreshやMe.店番.Requeryを追加してみてください。

コンボボックスの作りによりますが店番が一列目にあるあんらMe.店番.Column(0)にかえてみたりして試してみてください。

Private Sub Form_BeforeInsert(Cancel As Integer)

Me.Refresh

Me.店番.Requery

If DCount("正規会員コード", "会員情報", "店番=' " & Me.店番.Column(0) & "'") = 0 Then
  Me![正規会員コード] = "22220" & Me.店番.Column(0) & "99999"

  Else
  Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番.Column(0) & "'") + 1, "000000000000")

  End If
End Sub

【7874】Re:顧客コードの頭に定型の番号を振る
質問  TB1  - 06/5/25(木) 16:21 -

引用なし
パスワード
   ▼855 さん:
ありがとうございます。
どうにもうまくいかないのですが、色々こね回す中で分かったことがあります。
新規レコードで店番を指定すると取り合えず顧客コード欄に2222099999というのはできるんです。
でも、サンプルですでに顧客名が入っているものに改めて店番を指定しても顧客コードは空欄のまま。これはいったいどういうことでしょう。さきほど仰っていた、店番が入っているにもかかわらず反映されていない、ひいてはなにか指定し忘れているのかと感じます。
つまり、店番を指定することと、そのことにより2222099999が生成されるのとは別の動きになってしまっていると。
なにかピンとくるものがあればお教えください。
宜しくお願いします。

1291 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078226
(SS)C-BOARD v3.8 is Free