過去の桐井戸端BBS (桐ver.8)
5140 項目名の取得について 真太郎 2000/03/13-15:01
いつもお世話になります。

項目が例えば6項目あるとします。

項目  [a],[b],[c],[d],[価格].[該当項目名]

データ  100,200.250,300.100

[該当項目名]に[価格]と同じ値の項目名を取得したいのです。
価格は 100 で 該当項目名は a ということになります。

#条件選択を使用して
 #条件選択([価格]=[a],"a",[価格]=[b],"b",[価格]=[c],"c",[価格]=[d],"d") という項目計算式で
どうにか取得してるのですが、#項目属性の関数をつかって項目名を取得できないかな
って思っています。
ところが、項目番号を指定しないといけないことになりまして、項目番号の取得の方法がわかりません。

項目が4項目ぐらいだと、#条件選択でもいいのですが、項目が100とかに
なってくることもあるため、どうにかクリアしたいと思っております。
また、別の発想でクリアしないといけないでしょうか?
ぜひぜひお願いします。

5142 Re:項目名の取得について 宮城 2000/03/13-15:46
記事番号5140へのコメント
真太郎さん、もう少し事情を説明していただいたほうがよさそうです。
n件の価格名が項目名でデータは価格、価格が[価格]と一致する項目名を[該当項目名]を
セットしたいということですが、価格をセットする項目が100にも及ぶ(!?)

項目名の取り方だけで悩んでしまいそうです。ちょっと切り口を変えたほうがいいように
思います。

5143 Re:項目名の取得について 悲しげ 2000/03/13-15:48
記事番号5140へのコメント
どもっ、真太郎さん、
v8になって、念願の「#項目番号」関数ができましたから、
これと「#項目属性」関数を組み合わせればできそうです。

5144 Re:項目名の取得について 真太郎 2000/03/13-16:05
記事番号5143へのコメント
悲しげさんありがとうございます。
V8になって #項目番号 がありますね
v7のマニュアルばかり調べて、なかったもんでどうしたらいいかと思ってました
やはり関数のマニュアルはプリントアウトしときます。

5145 Re:項目名の取得について 真太郎 2000/03/13-16:08
記事番号5142へのコメント
>真太郎さん、もう少し事情を説明していただいたほうがよさそうです。
>n件の価格名が項目名でデータは価格、価格が[価格]と一致する項目名を[該当項目名]を
>セットしたいということですが、価格をセットする項目が100にも及ぶ(!?)
>項目名の取り方だけで悩んでしまいそうです。ちょっと切り口を変えたほうがいいように
>思います。

宮城さんありがとうございます。
またまた、わたしの説明が足りずにすいません。
価格をセットする項目は1つなのですが、一致する項目をしらべる項目数が100あると
いうことなのです。

5147 Re:項目名の取得について 真太郎 2000/03/13-16:40
記事番号5143へのコメント
悲しげさんへ

#項目番号 には 項目名のstr を指定するようになってますよね
データの値を指定できればてっとりばやく項目名が取得できるのですが
なにかいい方法ありますかね?

5148 Re:項目名の取得について 悲しげ 2000/03/13-17:58
記事番号5147へのコメント
この件は、確かに#項目番号関数の出番は無さそうですね。(^^;)
で、やはり宮城さんのおっしゃるとおり、

>価格をセットする項目が100にも及ぶ(!?)
>項目名の取り方だけで悩んでしまいそうです。
>ちょっと切り口を変えたほうがいいように思います。

が正解だと私も思います。
が、このままでお望みの結果を得たいと云うことであれば、
ふつうこうゆうのは一括処理の出番です。そもそも#項目属性関数は、
パラメータが項目番号であることから、一括処理の繰り返しループで
使うのが定石だと思います。

で、念のために項目順序を若干変更して

 項目 [価格],[該当項目名],[a],[b],[c],[d],・・・・・・・・
(項目番号 1   2   3 4 5 6・・・・〜100?)

として考えます。

変数宣言 整数{&項目番号},数値{&価},文字列{&項目名}

