過去の桐井戸端BBS (桐ver.7)
12460 データの途中で連番をカウントし直す KKK 2001/07/30-16:50
こんにちは。
桐ver7.1を使用しています。

●項目Bで連番になるようカウントしたいのですが、項目Aのデータ内容が変わると連番も1からカウントし直す、
という動作は可能でしょうか?

例:

項目A 項目B 項目C 項目D …… 項目M

東京 1
東京 2
東京 3
. .
. .
. .
東京 10
大阪 1
大阪 2
大阪 3

●またそれぞれのデータ件数を表示させることは出来ますか?
上記例だと東京分データ:10件、大阪分データ:3件…という風にレポートで表示させたいのですが。

●それから項目A〜Mまでの文字数を行ごとに集計させることは出来ますか?

現在Microsoft Accessで処理している仕事を桐でも出来るようにしたいのですが、
Accessも使用したことがないので、そちらを見てもよく分かりません。
宜しくお願い致します。
12461 Re:データの途中で連番をカウントし直す KKK 2001/07/30-16:52
記事番号12460へのコメント
すみません、うまく表示ができていませんでした。

>例:
>
>項目A 項目B 項目C 項目D …… 項目M
>
>東京 1
>東京 2
>東京 3
> . .
> . .
> . .
>東京 10
>大阪 1
>大阪 2
>大阪 3

項目Aがそれぞれ「東京」「大阪」まで、項目Bが「1」「2」「3」…「10」
「1」「2」「3」という風に表したかったのです。
申し訳ありませんでした。
12462 Re:データの途中で連番をカウントし直す 磯田 2001/07/30-17:43
記事番号12461へのコメント
こんにちはKKKさん。
@連番の質問について、項目Bの項目計算式又は、置換計算式に #順位([項目A],#行番号)と入れてみてください。
A2番目の集計の質問については、行集計で項目Aを行集計の小計グループに設定して、
集計行の設定を[項目B]の欄に#件数([項目A])と入力してみてください。
B3つ目の質問に関しては意味がよくわかりませんのでもう少し具体的に説明してください。
12473 Re:データの途中で連番をカウントし直す KKK 2001/07/31-01:07
記事番号12462へのコメント
磯田さん、こんばんは。
御回答頂き有難う御座います。

>@連番の質問について、項目Bの項目計算式又は、置換計算式に #順位([項目A],#行番
>号)
>と入れてみてください。
>A2番目の集計の質問については、行集計で項目Aを行集計の小計グループに設定して、
>集計行の設定を[項目B]の欄に#件数([項目A])と入力してみてください。

有難う御座います。
明日明後日と会社が休みですので、休み明けに早速試してみます。

>B3つ目の質問に関しては意味がよくわかりませんのでもう少し具体的に説明してくださ
>い。

言葉足らずで申し訳ありません。

例:

項目A 項目B 項目C 項目D …… 項目M

東京  1
東京  2
東京  3
. .
. .
. .
東京  10
大阪  1
大阪  2
大阪  3

例えば一番上の行の項目Aには「東京」という2文字、項目Bには「1」という1文字が入っていますよね。
ですから、項目A+項目Bの文字数は「3」という事になると思うのですが。
こういう風にそれぞれ各行毎に項目Aの文字数から項目Mの文字数までを集計したいのです。

先程よりは説明になっているでしょうか?
12474 Re:データの途中で連番をカウントし直す 悲しげ 2001/07/31-02:08
記事番号12473へのコメント
どもっ、KKKさん

>項目A 項目B 項目C 項目D …… 項目M
>
>東京  1
>東京  2
>東京  3
>. .
>こういう風にそれぞれ各行毎に項目Aの文字数から項目Mの文字数までを集計したいのです

何のためにこのような集計が必要なのでしょう?
目的によっては、もっと別な切り口で扱った方がいい場合がありますから、
その目的も書かれるとよりよいアイディアが出て来そうです。

与えられた条件でやり方を考えてみますが、その前に、項目B〜Mのデータ型は文字列型でしょうか、数値系の型でしょうか?
それによって対応方法は異なります。
初めのふたつの質問からすると、これら項目は数字として縦に集計しているようにも思えます。
しかし三つ目の質問からすると、これは数字ではなくて文字列であるかのような印象がありますので、
取り敢えず後者と断定してコメントをつけてみます。

