• ベストアンサー

ファイルメーカーでユニークなシリアル番号を自動入力させる方法

 ファイルメーカーProでは、フィールドに対し「入力値の自動化・シリアル番号」のオプション設定を行った場合、新規レコードを作成するとフィールドに連続した番号が自動入力できます。このシリアル番号機能に似た方式で、特定のフィールドの内容を参照し、その内容ごとにシリアル番号を自動入力する機能を実装させようと試行錯誤しているのですが、どうにもいい方法が思いつきません。 【実装したい機能の例】  ・「商品名」「シリアル番号」の2つのフィールドを持つDBがあります。  ・「商品名」を入力または修正すると、「シリアル番号」のフィールドへ「商品ごとに異なるシリアル番号」が自動入力されていきます。 【実装時の例】  レコード1:商品名=みかん、シリアル番号=1  レコード2:商品名=みかん、シリアル番号=2  レコード3:商品名=リンゴ、シリアル番号=1  レコード4:商品名=みかん、シリアル番号=3  レコード5:商品名=リンゴ、シリアル番号=2  レコード6:商品名=バナナ、シリアル番号=1  エクセルでは、countif関数を使っていとも簡単に実装できたのですが、「最初のレコードから現在入力中のレコードの間で、現在入力中のフィールドと内容が同じレコードの数を取得する」方法が、ファイルメーカーProでは見つかりません。  良き解決方法をご教示いただけますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • zenjee
  • ベストアンサー率47% (50/106)
回答No.2

ちょっと複雑かつ原始的?な方法ですが、ご希望のようなシリアルナンバー(ナンバーというより数値ですが)を表示することは可能です。 その方法は 1、商品名フィールドが「りんご、みかん、梨、バナナ、メロン」と仮定します。 2、画面表示が不要な計算用のフィールドを次のように作ります。 (1) 「りんご」というフィールドを作ります。フィールドタイプは「計算」で、式は   「IF(商品名="りんご",1,"")」とします。 以下、ミカン、梨、バナナ、メロンも同様に定義します。 (2) 次に「りんご計」というフィールドを作ります。フィールドタイプは「集計」で、「カウント」及び「現在のカウント」にチェックを入れ、フィールド「りんご」を選択します。 以下、ミカン計、梨計、バナナ計、メロン計も同様に定義します。 この2種類(合計10個)のフィールドは計算用ですから、画面に表示する必要はありませんが、参考のため欄外に表示してみると経過が分かります。 3、最後に「シリアルナンバー」フィールドです。 フィールドタイプは「計算」で、計算式は  Case(商品名 = "りんご" , りんご計, 商品名 = "みかん" , みかん計,商品名 = "梨",梨計,商 品名 = "バナナ",バナナ計,商品名 = "メロン",メロン計 )  とします。  以上です。データを入力して試してみてください。 (私も20件ほど入力し、OKでした。)

Bonsoir
質問者

お礼

ありがとうございます。 ご教示いただいた方法で上手くいきました。 とはいうものの、一番最初にテストした時は、「メロン計」のカウントに不具合があって、思いっきりつまづいてしまいました。 計算式の設定も何度か再確認したのですが、さっぱり原因がわからず、それならばと新規にファイルとデータベースを作り直したら、あっさり動いてしまい、妙な脱力感を感じています。 最後に、夏期休暇でご教示いただいた手法を試すことができずご返答が遅くなってしまいましたことお詫びいたします。ごめんなさい。

その他の回答 (2)

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.3

文字の変換ミスですが、ANo2の記述内容に1か所誤りがあったので訂正します。 2、(2)の、以下「ミカン計」は「みかん計」です。 なお、シリアルナンバーの計算式設定に際し、商品数が多数あり、一つの式にはめ込むのが容易でないときは、商品名及び集計フィールドを別表(FM7の場合、FM6なら別ファイルにしてリンク)に設けることにより、リレーションを組むことも可能かと思われます。(忙しくて試してはいませんので今のところ「自信なし」としておきます)

  • bucchukun
  • ベストアンサー率43% (18/41)
回答No.1

fmp7形式で説明します。 fmp6以下ならテーブルをファイルと読み替えてください。 「カウンター」というテーブルを作成し、「商品名」と「カウント」フィールドを作成します。 そして、いま使っているDB(テーブル)と商品名でリレーションを張っておきます。 「シリアル番号」フィールドの計算式を ------------------------------------ IF(MAX(カウンター::カウント)<1 ; 1 ; MAX(カウンター::カウント)+1) ------------------------------------ にします。 頭の中だけなので外しているかもしれません。 要はシリアル番号を別に保管しておき、リレーションの中で一番大きい番号に1を足したものをシリアル番号として使用する、ということです。

