過去の桐井戸端BBS (桐ver.9)
22268 空欄になっている項目に#直前値を使ってデータを入れたい tama 2003/09/09-20:32
教えてもらいたい事があります。会社で下の様なデータ(エクセル)をいただきました。(その後桐に変換しました)

例 ファイル名 商品.tbl

項目名  あ  い  う  え  お
     1  2  3  4  01
     1           02
     1           03
     2  3  4  5  01
     2           02
     3  4  5  6  01
     3           02
3           03
3           04
4  ・  ・  ・  ・
     ・  ・  ・  ・  ・

 項目名”あ”と”お”は最後の行(1000行)までデータが入っているの
ですが、上記の様に”い” ”う” ”え”については空欄になっています。
数行であれば、手動で直前値をするのですが、1000行にもなると時間はかかるし、辛いです(;。;)
そこで、項目名”あ”を参照して空欄の”い” ”う” ”え”を直前値する
一括処理する方法があればご教授をお願いします。”お”についてはそのままということで・・・
過去ログ等を確認しましたが、良く解らなかったので質問をさせていただきました。
ご迷惑をおかけしますが宜しくおねがいします。
22270 Re:直前値について 佐田 守弘 2003/09/09-22:49
記事番号22268へのコメント
tamaさん
質問で、「項目名”あ”を参照して」と書かれていますが、どの様に参照するのかの意味が分りません。
多分、値が直前と変わっていたらの様にも取れますが、
そういう意味であれば参照する意味はなく、単に[い]移行の値が空白であったら
直前値をコピーすれば良いかと思います。

なお、行訂正や項目値代入では#直前値関数が使えませんから、
項目値を変数に代入しておいて、これを項目値に書き込みます。
すなわち、以下の通りです。