項目L(数値系の型)を増設して、そこの項目計算式を次のように設定します。

  #文字数([項目B])+#文字数([項目C])+・・・・・+#文字数([項目M])

文字数ではなく桁数で欲しければここは

  #桁数([項目B])+#桁数([項目C])+・・・・・+#桁数([項目M])

となります(全角文字は2桁、半角文字は1桁としてみなされます)。

もし、項目B〜Mが数値系の型であるならば、文字数等を求めることに意味があるとは思えませんです。


12499 Re:データの途中で連番をカウントし直す KKK 2001/08/02-08:26
記事番号12474へのコメント
悲しげさんこんにちは、いつも御回答を有り難う御座います。

>>項目A 項目B 項目C 項目D …… 項目M
>>
>>東京  1
>>東京  2
>>東京  3
>>. .
>>こういう風にそれぞれ各行毎に項目Aの文字数から項目Mの文字数までを集計したいのです
>
>何のためにこのような集計が必要なのでしょう?
>目的によっては、もっと別な切り口で扱った方がいい場合があります
>から、その目的も書かれるとよりよいアイディアが出て来そうです。

…こればかりは取引先業者からの依頼ですので、こちらでは何ともコメントしにくい事です。
必要な理由は分かってはいますが、あくまで社内の内部事情に係る事ですので、
理由についての説明はご了承下さい。
お教え頂いた内容については早速試してみたいと思います。
ありがとうございました。

12501 Re:データの途中で連番をカウントし直す KKK改めNTA 2001/08/02-09:10
記事番号12499へのコメント
こんにちは、早速(1)について試してみました。
が…。

項目B(文字列型)の項目計算式に

#順位([項目B],#行番号)

と入れると、

KD1474:使用できない関数があります
#順位

というエラーメッセージが出ます。

かといって項目置換に入れると、

KD1625:関数の引数で項目名を指定するところにそれ以外が指定されています
#順位([項目B],#行番号←

というエラーメッセージが出るのです。

何か設定を誤っているのでしょうか?
何度も申し訳有りませんが宜しくお願いします。

P.S.
ハンドルネーム変えてみました。
12505 Re:データの途中で連番をカウントし直す 【多遊】 2001/08/02-12:21
記事番号12501へのコメント
こんにちは、一連の流れを拝見させていただいてますが、
ご質問は、
>例えば一番上の行の項目Aには「東京」という2文字、
>項目Bには「1」という1文字が入っていますよね。
>ですから、項目A+項目Bの文字数は「3」という事になると思うのですが

>こういう風にそれぞれ各行毎に項目Aの文字数から項目Mの文字数までを集計したいのです。
つまり
項目B=項目Aの値によって連番
項目C以降は
項目C=項目A〜項目Bまでの文字数(東京・1)
項目D=項目A〜項目Cまでの文字数(東京・1・3)
項目E=項目A〜項目Dまでの文字数(東京・1・3・4)
項目F=項目A〜項目Eまでの文字数(東京・1・3・4・5)

そして求めたい答えは
項目A 項目B 項目C 項目D 項目E…… 項目M
東京  1 3 4 5 **

このようなご質問でしょうか。
そして項目Cから項目Mまでは数値項目でしょうか?

また、
項目Bは連番を入れるのにどうして文字列を使用されてるのでしょうか
(それでも出来るけど)当然#順位関数を使用すると更に文字列にする必要があります。

12506 Re:データの途中で連番をカウントし直す NTA 2001/08/02-12:50
記事番号12505へのコメント
多遊さんこんにちは、御回答有り難う御座います。

私が提示した質問ですが、2つめの質問と3つめの質問についてはどうやら希望の物が出来たようです。
2つめは磯田さんがおっしゃったやり方で、3つめは悲しげさんがおっしゃったように、

>#文字数([項目A])+#文字数([項目C])+・・・・・+#文字数([項目M])

というやり方でできました。

現在は一番始めの問い、
『項目Bで連番になるようカウントしたいのですが、項目Aのデータ内容が変わる
と連番も1からカウントし直す、という動作は可能でしょうか?』
という点で躓いています。

