初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-10-20 03:24:44

ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

ファイルメーカーpro12 windows7proです。
弁当の原材料表示を簡単に出来ないかと考えています。

弁当テーブルと原材料テーブルが有ります。
弁当テーブルのポータル内に原材料テーブルをリレーションで表示します。
例えば10個の原材料レコードがポータル内にあるとしたら
その中の原材料フィールド(テキスト)を1-10レコード分","でつないで
1つのラベルフィールドに格納したいのですが
なにかよい方法は無いでしょうか?

Offline

#2 2014-10-20 04:30:46

Hiro
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

「原材料表示」計算フィールドを作り、その式に、
      Substitute(List(原材料テーブル::原材料フィールド); [¶; ","])
と設定。

Offline

#3 2014-10-20 09:36:18

Shin
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

同じ項目が複数回出てこないのでしたら、Hiroさんの式でいいでしょうが、複数回でてくるのでしたら、集計作業が必要になるかも

Offline

#4 2014-10-20 11:11:49

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

HIRO様 Shin様 回答ありがとうございます。ポータルは必要ないんですね。
ほとんど、考えていた結果が出来ました。ありがとうございます。

ただもう一点、原材料の重さを入力していまして、
その重さの順に表示しないといけません。
ポータル表示ではソートをかけて重さ順になるのですが
原材料データにソートをかけていても、原材料表示フィールドでは元の作成順で
表示されるようです。
この解決法は有るでしょうか? よろしくお願いいたします。

Offline

#5 2014-10-20 11:26:44

Hiro
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

ソート設定をポータルではなくリレーション「原材料テーブル」に架けます。

Offline

#6 2014-10-21 22:14:16

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

HIRO様 「原材料テーブル」のリレーションにソートをかけると、バッチリ思うようにならびました。ありがとうございます。
ただやはりShin様のご指摘があったように、原材料で重複するものが出てきました。
Shin様、集計作業が必要になるとの事でしたが、どのようにすれば良いでしょうか?
本当に知らないことばかりで申し訳ございませんが、よろしくお願いいたします。

Offline

#7 2014-10-31 09:34:49

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

Shin wrote:

同じ項目が複数回出てこないのでしたら、Hiroさんの式でいいでしょうが、複数回でてくるのでしたら、集計作業が必要になるかも

仰せの通り、同じ原材料が重複してきます。重複した名前を一つにするコマンドとかが有るのでしょうか?

Offline

#8 2014-10-31 09:55:49

チポ
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

同一の原材料で異なる重さの場合はどう考えます?

Offline

#9 2014-10-31 10:02:25

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

チポ wrote:

同一の原材料で異なる重さの場合はどう考えます?

チボ様 コメントありがとうございます。
原材料で異なる重さの場合はその材料ごとの重さも先に計算しないとダメですね、ああそれで集計が必要になるのですね。
原材料を集計して、その結果のみをソートすればいいのでしょうか?

重さも表示のルールでどこまで必要なのかもう一度確認する必要がありそうですね。
一度考えてみます。ありがとうございました。

Offline

#10 2015-08-20 21:41:25

eddie
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

横から失礼いたします。
本質問と同じ悩みを抱えています。といっても、私のケースでは原材料の重さは不要です。

例えば材料が

砂糖



味噌
味噌

とポータル各行に入力されているときに、

砂糖,塩,酢,味噌

という計算結果を出したいのですが、どうしたらよいでしょうか?
よろしくお願いいたします。

※FMP11 Mac 使用です

Offline

#11 2015-08-20 23:03:55

Shin
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

材料名の羅列だけなら、動的な値一覧を作って、ValueListItems() 関数で取り出した文字列を、Substitute() 関数を使って改行をカンマに置換すればいいです。

合計の重さの順での表示が必要ならば、ポータル側のテーブルで集計した上で、集計値でソートし、エクスポートするか、その集計レイアウトのフィールド値をコピーする様な仕組みが必要かもしれません。(リレーションやポータル条件のソートでは、集計値は使えなかったと思う)

