• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスでIF関数)

アクセスでIF関数を使用する際の改良方法について

MRT1452の回答

  • MRT1452
  • ベストアンサー率42% (1392/3296)
回答No.2

ざっと見る限り、単に商品コードをプライマリキーに出来そうな気がしますが。 何の為にマスタを持つのかよく考えてください。 コードが違うからと無意味にフィールドを増やすのは良くないです。 商品コードをキーに商品情報を持ってくるのですから、それを行うクエリ(SQL)を組めば良いだけのはず。 コード・商品名 001・商品A 002・商品B ABCD・商品1 ZZ・商品c というマスタが会ったとして、コードに対する商品名を取るなら、  Select 商品名 from マスタ Where コード='###' (###は検索するコード) というようなSQLを組んで、マクロ上で###に対象の商品コードをセットするようにしてSQLを発行すれば、 該当の情報は取得できます。  Select 商品名 from マスタ Where コード='ABCD' とすれば、商品名として"商品1"が取得されるので、それを単にフォームにセットしてやるだけ。 ループでぐるぐる回してIF判定するならワザワザデータベースにする必要も無いし。 コード毎にマスタのフィールド追加してたら、商品が膨大になったときテーブル自体が無駄に膨大化することになるし。 データベースを使うならデータを引っ掛けるための検索キーという考え方が基本。 商品コードとかバーコードとか検索キーにするにはうってつけの物なわけで。 コードが商品毎に違うということは、そのコードを指定すれば、その商品であるということを特定できる情報なわけで。 そういう情報がプライマリキー(一意に情報を特定できるキー)となります。 そういった情報を使いこなす事でデータベースは活きてきます。 SQL関係の情報はネットにも書籍にも沢山あるので探してみてください。 アクセスでシステムを構築する場合はクエリとマクロを上手く組み合わせることがコツです。

tori123
質問者

お礼

ありがとうございます。補足をNO4のお礼欄に掲載させていただきました。よろしくお願いします。

関連するQ&A

  • Access2000フォーム/サブフォームにつおて

    Access2000でフォーム/サブフォーム(売上伝票)を作っています。 フォーム(売上伝票メイン)には伝票番号、売上先などを入力・・・ サブフォーム(売上伝票サブ)は商品、数量、金額などを入力します。 そこで質問ですが、サブフォームの商品は商品コード(コンボボックス)を入力すると該当する商品名、単価などを商品台帳から引いてくる、としたいと思い、商品コードの「更新処理後」に以下のコードを記述しました。   Me![商品名] = DLookup("[商品名]", "[商品台帳]","[商品コード]= Forms![売上伝票メイン]![売上伝票サブ]![商品コード]")     サブフォーム上の商品名に商品台帳の商品名を入力するとしたつもりなのですが、何も表示されません。  単価も単位も同様です。  この方法ではだめなのでしょうか?  

  • access2007でのサブフォームへの入力

    仕入入力画面なんですが メインフォーム(仕入伝票テーブル)サブフォーム(仕入伝票明細テーブル) という構成です。 メインフォームで 仕入先をコンボボックスで指定すると サブフォームの 商品を入力するコンボボックスに メインフォームで選択した仕入先で購入できる商品が選べるように したいのですが、どうすればよろしいでしょうか? メインフォームの仕入先コンボボックスを選択する度に サブフォームの商品コンボボックスで選択できる内容を反映させたい です。 仕入先A : 商品1 商品2 仕入先B : 商品3 商品4 商品5 仕入先C : 商品6 商品7 商品8 商品9 メインフォームで仕入先コンボボックスで仕入先Aを選択すると サブフォームで選択できる商品コンボボックスは商品1と商品2 メインフォームで仕入先コンボボックスで仕入先Bを選択すると サブフォームで選択できる商品コンボボックスは商品3と商品4と商品5 というようなイメージで作りたいです。 どうかよろしくお願いします。

  • Access2000 DLookup関数の使い方

    色々試してみたのですがわからないので質問させていただきます。 フォーム/サブフォームを作っています。 サブフォームにある商品コード(コンボボックス)を入力すると、同じサブフォームにある単位、単価に商品台帳テーブルの値(単位、単価)を持ってくるようにしたつもりなのですが・・・。 商品コードの更新処理後に以下のコードを記述したのですが、うまく動きません(エラーは出ない)。 Me![単価] = DLookup("[単価]","商品台帳","[商品コード] = [Forms]![フォーム]![サブフォーム]![商品コード]") どこが悪いか教えていただけないでしょうか?

  • access2003

    2000種ほどの商品を扱っています。商品コードひとつにつき、仕入先・取引先が1箇所ずつ決まっていて、値段の変化もあまりありません。伝票を見ながら、フォームから直接売上入力を行い、請求処理と売上分析に利用したく思います。 ◆親)売上入力フォーム:売上管理番号/日付/取引先/取引先伝票番号/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付/取引先伝票番号 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 入力の効率化を図るため、1部品1取引先であることを利用して、親フォームで取引先を選択することで商品を絞り込み、子フォームの商品選択コンボボックスにはその取引先の商品だけが表示させるようにしたいと思います。どのような方法が考えれるでしょうか? クエリを使うのだと思いますが、いろいろ試しても失敗してしまいます。 また、その上でさらなる絞込みとして、明細の各行で各商品を選択する際に、商品コードの一部を入れたり、仕入先名を入れると部品が絞り込めるようにできないでしょうか? アドバイス、参考資料、なんでもお寄せください! どうぞよろしくお願いいたします。

  • ACCESS2003の質問です

    伝票入力画面(親フォーム、サブフォーム)で、サブフォームに明細を 入力しますが、サブフォームのスクロールバーが常に下の位置に出来 ませんか? 明細行が画面に入りきらないときに、隠れてしまうので、常に最終行が 表示されている状態が望ましいです 宜しくお願いします

  • クエリ抽出条件を動的に変更したい

    Win XP Access2003 顧客情報を入力するメインフォーム1に商品明細を入力するサブフォーム(帳票)のある 伝票作成用のフォームを作っています。 (サブフォームは選択クエリが元になっています) 入力用にはフォーム1を使い、その後確定した伝票はメインフォーム2で扱いたいのです。 商品明細(帳票サブフォーム)の内容は同じなので、クエリの伝票番号(フィールド)の 抽出条件を フォーム1で開いた時に[forms]![フォーム1]![txt伝票番号] フォーム2で開いた時は[forms]![フォーム2]![txt伝票番号] の様に動的に変更したいのですが,よい方法がありましたら宜しくお願い致します。

  • ACCESSの規定値を動的に設定するには

    お世話になります。 仕訳伝票の登録フォームを作りました。 テキスト項目にコンボボックスを5個セットしました。 実際に操作するとマウス操作とキーボード操作の作業が面倒です。 フォームは伝票No.、日付、伝票の目的 のメインフォーム「仕訳伝票入力」 勘定科目、適用、金額のサブフォーム「仕訳伝票入力明細サブ」 メインフォーム上の伝票の目的が決まればサブフォームの勘定科目(借方科目、貸方科目)ほぼ決まります。 そこで伝票の目的テーブルに借方、貸方に勘定科目IDの項目に登録しておき、 これをサブフォームの借方科目、貸方科目の規定値として動的に設定出来ないものかと… この質問は前の http://kikitai.teacup.com/qa4980091.html の補足です。こちらも宜しくお願いします。

  • データグリッドのセルにtextを表示させる方法?

    VB6の初心者ですがお教え下さい。 現在「売上管理」を本を参考に作成しております。ACCESSで売上伝票(メイン)、売上明細(サブ)、商品台帳、、等のテーブルをデータベースとしています。 売上伝票(メイン)のフォーム上に売上明細(サブ)を「売上伝票番号」を元にしてデータグリッドで表示します。 参考本の記載では[価格]は商品台帳からひっぱっていますが、これでは、随時、異なった価格を入力するたび台帳の価格自体が変わってしまうため、私の場合「売上明細」の価格とリンクさせ、随時入力可能としました。 (お客様によって時々売値が変更するので) そこで質問なのですが、その「価格」入力のセルに、商品台帳にある「価格」を一旦表示させる方法はないでしょうか? (商品の定価を全て覚えてはいないので) 以前アクセスで同様のものを作成したときは、親子のフォームでしたので、 forms!txt1.text=[コントロール]みたいな感じでしました。 ちなみに下記はデータグリッドのSQLです。   ( 定価*1 AS 価格と試しましたが変更でき   ず、だめでした。) ヒントとなるような事でも結構ですので宜しくお願いします。 Dim rsSub As New ADODB.Recordset Dim mySQL As String 'SQLステートメント 'SQLステートメント mySQL = "SELECT 売上伝票番号,NO,T売上明細.JAN,商品名,定価,価格,数量 " _ & "FROM T売上明細,T商品台帳 " _ & "WHERE ( 売上伝票番号 = " & txt売上伝票番号.Text & " ) " _ & "AND (T売上明細.JAN=T商品台帳.JAN) "

  • ACCESSのメインフォームとサブフォームについて

    ACCESSで、受注伝票のようなものを作成したいと思っています。受注伝票フォームに受注明細のサブフォームを埋め込んだようなフォームを作ろうとしています。その際、受注伝票と明細に受注コードのフィールドを設け関連づけたいのですが、メインフォームに受注コードを入力したらサブにも同じコードが自動的に振られるようなことはできるのでしょうか。 出来ないのであれば、どのように作ればよいのでしょうか。

  • Access式ビルダでのサブフォーム参照について

    メインフォーム名  「売上明細フォーム」 サブフォーム名 「売上明細サブフォーム」です。 サブフォームのテキストボックスの値をメインフォームに表示させるため、式ビルダから参照させるとき、リストで展開して出てくる項目で以下の2つの違いがわかりません。   ・組み込まれたフォーム  ・すべてのフォーム どっちからでも一緒のことでできそうだと思うのですが、組み込まれたフォームからは参照されずエラーになります。 この2つの違いはなんですか??