>項目B=項目Aの値によって連番
>項目C以降は
>項目C=項目A〜項目Bまでの文字数(東京・1)
>項目D=項目A〜項目Cまでの文字数(東京・1・3)
>項目E=項目A〜項目Dまでの文字数(東京・1・3・4)
>項目F=項目A〜項目Eまでの文字数(東京・1・3・4・5)
>
>そして求めたい答えは
>項目A 項目B 項目C 項目D 項目E…… 項目M
>東京  1 3 4 5 **
>
>このようなご質問でしょうか。
>そして項目Cから項目Mまでは数値項目でしょうか?

項目C〜Mには全く違う内容のデータが入ります。
例えば、項目Cには「郵便番号」、項目Dには「住所」といった具合です。
ですからC〜Mは文字列で設定してあります。

>また、
>項目Bは連番を入れるのにどうして文字列を使用されてるのでしょうか
>(それでも出来るけど)当然#順位関数を使用すると更に文字列に
>する必要があります。

すみません、項目Bは「数値型」の間違いです。
実際のデータとは項目名が違うので、うっかり書き間違えてしまいました。
すみませんでした。
正しくは

>>項目B(数値型)の項目計算式に
>>#順位([項目B],#行番号)
>>と入れると、
>>KD1474:使用できない関数があります
>>#順位
>>というエラーメッセージが出ます。
>>かといって項目置換に入れると、
>>KD1625:関数の引数で項目名を指定するところにそれ以外が指定されています
>>#順位([項目B],#行番号←
>>というエラーメッセージが出るのです。

となります。
長くなって申し訳ありません。
宜しくお願いします。


12507 Re:データの途中で連番をカウントし直す うにん 2001/08/02-15:22
記事番号12506へのコメント
>現在は一番始めの問い、
>『項目Bで連番になるようカウントしたいのですが、項目Aのデータ内容が変わる
>と連番も1からカウントし直す、という動作は可能でしょうか?』
>という点で躓いています。

#条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"先頭",1)
[A]のデータが同じなら、[B]を1増やす。そうでなければ1にもどす。という計算式です。

12512 Re:データの途中で連番をカウントし直す 悲しげ 2001/08/02-21:16
記事番号12507へのコメント
どもっ、改名したNTAさん、
既にうにんさんがコメントしていますが、一瞬(?_?)とは思ったものの、
これでもきちんと動きますね。(^^;)

かなり「通」(つー)な書き方ですから、うにんさんも、もしかしたら改名した
#部分列(#ふりがな("通行人"),4,3)さんなのかな?とも思ったり。
チガッテタラ、スイマセン

さて、#12507

  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"先頭",1)

についてですが、ここはやはり一般的な記述、すなわち次のような記述で
教えたあげた方が、無用な混乱を招かないように思うのですが・・・。

  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,1,1)

前式で「"先頭"」とあるところを後式では「1」としました。
この「1」は「else」(そうでなければ……)のような意味で、おそらく桐
では最もオーソドックスな記述方法だと思います。
ただ、ここは前の式のように、それこそ何を入れてもelseとして挙動はします。例えば

  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"最後",1)
  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,100,1)
  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"何でもいいのよ、お前さん",1)

でも、もしかしたらNTAさんは初心者かもしれないので(違ってたらすいません)、
私なら努めて一般的な「1」でコメントするようにします。

ps:>NTAさん
このように#直前値関数を使う場合は、並び順が大きく影響しますから、
大抵は必要な並べ替え条件なり索引なりを設定しておきます。

12517 Re:データの途中で連番をカウントし直す うにん 2001/08/03-11:54
記事番号12512へのコメント
>どもっ、改名したNTAさん、
>既にうにんさんがコメントしていますが、一瞬(?_?)とは思ったものの、
>これでもきちんと動きますね。(^^;)
>
>かなり「通」(つー)な書き方ですから、うにんさんも、もしかしたら改名
>した#部分列(#ふりがな("通行人"),4,3)さんなのかな?とも思ったり。
>チガッテタラ、スイマセン

が〜ん。うにんの由来はunixなんですが、こんどからうにんは苗字で名前がつうこってことにしようかな。