Offline

#12 2015-08-21 04:28:29

eddie
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

Shinさま

ありがとうございます!その方法でできました。
こんな便利な方法があるんですね。大変勉強になりました。

Offline

#13 2015-12-16 20:25:15

teru
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

横からすみません。 教えていただきたいのですが、現在ポータルに
no 品名       数量      担当
1  りんご    20        山田
2  みかん    10        佐藤
3  なし       50        山田
4  ぶどう    30        三俣

のレコード(レコード数は一定ではありません)がありこれらの複数フィールドを下記の様にしたいのですが教えて頂けないでしょうか、宜しくお願い致します。(現在List関数を使い1フィールドは表示出来るのですが複数になると上手くいきません)

りんご    ,20        ,山田
みかん    ,10        ,佐藤
なし       ,50        ,山田
ぶどう    ,30        ,三俣

#14 2015-12-17 09:40:36

holi
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

ポータル側テーブルに計算フィールド(結果:テキスト)を作って

フィールドA & "," & フィールドB & "," & フィールドC
のように繋いでそれを親テーブル側でListしたりとか。
フィールドごとに縦に表示を揃えたいときには字数に合わせて間にタブスペースを挟むとかやったことあるけど力技だなあ。

#15 2015-12-17 19:49:15

teru
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

holiさま、ご返事ありがとうございます。
現在holiさまから提案して頂きましたやり方で設定しておりますが、この方法だと上手くレコードが並ばず(数字やローマ字がある為、半角で設定していてもズレが出てしまいます)悩んでいました。 ですがこちらの方法で進めます。
あと、担当者フィールド値(リレーションにより表示)に重複した値を除いて

山田
佐藤
三俣
をlistで抜き出せないでしょうか? ValueListItems() 関数を使えば出来るようですが上手くいません。
すみませんが指導よろしくお願い致します。

#16 2015-12-18 09:22:05

holi
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

現在holiさまから提案して頂きましたやり方で設定しておりますが、この方法だと上手くレコードが並ばず(数字やローマ字がある為、半角で設定していてもズレが出てしまいます)悩んでいました。 ですがこちらの方法で進めます。

半角全角が混じる場合はバイト数換算(全角=2、半角=1)で考えます。
http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0022
カスタム関数Lengthb()

タブスペースの入力はCtrl+Tab(Macだとすいません分かりません;)

Let ([
	a = テキスト ;
	b = Length ( a & Filter ( a ; RomanZenkaku ( KanaZenkaku ( a ) ) ) ) ;
	c = Case (
		b > 11 ; "" ;
		b > 5 ; "	" ;
		"		"
	)] ;
	a & c
)

綺麗に並べようとすると字数とタブ送り数をチマチマと調整する必要がありますが。


あと、担当者フィールド値(リレーションにより表示)に重複した値を除いて

山田
佐藤
三俣
をlistで抜き出せないでしょうか? ValueListItems() 関数を使えば出来るようですが上手くいません。
すみませんが指導よろしくお願い致します。

担当者フィールド値を使った値一覧を作っていますか?

#17 2015-12-18 09:33:10

チポ
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

数字やローマ字がある為、半角で設定していてもズレが出てしまいます

holiさんの提案の通り、
タブコードを入れれば縦にそろえられますよ。


担当者フィールド値(リレーションにより表示)に重複した値を除いて

ルックアップ等でフィールド値とした方が簡単では、、

そうすれば、
そのフィールドで値一覧を作ると、
そのリストが重複を除いた値になります。

Offline

#18 2015-12-19 18:12:05

teru
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

holiさん、チポさん
ご返事遅くなりましたが御提案ありがとうございました。
holiさんが提案して頂きましたlenght関数を使った使用方法が分からないのでもう一度ご説明お願いできないでしょうか?

現在ポータル内にある4つのフィールドを「left(フィールドA;10) & "    " & left(フィールドB;15) & "    " & left(フィールドC;15)&"    " & フィールドD」と、1フィールドに格納しポータル内の複数レコードをlist関数でメール本文に貼り付けています。