Bonsoir
質問者

補足

 bucchukunさん、すばやいご回答ありがとうございました。  なるほど、ファイルメーカーを触って3日程度の半端な知識では、リレーションシップ機能を使うことにまたく思い至りませんでした。  さっそく、ご教示いただいたように新規テーブルを作成し、「商品名」フィールドにリレーションシップを設定した後、「シリアル番号」フィールドに計算式を設定してみた……のですが、残念ながら思う結果が得られませんでした。  私のやり方がまずいのかもしれませんが、ご教示いただいた方法だけでは、「カウンター」テーブルの「カウント」フィールドを、「商品名」フィールドの入力にあわせてカウントアップさせていないため、正しい結果が得られていないのだと思われます。  せっかく良いヒントを与えていただいたので、もう一度冷静にカウントアップの方法を考えてみたいと思います。  とはいうものの実際には、1番目のレコードから現在のレコードの間で、フィールドに記入された項目と同じ項目がいくつあるか数える関数があれば、私の望む処理が実現できるのですが、うまくヘルプの中に見つけることができませんでした。もしかすると、フィールドに設定する計算式ではなく、ボタンを押してスクリプトを実行させて自動記入させるほうが良いのでしょうか。  ちなみにエクセルを使った場合、A列に商品名を記入するとB列にシリアル番号が自動記入される手法は、B2のセルに「=COUNTIF($A$2:A2,A2)」と記載し、B3以降のセルには同じように「=COUNTIF($A$2:A3,A3)」とすることで実装できています(下図参照)。 ____A______B____  +----------+----------------+ 1|_商品名_|_シリアル番号_| 2|_みかん_|___1____| 3|_みかん_|___2____| 4|_リンゴ_|___1____| 5|_みかん_|___3____| 6|_リンゴ_|___2____| 7|_バナナ_|___1____|  過去に所有ソフト管理などで、カード型データベースを使ったことはあったのですが、データベース作成の経験は少なく、何か基本的なところで見落としをしているような気がしてなりません。  引き続き、情報をお待ちしております。

