みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM pro12、win7 です。
フィールドAに次のようなテキストが入っています。
[トヨタ]アクア/プリウス[ニッサン]ノート/キューブ/シルビア[ホンダ]フィット/ステップワゴン[トヨタ]アルファード/エスティマ[ホンダ]CR-V
これを、同じ車メーカー毎にまとめて下記のようにしたいです。
[トヨタ]アクア/プリウス/アルファード/エスティマ[ニッサン]ノート/キューブ/シルビア[ホンダ]フィット/ステップワゴン/CR-V
フィールドAには同じ車メーカーが3個や4個ある場合もあります。
車種名はフィールドA内で重複することはありません。
よい方法が思い浮かびません。
ご教示お願いいたします。
Offline
結構面倒な式ですが、3連動の再帰計算式から一発で求める例、
Let([
$lst=Substitute(フィールドA; "[";"¶[");
$lst=Right($lst;Length($lst)-1);
$res="";
//▼メイン再帰関数を定義
$fnc="Case(
IsEmpty($lst); $res;
Let([
$res=List($res; Let([$j=0;$key=GetValue($lst;1);$key=GetValue(Substitute($key;\"]\";\"]\¶\");1);$res1=\"\"];Evaluate($sub1)));
$lst=Let([$lst_a=$lst;$lst_b=$res1;$k=0;$res2=\"\"];Evaluate($sub2))
]; Evaluate($fnc))
)";
//▼サブ1再帰関数を定義
$sub1="Case(
$j=ValueCount($lst); $add;
Let([
$j=$j+1;
$row1=GetValue($lst;$j); $row1=Case(PatternCount($row1;$key); $row1);
$res1=List($res1; $row1);
$add=Substitute($res1;\¶&$key;\"/\")
]; Evaluate($sub1))
)";
//▼サブ2再帰関数を定義
$sub2="Case(
$k=ValueCount($lst_a); $res2;
Let([
$k=$k+1;
$row2=GetValue($lst_a;$k); $row2=Case(IsEmpty(FilterValues($row2;$lst_b)); $row2);
$res2=List($res2;$row2)
]; Evaluate($sub2))
)"
];
Substitute(Evaluate($fnc); ¶; "")
)
Offline
Hiroさん
ありがとうございます!
複雑でまだ理解できていませんが、じっくり試したいと思います。
ちなみに・・・
フィールドA は計算フィールドで、テキスト内容は他のテーブルの複数フィールドのテキストを結合しています。
その各フィールド内で [車メーカー名] は重複しません。
最初の例でいうと、下記のようになります。
ほかのテーブルのフィールドB の内容
[トヨタ]アクア/プリウス[ニッサン]ノート/キューブ/シルビア[ホンダ]フィット/ステップワゴン
ほかのテーブルのフィールドC の内容
[トヨタ]アルファード/エスティマ[ホンダ]CR-V
この状態から計算するほうが簡単に済んだりするのでしょうか。
Offline
それも計算フィールドだったりしませんか?
車の重複はなし?
ゆいさん
他のテーブルのフィールドは計算ではありません。
今までエクセルで管理していたのをインポートしたデータです。
車の重複は無いとも限りませんが、重複することはごく稀なのであまり気にしなくてもよいレベルです。
Offline
> #3 この状態から計算するほうが簡単に済んだりするのでしょうか。
同じことでしょう。DB構成が変わらないのだから。
Offline
Hiroさん
わかりました。ありがとうございます!
Offline
Pages: 1
[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 513.55 KiB (Peak: 518.09 KiB) ]