>さて、#12507
>
>  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"先頭",1)
>
>についてですが、ここはやはり一般的な記述、すなわち次のような記述で
>教えたあげた方が、無用な混乱を招かないように思うのですが・・・。
>
>  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,1,1)
>
>前式で「"先頭"」とあるところを後式では「1」としました。
>この「1」は「else」(そうでなければ……)のような意味で、おそらく桐
>では最もオーソドックスな記述方法だと思います。
>ただ、ここは前の式のように、それこそ何を入れてもelseとして挙動はしま
>す。例えば
>
>  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"最後",1)
>  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,100,1)
>  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"何でもいいのよ、お前さん",1)
>
>でも、もしかしたらNTAさんは初心者かもしれないので(違ってたらすい
>ません)、私なら努めて一般的な「1」でコメントするようにします。

一般的だけど、1が並ぶとわかりにくいかと思ったので。。。まあ、「1」にするのが定石ではありますね。実行も速そうだし。
「真」になる条件式が必要なので、「ゼロでも未定義でもない」ものでないとだめです。
「何でもいいわけでもないのよ、お前さん(^^;」

12518 Re:データの途中で連番をカウントし直す NTA 2001/08/03-13:53
記事番号12506へのコメント
うにんさん、悲しげさん、御回答有り難う御座います。
おかげさまで躓いていた「データの途中で連番をカウントし直す」という事が出来るようになりました。
悲しげさんのおっしゃるように、桐は全くの初心者なので、式を見ただけでは何のことかさっぱり分かりませんが、
自分でもう一度式を作りながら考えてみると、何となくではありますが式の意味が分かったような気がします。

今は応用編(?)に挑戦中です。
今度は項目1(文字列)、項目2(文字列)、項目3(数値)という時に、
項目1は都道府県の類が入り、項目2には市町村の類が入る場合、
(項目1・2は既に昇順で並んだ状態)
項目3には、市町村が変わると番号が1つ増える、
(市町村が同じであれば同じ番号のまま)
そして都道府県が変わると番号も1に戻るという式を作りたいと思っています。
先程からいろいろ試しているのですが、まだうまく出来ていません。
でも出来るだけ自力で挑戦して、どうしても駄目なら、
また此処で助けて頂こうと思っています。
その時はまたよろしくお願いします。
12519 Re:データの途中で連番をカウントし直す 悲しげ 2001/08/03-14:00
記事番号12517へのコメント
どもっ、うにんさん
通行人さんとは別人だったみたいですね、失礼いたしました。

先に書いたことを補足しますと、「1」を使うことが桐のヘルプにもある定石的な書き方であることに加えて、
挙げられた"先頭"のようなやつだと、却って「一見意味が有るパラメータ」であるかのような誤解を招きかねないのでは?と云うことです。
例えば、「そうか、項目[A]の値が直前のものと同じではない場合には
"先頭"のレコードを1とするのか、なるほど〜」なんてね。


ps:以下はどっちかっつーと言葉の遊びです。(^^;)

>「真」になる条件式が必要なので、「ゼロでも未定義でもない」ものでないと
>だめです。「何でもいいわけでもないのよ、お前さん(^^;」

御意。
厳密に云うとそうですね。だから

×  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"",1)
×  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,#未定義,1)
×  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,0,1)

○  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"未定義",1)
○  #条件選択([A]=#直前値([A],""),#直前値([B],0)+1,"0",1)
12520 Re:データの途中で連番をカウントし直す 悲しげ 2001/08/03-14:16
記事番号12519へのコメント
悲しげさんwrote
>例えば、「そうか、項目[A]の値が直前のものと同じではない場合
>には"先頭"のレコードを1とするのか、なるほど〜」なんてね。

これだけでは趣旨が通じないかもしれないので、もうちょっとつけたします。

例えば、「そうか、項目[A]の値が直前のものと同じではない場合に、先頭のレコードを1とするには"先頭"と書くのか、なるほど〜。
じゃ、後ろから1とするなら"最終"って書くのかな。
って、試してみたけど、あれぇ"先頭"の時と同じぞ?
調べてもヘルプには書いてないし、レレレのレ〜(?_?)」なんてね。

ps.
あ、これって「誤解」のされ方の話ですので、その点「誤解」されないように。(^^;)

戻る