- ベストアンサー
ファイルメーカー6のif関数について
ファイルメーカー6、MacOS9.2を使ってる初心者です。 ファイルメーカーの事で前も教えて頂きましたが、またお願いします。 商品名、数量、単価、合計という4つのフィールドがあります。 合計フィールドは数量フィールド×単価フィールドという計算式で出していて これ自体は問題ないんですが、 商品名を値一覧から(約10品名)選び、選んだ品名から自動で 単価を入れたいんですがやり方が分かりません。 例えば商品名にみかんを選んだ場合は単価に50を、 リンゴを選んだら70を バナナを選んだ90を・・・・ こんな感じで10品目分を設定したいんですが出来ません。 ひとつだけならif関数で出来たんですが・・・ もちろん、設定が出来るならif関数じゃなくても良いんです。 よろしくお願いいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
そうそう、FM6では相手先&商品名という計算フィールドを作って、それを照合してルックアップ。
その他の回答 (7)
- chieffish
- ベストアンサー率44% (1149/2554)
あっ、違った、勘違い発言だ。どうするんだったけかな
- chieffish
- ベストアンサー率44% (1149/2554)
それはヘルプにあると思いますが「動的値一覧」と呼ばれます。照合フィールド(山田商店、川田商店・・)に よって、値一覧を変化させることが出来ます。元レコードが繰り返しフィールドだと出来ないです。
- chieffish
- ベストアンサー率44% (1149/2554)
別ファイルに りんご 70 みかん 50 バナナ 90 ・・・・・ とその10品目分を10レコード作って、商品名でリレーションを設定し、単価はフィールド 定義の自動入力でルックアップを設定します。 (品名を参照して::単価をコピーする)
補足
出来ました(*^_^*) ありがとうございました。 これだと、品名を訂正してもちゃんと単価も変わるし、 それに、別ファイルを常に開いた状態にしておかないとダメだと 思ってましたが、リレーションで指示しておくだけで、開く必要は ないんですね。良かったです。とても参考になりました。 本来ならお礼を言って、締め切りにしたいんですが 新たな問題にぶつかりました。 例えばある相手先はみかんの単価が50でも他の相手先のみかんは70とかに なった場合、このままではまずですよね。 最初からそうお聞きすれば良かったんですが、当初、単価は全て 同じで良いとう話しだったので(内輪の話しですみません) 考えてなかったんですが、ここにきて相手先によって単価が変わる事も あるって感じになり・・・・ お時間のある時で結構ですので、またお教え下さい。 山田商店のみかんの単価は50 川田商店のみかんの単価は180 このときのルックアップはどうすれば良いんでしょうか? 自分でもトライしましたがやっぱり分かりません。 よろしくお願いいたします。
- chieffish
- ベストアンサー率44% (1149/2554)
FM6ではそうなりますね。単価も消してやり直しでしょうか。やはりルックアップがいいですよ。 FM8では既存値を書き換えるオプションがあります。
補足
ありがとうございました。 FM6では無理なんですか・・・ ルックアップでも良いんですが、正直やり方が全く分からないんです。 別ファイル(新規ファイル)に例えばみかん、リンゴ、バナナの フィールドをつくり、それぞれに50、70、90と入力しておき、 こっちのファイルでみかんと入力したら、自動的にそのファイルの50が コピーされるんですよね。 そんな感じでやってみたんですが、設定さえできないんです。
- chieffish
- ベストアンサー率44% (1149/2554)
>ただ、念のため商品名フィールドは任意の品名も入力出来る >状態にしたいんです。(値一覧に無い商品名) >この定義だと商品名に値一覧にない例えばすいかと入力する場合、 >商品名フィールドの入力は出来ましたが、単価フィールドに >100と入力しようとするとこのフィールドは修正出来ませんと >メッセージがでます。(空白の状態なのに) 計算フィールドは手入力で修正はできません。 フィールド定義の入力の自動化で計算式を設定してください
補足
何度もすみませんでした。 最初、フィールドの定義でタイプを計算として Case(商品名="みかん", 50, 商品名="リンゴ", 70, 商品名="バナナ", 90)にしてました。 おっしゃられた通りにタイプを数次に変え、入力の自動化のところの計算で Case(商品名="みかん", 50, 商品名="リンゴ", 70, 商品名="バナナ", 90)を入力しました。 これで新規レコードを開いて、例えば商品名にみかんを選ぶと単価に50と 自動で入るんですが、間違えてリンゴを選んだ後(この時点で70が入る) みかんを選びなおしても50にならないんです(70のまま) これって仕方ないんでしょうか? 本当に何度もすみませんが、お助け下さい。
- chieffish
- ベストアンサー率44% (1149/2554)
>ひとつだけならif関数で出来たんですが・・・ If関数もIf(品名="みかん"、70、If(品名="りんご"、70、If()))といくらでも続けられます。 ()だらけになりますが。 普通は品名を入れたら自動で単価が出るというのはルックアップを使います。FM6の場合は 別ファイルに りんご 70 みかん 50 バナナ 90 ・・・・・ とその10品目分を10レコード作って、商品名でリレーションを設定し、単価はフィールド 定義の自動入力でルックアップを設定します。
お礼
別ファイルからルックアップする方法もあるんですか。 ただ、その場合だと、常にそのファイルも開いておかないと ダメなんですよね。 今のところ品名もそんなに多くないので とりあえず教えていただいたif関数かNo1様に教えていただいた case関数でやってみようと思います。 ありがとうございました。
- nice-guy7762
- ベストアンサー率26% (185/696)
case関数を使いましょう。あるいは、商品名と単価だけのファイルを別に作って、そこから商品名でリレーションを引いて単価を表示するか。
補足
早々のご回答ありがとうございます。 Case(商品名="みかん", 50, 商品名="リンゴ", 70, 商品名="バナナ", 90) で定義すると、ちゃんと出来ました。 ただ、念のため商品名フィールドは任意の品名も入力出来る 状態にしたいんです。(値一覧に無い商品名) この定義だと商品名に値一覧にない例えばすいかと入力する場合、 商品名フィールドの入力は出来ましたが、単価フィールドに 100と入力しようとするとこのフィールドは修正出来ませんと メッセージがでます。(空白の状態なのに) Case(商品名="みかん", 50, 商品名="リンゴ", 70, 商品名="バナナ", 90) がいけないんでしょうか。よろしくお願いいたいします。
お礼
chieffish様。色々とありがとうございました。 出来ました、ありがとうございます。 考えとして正しいか分かりませんが、とりあえず 全パターン分のレコードを作っておき、 それを参照する形にすれば自動入力的に使えるんですよね。 私が目的としてるファイルはこれで十分できそうです。 繰り返しフィールドについては自分なり勉強します。 何度もお手数をおかけしてすみませんでした。 ありがとうございました。