フィールドA,Bは数字とローマ字が入り混じり文字数がA<=10,B<=15
フィールドC,Dは数字のみでC<=6,B=4 です。

大変お手数ですが、計算式の見本を教えていただけないでしょうか、宜しくお願い致します。

#19 2015-12-21 10:45:38

holi
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

フィールドA,Bは数字とローマ字が入り混じり文字数がA<=10,B<=15
フィールドC,Dは数字のみでC<=6,B=4 です。

ええっと、まず確認させてもらいたいけれどABCD全てのフィールドはローマ字か数字のみでひらがなカタカナ漢字等の2byte文字は入らないということ?
であれば全てのデータが半角にできるのでそのままLength()だけでも大丈夫なんだけれど。

#20 2015-12-21 14:15:00

チポ
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

等幅フォントで、スペースを使えば縦にそろえることは可能ですが、
それをメール本文で送信すると、
受け取った方の環境で表示が変わってしまうのでは。

Offline

#21 2015-12-21 15:33:34

holi
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

チポ wrote:

等幅フォントで、スペースを使えば縦にそろえることは可能ですが、
それをメール本文で送信すると、
受け取った方の環境で表示が変わってしまうのでは。

あっ、メールなのか!見落としてました;;
印刷ならそれなりに機能するけれど、
メールで綺麗に表示したいなら都度エクセルに出力したものを添付するくらいしかないのかも・・・

#22 2015-12-21 15:50:38

Hiro
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

HTMLメールにすれば自由自在になります。
HTMLメール送信は、ココの管理人さんが作っておられる「MailMakerPOP+」プラグインがお勧め!

Offline

#23 2015-12-21 17:25:00

teru
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

holiさん、チポさん、Hiroさんご返事ありがとうございます。
ABCD全てのフィールドはローマ字か数字のみの半角英数です。 ですが、メールは貼り付けると数字はローマ字の半分のピッチになりだんだんズレが出てきます。
半角の数字は1byteで半角ローマ字は2byteとしてカウントするのでしょうか?
一度半角ローマ字を2byteとしてカウントし並べる計算式を教えて頂けないでしょうか?
宜しくお願い致します。
チポさんが言われるようにメール環境により表示が変わってしまうのでしょうか? 現在使用しているpcはmacを使用していますが、ファイル完成後はwinのoutlookで
使用する予定です。
すみませんがもう一度ご指導宜しくお願い致します。
Hiroさんからご提案頂きましたプラグインは有償になってしまう為今回はやめておきますが、頭に入れておきます。

#24 2015-12-22 09:09:16

チポ
Member

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

半角の数字は1byteで半角ローマ字は2byteとしてカウントするのでしょうか

半角ならどちらも1byteでしょう。
等幅フォントでないと、同じ半角でも文字によってその幅は異なりますよ。

送信先ではそれをどう使うのでしょうか?
テキストファイルの添付ではダメなのかな。

Offline

#25 2015-12-22 10:01:37

holi
Guest

Re: ポータル内の複数レコードのある1フィールドの値(テキスト)を","で区切って別のフィールドにまとめたい。

A & Left ( "                    " ; 20 - ( Length ( A & A ) - Length ( Filter ( A ; "0123456789" ) ) ) ) & B

検証不十分ですがこんな感じになるかな?
ただチポさんも仰っていますが、teruさんの環境でズレるのはbyte数の関係でなくフォントのせいでしょう。
(byte云々について聞いたのは全角文字が入っててズレるのかと思ってました)
「等幅フォント」と「プロポーショナルフォント」について調べてみてください。

上の式も環境によってはかえって盛大にズレてしまうことになるのでこの方法はお薦めしません。
テキストやエクセルで出力する方法にするか、
()「」、/・などの記号を使って多少ズレても見やすいようにする、とした方が良いです。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.029 seconds, 8 queries executed - Memory usage: 583.55 KiB (Peak: 620.45 KiB) ]