過去の桐井戸端BBS (桐ver.8)
8935 項目を判別して表引き HERB 2000/12/16-14:22
以下のコードマスター表を使い表引きを行う。

コード区分 コード番号 コード名称
1 0 性別
1 1 男
1 2 女
1 3 法人
1 9 不明
2 0 年号
2 1 明治
2 2 大正
2 3 昭和
2 4 平成
3 0 支払方法
3 1 郵便振込
3 2 ヤマト代引
3 3 クレジット
3 4 前払
3 5 現金書留
3 6 銀行振込
3 7 その他
3 9 請求無し
4 0 配送方法
4 1 ヤマト宅急便
4 2 ヤマト代引
4 3 ゆうパック
4 4 郵送

コード番号は重複するため、コード区分が1の時性別のコード番号を表引きする。
コード区分が2の時元号のコード番号を表引きする。

というような表引きが可能でしょうか、条件選択等で試みたのですがうまくいきません、
表引き側の表ではコード区分データは持っていません、項目が性別で数値データで、コード番号が入力してあります、
うまく説明できないのですがよろしくお願いします。


8938 Re:項目を判別して表引き toshi-chan 2000/12/16-16:47
記事番号8935へのコメント
HERBさん、こんにちは。
う〜ん!むずかしい。

こんなのはどうですか。
コード区分とコード番号を連結した項目[連結コード]を双方の表に持たせます。
この項目は2桁の整数になり、重複することはありませんね。
この[連結コード]を使用して表引きを行います。

#表引き([連結コード],= ,”コードマスター表.tbl”,[連結コード],[コード名称])

ただ、コード区分ごとに別の表にした方がすっきりするような気がしますが・・・・
8940 Re:項目を判別して表引き irimajiri 2000/12/16-20:06
記事番号8938へのコメント
toshi-chanさん、HERBさん、こんにちは。
>
>ただ、コード区分ごとに別の表にした方がすっきりするような気がしますが・・・・
たぶん僕もtoshi-chanさんと同じように別表にした方が、いいか
もしくは集合値を使用したほうが簡単かもと思います。
コード区分により年号や、性別なんかが入った場合
行によりっては統一性を失いデータベースとして利用できるのでしょうか?

作る側によりいろんな作成の仕方があるのでなんとも言えませんけどね

8942 #条件選択を使えば良いのでは 佐田 守弘 2000/12/16-23:38
記事番号8935へのコメント
HERBさん
コード区分の値によって表引きを変更するまでは分かりましたが、どの項目をどの様な表引きをしたいかが分かりにくいので、
取り違えているかも知れません。
しかし、どの様な表引きをするのか、その際に、比較項目と表引き項目が何であるかが分かれば、簡単だともうのですが。
そして、その条件の振り分けは、#条件選択関数で可能なはずです。
つまり、
#条件選択([コード区分]=1,#表引き(<表引きの記述1>)
     .[コード区分]=2,#表引き(<表引きの記述2>)
       ・・・・・
     )
となるはずです。

8945 Re:「#表引き2」を使えば良いのでは Ogo 2000/12/17-08:58
記事番号8942へのコメント
こういう時こそ「#表引き2」が有効でしょう。

8946 Re:項目を判別して表引き HERB 2000/12/17-11:33
記事番号8935へのコメント
toshi-chanさん irimajiriさん 佐田 守弘さん回答ありがとうございます。

連結コードは考えました、またコード別に表を分けることも検討しました、その方がすっきりすると思います。
元となる表は桐で作成した表ではありません、アクセスで使われていた表を元にしています、
アクセスではこの表から桐で言う表引きのようなことをしているみたいで、桐でも出来るのか試してみたく投稿しました。
アクセスと桐では違うとわかっているのですが、アクセスで出来て桐で出来ないものかと。

佐田さんよろしければ表引き2の関数をもう少し詳しく解説していただけませんか、
関数ヘルプにあった例題は文字数で条件選択していました、今回の表ですとコード区分はわかっています、
#条件選択([コード区分]=1,#表引き?とこの先がよくわかりません。

よろしくお願いします。


8957 「#表引き2」関数とは 佐田 守弘 2000/12/17-22:10
記事番号8946へのコメント
HERBさん
機能としては通常の「#表引き」関数と変わりありません。
違うところは、検索項目と値項目を項目名で指定するのではなくて、項目番号で指定する点です。
そして、この項目番号の指定には計算式が指定できます。

一例として次の様な表引き表(単価)があったとします。
[名称]   [花単価]   [種単価]
セージ    500   200
ラベンダー  600   300

ここであるハーブについて、売上表の項目[品名](上記の[名称]に対応)の値でこの表から
表引きをする際に、項目[区分]が1なら花の単価を、2なら種の単価を表引きしたいとします。
この様な場合に「#表引き2」関数が有効になります。

