過去の桐井戸端BBS (桐ver.9)
23266 条件によって項目の複写を行制約式で行いたい 徳田 2003/11/09-21:19
下の表を作成中なのですが・・・・
    X科目    Y科目
  1   200A
  2          201B
  3  203C     203C

                例 200A:受験番号

条件

(1) x科目のみの選択者(A)は、X科目へのみの入力 (200A)
(2) y科目のみの選択者(B)は、Y科目へのみの入力 (201B)
(3) x科目及びy科目の両方選択(C)した人は、X・Y科目とも入力 (203C)

計算式でやりたい方法
Cを含む受験番号の人だけは、X科目にその番号(203C)を入力した時点で、
Y科目へ複写(今回、皆様の智恵をお貸し願いたい部分です)して同じ番号を
入力しなくていい方法を色々考えたのですがうまくいきません。
過去の、質問に同じような事例が出ていたのですが、行制約式の中で自動的に
入力を省力化したいと思いまして・・・・

私が考えたのは 表定義の中で 項目計算式→ 項目属性→ 制約 

行制約式へ
    X科目:  #条件選択( #部分一致( [Y科目] , B , 3 ) , [X科目]="" , #部分一致( [X科目] , A , 3 ) , [X科目] , #部分一致( [X科目] ,
C , 3 ) ,[X科目] , 1 , ([X科目]="" .or [X科目]))
    
    Y科目:  #条件選択( #部分一致( [X科目] , "A" , 3 ) , [Y科目]="" , #部分一致( [Y科目] , "B" , 3 ) , [Y科目] , #部分一致( [X科
目] , "C", 3 ) , #複写([X科目] , 1) , 1 , ([Y科目] .or [Y科目]="") )

私が考えた計算式なのですが、複写の部分だけうまく働かないのです。
複写の関数は、この計算式の中では使えないのでしょうか?

どなたか教えてください。
私は、桐のV9を使用しています。

23267 Re:項目の複写を行制約式で うにん 2003/11/09-22:49
記事番号23266へのコメント

>計算式でやりたい方法
> Cを含む受験番号の人だけは、X科目にその番号(203C)を入力した時点で、Y
>科目へ複写(今回、皆様の智恵をお貸し願いたい部分です)して同じ番号を入力し
>なくていい方法を色々考えたのですがうまくいきません。

> 過去の、質問に同じような事例が出ていたのですが、行制約式の中で自動的に入
>力を省力化したいと思いまして・・・・

行制約式というのはそのまんまで「制約」するためのものなので、自動化とは無縁です。

> 私が考えた計算式なのですが、複写の部分だけうまく働かないのです。
> 複写の関数は、この計算式の中では使えないのでしょうか?

これも勘違いがあるように思います。複写という関数は同じ文字列を繰り返した形の文字列を
得るためのものです。#複写("あれ",2)="あれあれ"

入力の自動化は編集初期値かフォーム&イベントでやるものです。
表定義でしたければ[Y科目]の編集初期値に
#COND(#LAST([X科目],1)="C",[X科目])
と入れればいいのでは?
ただし、[X科目]に入力したときではなく[Y科目]にカーソルが来たとき入力されます。

23268 Re:項目の複写を行制約式で 磯田 2003/11/10-03:44
記事番号23266へのコメント
この場合は入力用のフォームを作成してイベントを用いて、入力を自動化するのがいいのではと思います。
つまり、試験Yの項目を編集する際に、試験Xのデータを初期値にするということです。具体的には

手続き定義開始 t試験Y::入力前( 参照 文字列 &編集文字列 )
 &編集文字列 = [試験X]
手続き定義終了

でできるのではないかと思いますが、的はずしてますか?
23269 Re:項目の複写を行制約式で アックン 2003/11/10-12:32
記事番号23266へのコメント
徳田さん、こんにちは。
受験番号を入力する専用の項目 [受験番号] を新たに設けて、科目の項目 [X]・[Y] にそれぞれ項目計算式を設定して、
自動的に値を確定してはいかがですか。
これだと1項目だけ入力すればすみますし、設定も簡単ですし、何よりも精度が増すと思うのですが、
なにか不都合があるのでしょうか(?)。

[X]の項目計算式
#cond(#last([受験番号],1)="A" .or#last([受験番号],1)="C",[受験番号])

[Y]の項目計算式
#cond(#last([受験番号],1)="B" .or#last([受験番号],1)="C",[受験番号])

[受験番号]の項目制約
(#last([受験番号],1)="A" .or#last([受験番号],1)="B" .or#last([受験番号],1)="C") .and#桁数([受験番号])=4
23331 Re:項目の複写を行制約式で 徳田 2003/11/13-06:58
記事番号23267へのコメント
うにんさん


お礼の返事をどこで書いて良いのか分かりませんでしたので、ここで書かせていただきます。
項目の複写については、編集初期値へ教えていただいた関数を入力して、問題は解決しました
1ヶ月近く色々試行錯誤を繰り返したのが嘘みたいです。ありがとうございました。
フォームとかイベントとかまだ分かりませんのでこれから勉強したいと思います。
では失礼します。


23332 Re:項目の複写を行制約式で 徳田 2003/11/13-07:02
記事番号23268へのコメント
磯田さん

項目の複写については、うにん さんから編集初期値への関数の入力で解決しました。
教えていただいたフォーム・・・イベントの意味がよく分からない段階ですので
これから勉強の参考にしていただきます。ありがとうございました。
では失礼します。

23333 Re:項目の複写を行制約式で 徳田 2003/11/13-07:17
記事番号23269へのコメント
>アックンさん、返事ありがとうございます。

>項目の複写については、専用の項目は設けたくなかったの、うにん さんから編集初期値への関数の入力で解決しました。

関数の内容は、アックン さんから教えていただいたものも うにん さんからのも同じものでした
ありがとうございました。桐をはじめてから日が浅いのですが、みなさんは、関数をほとんどご存じなのですか
私の場合 複写の関数を見つけるのにも過去の発言を頼りに探したのがやっとで、関数は、まだ2つか3つくらいしか分からない状況です。
これから勉強してみます。ありがとうございました。
では失礼します。


戻る