ジャンプ 行番号=先頭
代入 &い=[い],&う=[う],・・・
繰り返し (.not #終端行)
 条件 ([い]=#未定義) 行訂正 [い]=&い
 条件 ([う]=#未定義) 行訂正 [う]=&う
  ・・・・・
 代入 &い=[い],&う=[う],・・・
 ジャンプ 行番号=+1
繰り返し終了

と書いてみたものの、置換操作ないしは一括処理の置換コマンドで、
以下の計算式を使ってもできそうに思えますね。

 置換 [い]=#条件選択([い]=#未定義,#直前値([い],""),1,[い])

[う]以降も同じ様に書きます。

佐田守弘(KS-00119)


22271 Re:直前値について tama 2003/09/09-22:54
記事番号22270へのコメント
佐田 守弘さん早速のご教授ありがとうございました。
手元にデータが無いので明日確認をします。
解りづらい質問ですみませんでした。
22272 「#直前値」関数の仕様? 悲しげ 2003/09/09-23:28
記事番号22270へのコメント
どもっ、佐田さん
私も「項目名”あ”を参照して」の趣旨が判らないことは同じですし、

> 置換 [い]=#条件選択([い]=#未定義,#直前値([い],""),1,[い])\
>   ,[う]=#条件選択([う]=#未定義,#直前値([う],""),1,[う])\
>   ,・・・・・・・・

最初はそう考えましたが、だがしかしbut、実際にやってみると

項目名  あ  い  う  え  お
     1  2  3  4  01
     1           02
     1           03
     1           04

           ↓

     1  2  3  4  01
     1  2  3  4  02
     1           03
     1           04

のようにしかならないのです。(?_?)
どうやら「#直前値」関数は、置換される前(変更前)の値を保持しているようなのです。
だから、本件のやり方としては、先に挙げた
「繰り返し」ループで1行づつ舐めていくしかなさそうです。

が、「#直前値」関数の仕様って、昔からこうでしたっけ?
としたら、桐ver4から使って来ましたが、今回初めて知りました。(^^;)

22274 Re:「#直前値」関数の仕様? 佐田 守弘 2003/09/09-23:42
記事番号22272へのコメント
悲しげさん
だめでしたか。繰り返しループの方を書いているうちに、
こんな方法もあろうかと思って追加したので、試してませんでした。

>が、「#直前値」関数の仕様って、昔からこうでしたっけ?
言われてみると、そこまで深く考えた事はなかったですね。
確かに#直前値関数が使えるケースは限られてますけど。

佐田守弘(KS-00119)

22278 Re:「#直前値」関数の仕様? T.Samura 2003/09/10-07:42
記事番号22272へのコメント
悲しげさん、こんにちは。
> 置換 [い]=#条件選択([い]=#未定義,#直前値([い],""),1,[い])\
>   ,[う]=#条件選択([う]=#未定義,#直前値([う],""),1,[う])\
>   ,・・・・・・・・
 これで会話処理・一括処理とも巧く行きましたが、ひょっとして
表の項目値にスペースが入っているとか?

22281 Re:「#直前値」関数の仕様? うにん 2003/09/10-09:12
記事番号22272へのコメント
>     1  2  3  4  01
>     1  2  3  4  02
>     1           03
>     1           04
>
>のようにしかならないのです。(?_?)
>どうやら「#直前値」関数は、置換される前(変更前)の値を保持し
>ているようなのです。だから、本件のやり方としては、先に挙げた
>「繰り返し」ループで1行づつ舐めていくしかなさそうです。
>
>が、「#直前値」関数の仕様って、昔からこうでしたっけ?
>としたら、桐ver4から使って来ましたが、今回初めて知りました。(^^;)

V5ではちゃんと置換されました。
V9SP1でも「行ごとに確認」すると置換されるのですが、これでは本末転倒。
「アンドゥ」が影響しているのかと思いましたが、そうでもないようです。
なんでしょうね?

22283 Re:「#直前値」関数の仕様? 宮城 2003/09/10-12:40
記事番号22278へのコメント
V8 SP6だと T.Samuraさんのお書きになっているとおり、会話・一括処理とも
問題ないようです。悲しげさん、V9?

22284 Re:「#直前値」関数の仕様? 悲しげ 2003/09/10-15:01
記事番号22283へのコメント
どもっ、宮城さん

>V8 SP6だと T.Samuraさんのお書きになっているとおり、会話・一括処理とも
>問題ないようです。悲しげさん、V9?

ははぁ、なるほど。私はV9sp1です。多分うにんさんも。
で、早速V8sp7で試してみましたが、仰るとおりです。
つーことは、仕様変更とも考え難いので、V9(sp1)のバグっぽいですね。

22285 手抜き入力の手入れとでもいうのだか? 宮城 2003/09/10-19:21
記事番号22268へのコメント
#直前値関数はさておきまして。

書き込みの意図が、「あ」の値が同様であるならば、「い」「う」「え」
各項目も先頭レコードと同じ値を引き継がせたい。
つまり、「あ」から「え」までの項目がセットである、という意味にも取れないことはありません。
(しかし、かなり想像をたくましくして、ですよ。実例をあげていただいてるから、書いてみるんですが。)

そうであれば、本当に「あ」にしか値がなく「い」「う」「え」はヌルの場合もある可能性があります。

(さらに言えば、もしそうなら、実は「い」「う」「え」を表中に持ち込む必要はないんですが。)

であれば、こんな操作になります。レコードの並びはきっちり保証されているという前提を「勝手に」置きます。

カーソルを「あ」にもってきて「絞込み」→「単一化」。これで、「い」「う」「え」にデータの入ったレコードだけが
表示されている状態になります。これを「書き出し」、表名は仮に「WRK.TBL」。

まだ、元の表だけが開いてる状態です。「絞込み」→「補集合」で、
「い」「う」「え」が空のレコードだけが表示されている状態になりますので、
「併合」→「置換」。元表は「WRK.TBL」。「あ」で照合し、
「い」「う」「え」はそれぞれ複写。

ご本尊をつぶしてしまったら大変ですので、コピーして、コピーしたものに対してやってみてください。

戻る