繰り返し(.not #EOF)
 &項目番号=3
 繰り返し
  &項目名=#項目属性(&項目番号,1)\
  ,&価=#数値(#項目属性(&項目番号,0))
    /*↑文字列項目でエラーになるかもしんない?のを防止*/
  条件(&項目名="") 繰り返し中止
  if(&価=[価格])
   行訂正 [該当項目名]=&項目名
   繰り返し中止
  end
  &i=&i+1
 繰り返し終了
 ジャンプ 行番号=+1
繰り返し終了

ps:引用は必要最小限にしていただければ有り難く・・・。(^^;)

5149 訂正(^^;) 悲しげ 2000/03/13-18:01
記事番号5148へのコメント
  &i=&i+1
じゃなくて
  &項目番号=&項目番号+1
です。
変数名を判りやすいように書き直したつもりでしたが、
もれてました。(^^;)

5150 Re:項目名の取得について 宮城 2000/03/13-18:06
記事番号5145へのコメント
>価格をセットする項目は1つなのですが、一致する項目をしらべる項目数が100あると
>いうことなのです。

いえ、それはわかるのですが、それを項目中に取り込むと本当に項目名が100以上
いりますね。どんな手段使っても、名前を100個以上つけたうえ、100回の繰り返し
記述が要りますよ(たぶん桐に許容されない?)、ということを言っているのです。

もし、これが「単価表」のようなものでしたら、即座に品名と単価からなる表を作ればいいとなります。
明らかにしていただきたい「事情」とはなぜ同一レコード内に持たねばならないかということです。

5154 Re:項目名の取得について 佐田 守弘 2000/03/13-23:16
記事番号5150へのコメント
真太郎さん

私も宮城さんと同意見で、横に並んだ100個ほどの項目の中から指定した値の項目を探すというのは、
項目計算式で処理するのは困難であろうと考えます。
おそらく真太郎さんは、ExcelのLookup関数の機能の様なものを想像しておられるのだろうと思います。
しかし、桐の場合にこれに相当する事を簡単に行う事はできません。
これは表計算とデータベースの考え方の違いと御理解下さい。
つまり表計算では類似のデータが縦に並ぶ事もあれば、横に並ぶ事もあります。
これに対して、データベースは縦並びが原則で、
横方向は種類の違うデータ(データ型の違う項目)が並ぶのが普通です。
ですから、横方向の項目の並びの中から、値が一致する項目を探すといった機能は、
元来のデータベースの概念ではないと考えて下さい。

余談になりますが、桐の横集計関数は、本来のデータベースの主旨からすれば、
あり得ない概念なんですね(結構便利ですが)。

さて、目的を実現しようとした場合、2つの方法が考えられます。
@力技で勝負する
桐の究極の解決手段は一括処理。一括処理でゴリゴリ処理すれば、ほとんどの事ができてしまうのも事実です。
最後の手段としては、この方法があると思います。既に悲しげさんが#5148で書かれている方法がその1つでしょう。
私が考えたのもほぼ同じ内容です。
Aもっとエレガントな方法はないのか
もっとエレガントにデータベースらしく処理する事はできないのか?。これが正論の解法だと思います。
ですが、現在のデータの持ち方ではそれは不可能でしょう。
宮城さんが#5142にて、
>真太郎さん、もう少し事情を説明していただいたほうがよさそうです。
と書かれているのは、まさにそこにポイントがあるかと思います。
御質問された前提(表の持ち方)では解決手段はないけど、この課題の背景なり、
何のためにその様な事行うのか、といった事が分かると、全く別の切り口からの解決手段があるかも知れないかと思います。
おそらく宮城さんは頭の中で、100項目を超える金額の項目を横並びに持つのではなく、データベースらしく、
縦並びで処理する方法を考えておられると想像します。
しかしその様な事が可能なのか、それは意味がないのか、それは実際の課題に照らしてみないと分からない
部分があります。

そう言った意味で宮城さんは、背景などを御説明頂ければと書かれたのだと思います。そして、私も全く同意見です。

佐田守弘(KS-00119)

5155 Re:項目名の取得について hidetake 2000/03/14-01:33
記事番号5140へのコメント
どうしても #項目属性 を使いたい場合、次のような方法も
あります。[該当項目名]に次の計算式を設定します。

#項目属性(#対応番号(#h([a])+","+#h([b])+","+#h([c])+","+#h([d])
          ,#h([価格]))+#項目番号("a")-1,1)

#h(#hex) は #str でも良いけど、できるだけ文字列を短く
(内部の文字列および計算式の文字列)するためです。
あとは一致する値が無かった場合など工夫する必要があります。
計算式を分解し項目を分ければ考え方も簡単になると思います。
こんなやり方もあると言うことで...

5156 Re:項目名の取得について 真太郎 2000/03/14-11:55
記事番号5148へのコメント
悲しげさんありがとう
やはり一括をかかないとダメみたいですね
貴重なサンプルまでいただいて感謝です


5157 Re:項目名の取得について 真太郎 2000/03/14-11:57
記事番号5155へのコメント
hidetakeさんありがとうございます。
#項目属性をつかっての処理もできるんですね
すごい!
これからもよろしくお願いします。

5163 Re:項目名の取得について 真太郎 2000/03/14-15:28
記事番号5154へのコメント
お世話になります。
職場で友人が契約業務をしておりまして、桐を活用してるのですが、一括処理までは
まだ勉強していない状態でした。
私自身、友人の表を作りなおして、シンプルな形にしたいのですが、他の業務もあり
とりあえず、表の操作で処理できないものかと思い掲示板に投稿させていただきました。
私が公務員をやっていることもあり、業務の詳細をこの掲示板に書くことが今ひとつ
不安であったため、みなさんにご迷惑をおかけしているのだと思います。


なるべく、今後は業務の背景も含め質問したいと思っております。
今後ともよろしくお願いします。
5165 Re:項目名の取得について 宮城 2000/03/14-17:05
記事番号5163へのコメント
>私が公務員をやっていることもあり、業務の詳細をこの掲示板に書くことが今ひとつ
>不安であったため、みなさんにご迷惑をおかけしているのだと思います。

守秘義務もありますし、私でもまさか自社の月商などは当然隠します。(^^;;

率直にいいまして、佐田さんお見通しのように、私には横に持つ価格というのが、単価表に思えてしまいます。
それも数体系あるのかな、と。

であれば、

元の表を、[価格][該当項目名][適用表]

単価表あ、[項目名][価格](必要な件数登録)
単価表い、[項目名][価格](必要な件数登録)
単価表う、[項目名][価格](必要な件数登録。合計で100件程度))

のように作り(これが縦並びに持つという意味)、[該当項目名]の項目計算式に

#条件選択([該当項目名]="あ",#表引き([価格],=,"単価表あ",[価格],[項目名]),
      [該当項目名]="い",#表引き([価格],=,"単価表あ",[価格],[項目名]),
      [該当項目名]="う",#表引き([価格],=,"単価表あ",[価格],[項目名]),
      1,"")

とすれば済むということになります。

ただ、普通は名称から価格を引くもので、なにか違うのかなと思った次第です。
そもそも、上記ならばあ・い・うをまたがって同一価格があったときは対応できますが、
同一表内だとお手上げです。

5178 Re:項目名の取得について 悲しげ 2000/03/14-22:54
記事番号5165へのコメント
宮城さ〜ん、(^^;)

>#条件選択([該当項目名]="あ",#表引き([価格],=,"単価表あ",[価格],[項目名]),
>      [該当項目名]="い",#表引き([価格],=,"単価表あ",[価格],[項目名]),
>      [該当項目名]="う",#表引き([価格],=,"単価表あ",[価格],[項目名]),
>      1,"")                    ↑

本当はこうですよね。(^^;)

#条件選択([該当項目名]="あ",#表引き([価格],=,"単価表あ",[価格],[項目名]),
      [該当項目名]="い",#表引き([価格],=,"単価表い",[価格],[項目名]),
      [該当項目名]="う",#表引き([価格],=,"単価表う",[価格],[項目名]),
                              ↑

5180 Re:項目名の取得について 宮城 2000/03/14-23:36
記事番号5179へのコメント
お説のまま。しゅんまへん。m(__)m

戻る