関連するQ&A

  • ファイルメーカー シリアル番号入力自動化

    ファイルメーカーPRO5を使用しています。 フィールドの入力値の自動化でシリアル番号をA001から増分1にしています。 このシリアル番号を月が変った時点で初めのA001に戻してやる方法はあるでしょうか。 ご教授頂きたくよろしくお願いいたします。

  • ファイルメーカーで最大シリアル番号+1を自動入力

    ファイルメーカーver7を使用しています。 自動シリアル番号の機能を利用してシリアル番号を振っているのですが、 新規レコードを作成して、その直後にレコード削除してと繰り返していると、 空のシリアル番号がどんどん作られてしまいます。 そこで、最大シリアル番号に1を足したものを 自動入力させたいのですが、どうしたらいいかわかりません。 どなたかアドバイスよろしくお願いします。

  • ファイルメーカーでシリアル番号を整理する方法は?

    ファイルメーカーPro6(Mac)を使用してます。 ソート順位を指定する方法として、レコードにIDというフィールドを作り、シリアル番号を自動入力するようにしております。 通常は、自動入力された整数値で問題ないのですが、後から登録するレコードを、途中に割り込ませたいとき、「12.5」のように、手動で小数をつけてならび順を制御してました。 これで、任意の順番で並ぶようにソートすることが出来るようにはなりましたが、あまりにも数字がめちゃくちゃになってきたので、1から順に整数値になるように、整理したいのですが、どのようにすれば出来るでしょうか? また、小数点を使わない、別のいい方法がありましたら御教授下さい。

  • シリアル番号

    1枚のレコードの中のフィールドにシリアル番号を自動入力したいのですが、やり方が分かりません、どなたかよろしくお願いします。

  • ファイルメーカーpro6で郵便番号から住所を自動入力する方法

    こんにちは。顧客データに伴うデータ管理のデータベースをファイルメーカーで作らなければいけなくなりました。が、ファイルメーカーを使うのは初めてで、四苦八苦しています。 私がしたいのは、 1.〒番号フィールドに7桁の数値を入れたら、次の住所フィールドに該当住所が自動入力される。 2.商品番号別に商品名、単価を設定しておき、購入明細画面で商品番号を入力すると、購入商品名、単価に自動入力(反映)されると という設定です。1と2は同じことのような気もするのですが・・・。 詳しい方がいらっしゃいましたら、是非ご伝授下さい! よろしくお願いします。

  • ファイルメーカーの自動入力で

    ファイルメーカーでデータの一部を変更した時に自動的に変更者名を入力したいのです。この時にフィールドオプションの自動入力の修正者名を入れる(ユーザー名)を使用せずにその時々でグローバルフィールドの「入力者」フィールドに設定されている人の名前を変更者フィールドに入れたいのですが、方法が有りますか?アクセスなどならフィールド内容の変更時にイベントの発生ができる様ですが同じような事をファイルメーカーでできる方法が有りませんか?教えて下さい。

  • ファイルメーカー8 一括に貼付

    繰り返し10のフィールドA 通常のフィールドB ボタンC があります。 ボタンCを押すと、BのテキストをAのフィールドに張り付けるようにしますが、1番上に値がすでに入っていた場合は2番目に入れる、というように空欄に入れる方法は計算式を使ってできました。 ただ、1レコードずついちいちボタンCを押さないと張り付けてくれませんので、できれば対象レコードすべてフィールドBの内容をすべてフィールドAに張り付けたいのです。 スクリプトを使うとき、Bを全置換して、張り付けるのだと思ったのですが、対象レコードに一括貼付する方法がわかりません。 例 フィールドB:りんご フィールドA: レコード1は空欄、空欄、・・・、空欄 レコード2はみかん、空欄、・・・、空欄 レコード3はみかん、柿、空欄、・・・、空欄 とあったとき、ボタンCをおすと フィールドA: レコード1はりんご、空欄、・・・、空欄 レコード2はみかん、りんご、空欄、・・・、空欄 レコード3はみかん、柿、りんご、空欄、・・・、空欄 としたいということです。 方法はありますでしょうか?

  • ファイルメーカーpro6で

    こんにちは。ファイルメーカーpro6を使っている、超初心者です。 注文明細書で、商品別に小計金額を自動出力したいのです。 明細書の内容は、商品番号、商品名、個数、小計金額・・・合計金額のフィールドです。 別ファイルに商品番号順に、商品名、単価を入力したレコードがあります。商品番号でリレーションして、商品名をルックアップしています。そこまではできたのですが、小計金額の出し方がわかりません。 商品番号が1の場合はいくら、2の場合はいくら・・・という設定方法がわからないのです。Case関数かIf関数を使うのでしょうか? 是非教えて下さい!!

  • ファイルメーカーでリレーション間をまたぐスクリプト

    ファイルメーカーでリレーションで繋がっている2つのファイルの 間でデータを自動入力するスクリプトの作成方法を教えてください。 表が2つあります。 商品管理表  商品ID 商品名  値段    1  りんご  100円    2  みかん  200円    3  バナナ  300円 注文表  客  商品  ID 個数  山田 りんご 1 3個  加藤 みかん 2 2個  中田 りんご 1 10個 となっており、リレーションが商品IDで結ばれています。 レイアウトモードで商品ごとに注文履歴が表示されるようになってます。 <レイアウト> りんご  山田 3個  中田 10個 ----------- みかん  加藤 2個 ----------- これにスクリプトで自動的に注文表に注文を加えていくように ボタンを作りました。 りんごのページで、個数と客名を入力の後、ボタンを押すと、 注文表にりんごの注文が自動的に入るようにしたいのですが、できません。 単にID無しの新規レコードが作成されるだけになってしまいます。 どうすればいいのでしょうか?

  • コード番号の自動入力

    初めて投稿します。Accessを使用する上で困っていることがあるので相談に乗っていただけると助かります。 クエリなどで、コード番号を入力すると項目が自動入力されるというのが良くあると思うのですが、その逆をやりたいのです。項目をコンボボックスから入力すると該当するコード番号(主キー)が自動入力されるといった具合です。 例えば・・・ NO|項目1|項目2|項目3 1|果物|りんご|青森 2|果物|りんご|長野 3|果物|みかん|宮城 4|果物|みかん|愛媛 5|野菜|大根|長野 見たいなテーブルがあったとします。 項目1~3までをコンボボックスで値入力させ、それに該当するNOを自動入力したいのです。 方法が分かる方、いらっしゃいましたら教えてください。