これを「#条件選択」関数で記述するとしたら、
 #条件選択([区分]=1,#表引き([品名],=,"単価.tbl",[名称],[花単価]
      ,[区分]=2,#表引き([品名],=,"単価.tbl",[名称],[種単価]
      )
の様になります。

一方、「#表引き2」関数を使うとしたら、
 #表引き2(#表引き([品名],=,"単価.tbl",1,[区分]+2)
の様になり、式が簡単になります。

付け加えますと、
3番目のパラメータ「1」は、表引き表の1番目の項目[名称]を指定しています。
4番目のパラメータ[区分]+1は、[区分]が1なら2になって2番目の項目[花単価]を、2なら[種単価]を指定する計算式になります。
ここでは簡単な式で検索項目や値項目を指定しましたが、
目的によっては、ここに「#条件選択」関数や、「#対応番号」関数などを使う事も考えられます。

●最初の質問の主旨に戻って
実はまだ最初の質問の主旨が良く理解できておりません。私の理解では、[コード区分]の値によって表引き表が変わるように思えます。
もしそうであるならば、「#表引き2」関数は使えません。「#条件選択」関数で表引きの式を条件選択する必要が出て来ます。
最初の質問に戻って、コード区分によってどの表のどの項目を表引きするのかもう一度お伝え願えますでしょうか。
それとも、私の読み違えで、表引き表は1つだけなのでしょうか。

8958 Re:項目を判別して表引き 佐田 守弘 2000/12/17-22:20
記事番号8935へのコメント
HERBさん
ブラウザの表示の関係で最初の表がうまく読めておりませんでした。
要するに、コード区分が1〜4まである異なるコード番号とコード名称を1つの表に縦に読み込んだ表だったのですね。

だとすると、話は全く違います。
考え方として、この場合には、[コード区分]の値で表引き表を絞りこんだ状態で表引きする事に相当します。
クエリー(結合表)で行うなら、条件式に
 [コード区分]=&コード区分,[コード番号]=&コード番号
の様な論理積(AND)条件の条件式を記述すればすむ話です。
(だからAccessで簡単にできたのでしょう。桐でも可能です)

もしこれを表引きで行うとしたら、前述の様に絞りこんだ状態で表引きをしなければならず、面倒です。
そこで、[コード]という計算項目を新しく作り、
 [コード区分]*100+[コード番号]
の様な計算式を設定します。ここで100は、[コード番号]の最大値で決めればよいでしょう。
999までに対応させるなら、1000にして下さい。

そして、
 #表引き([区分]*100+[番号],=,<表引き表>,[コード名称])
で表引きが可能です。

佐田守弘(KS-00119)

8959 式の訂正 佐田 守弘 2000/12/17-22:22
記事番号8958へのコメント
表引きの式を以下の様に訂正して下さい。

 #表引き([区分]*100+[番号],=,<表引き表>,[コード],[コード名称])

佐田守弘(KS-00119)


8971 Re:項目を判別して表引き HERB 2000/12/18-11:05
記事番号8958へのコメント

>ブラウザの表示の関係で最初の表がうまく読めておりませんでした。
>要するに、コード区分が1〜4まである異なるコード番号とコード名称を1つの表に
>縦に読み込んだ表だったのですね。

ご推察の通り、縦の表なんです。
区分が横の項目ならば、表引き2ををすんなり使えたのです。
置換集計なり、置換書出で別表にすることも考えましたが、元表を出来るだけ変えずにできないだろうか考えていました。

>考え方として、この場合には、[コード区分]の値で表引き表を絞りこんだ状態で表引
>きする事に相当します。

絞り込んだ状態で表引きを行う方法がないのかと思案していました、私の説明不足でした。

>クエリー(結合表)で行うなら、条件式に
> [コード区分]=&コード区分,[コード番号]=&コード番号
>の様な論理積(AND)条件の条件式を記述すればすむ話です。
>(だからAccessで簡単にできたのでしょう。桐でも可能です)

区分の数だけ、クエリー表を作ることが必要ですか?
よろしければもう少し詳しくご説明していただけませんか。

>もしこれを表引きで行うとしたら、前述の様に絞りこんだ状態で表引きをしなければ
>ならず、面倒です。

新たに計算項目を以下の通り作りました。

項目:表引きコード #文字列([コード区分],4)+#文字列([コード番号],4)

表引き計算式:#表引き("0001"+#文字列([性別コード],4),=,"****.tbl",[表引コード],[コード名称])

当初の目的とは違うかたちですが、表引きを行うことが出来ました。
ありがとうございました。


戻る