初心者のFileMaker pro Q&A

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

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス


#1 2021-02-23 14:54:05

きんとき
ゲストユーザー

同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

使用環境:Mac OS  Filemaker ver.19

あるテーブルに複数(40個程度)のフィールドがあり、そのフィールド内容は別のフィールドの値から計算で算出(異なるフィールドは異なる計算式で)しております。
1:入力されているフィールド値が何種類あるのか?
2:そのフィールドの値
3:その値を取るフィールド名
の3種類を求めたいと考えていますがやり方が分かりません。

例えば
フィールド名 値
————————————-
フィールドA  K-1
フィールドB  L-3
フィールドC  B-2
フィールドD  B-2
フィールドE  L-3
フィールドF  M-5
となっていた場合に

B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF
という結果を得たいのです。

どうか宜しくお願いいたします。

#2 2021-02-23 21:26:51

himadanee
ゲストユーザー

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

ListOfの集計フィールドをフィールド名に作って、値でソートして集計パートだけにすれば、そうなります。改行区切りなので、「、」に置換。

実際には「例えば」の形のデータをまず作る必要がありますね。最初のテーブル構造が悪いです。

#3 昨日 08:45:30

Shin
メンバー

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

異なるフィールドは異なる計算式 なので、仕方ないのでは。

While (
[
	fld = List ( "フィールドA" ; "フィールドB" ; "フィールドC" ; "フィールドD" ; "フィールドE" ; "フィールドF" ) ;
	val = Evaluate ( "List ( " & Substitute ( fld ; ¶ ; ";" )  & ")" ) ;
	res = SortValues ( UniqueValues ( val ) ) ;
	cnt = ValueCount ( val )
] ;
	cnt ;
[
	tar = GetValue ( val ; cnt ) ;
	res = Replace ( res ; Position ( res ; tar ; 1 ; 1 ) + Length ( tar ) ; 0 ; " " & GetValue ( fld ; cnt ) ) ;
	cnt = cnt - 1
] ;
	res
)

オフライン

#4 昨日 15:30:46

uchiまか
ゲストユーザー

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

●参照用レイアウトからフィールド名の一覧を取得

●フィールドの名称と値を逆転させて、JSONを作成(値をキーにしてフィールド名が集められる)

●Loop処理とGetValueを用いて値とフィールド名を集計

●フィールド設定を用いて結果を入力

【JSON】
{
    "B-2" :
    {
        "フィールドC" : 3,
        "フィールドD" : 4
    },
    "K-1" :
    {
        "フィールドA" : 1
    },
    "L-3" :
    {
        "フィールドB" : 2,
        "フィールドE" : 5
    },
    "M-5" :
    {
        "フィールドF" : 6
    }
}

【結果】
B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF

#5 昨日 15:33:46

uchiまか
ゲストユーザー

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

【処理01.】レイアウトの作成
1.対象のフィールドのみ(40個程度)を配置した、レイアウトメニューに表示しないレイアウトを作成
───────────────────────────────────

【処理02.】変数を設定
1.FieldNames関数を用いて、フィールドの一覧を作成
2.ValueCount関数を用いてフィールド数を求める
3.Loop処理のカウンターの初期値を定義
───────────────────────────────────

【処理03.】Loop処理(フィールド1~40個程度のLoop処理)
Loop
──── 【ロジック(変数を設定)】─────
EXit Loop If[$処理 = $フィールド数]
変数を設定:$処理 = $処理 + 1
End Loop

1.GetValue関数を用いて、フィールドの一覧の$処理番目を取得
2.GetField関数を用いて、$処理番目のフィールドのを取得
3.変数$JSONDataにフィールド名と値を逆転させたキーのJSONを作成
  JSONの値はLoop処理の変数、$処理を設定

  "B-2" :
  {
    "フィールドC" : 3,
    "フィールドD" : 4
  },
───────────────────────────────────

【処理04.】変数を設定
1.JSONListKeys関数を用いて、値の一覧を取得

  B-2
  K-1
  L-3
  M-5

2.JSONListValues関数を用いて、JSONの値一覧を取得

  {"フィールドC":3,"フィールドD":4}
  {"フィールドA":1}
  {"フィールドB":2,"フィールドE":5}
  {"フィールドF":6}

3.ValueCount関数を用いてJSONの数を求める
4.Loop処理のカウンターの初期値を定義

───────────────────────────────────

【処理05.】Loop処理(JSON1~n個のLoop処理)
Loop
──── 【ロジック(変数を設定)】─────
EXit Loop If[$フィールド集計処理 = $値の一覧数]
変数を設定:$フィールド集計処理 = $フィールド集計処理 + 1
End Loop

1.GetValue関数を用いて、JSON一覧の$処理番目を取得
2.GetValue関数を用いて、処理04で定義した、値の一覧の$処理番目を取得
3.JSONListKeys関数を用いて、フィールド名の一覧を取得

フィールドC
フィールドD

4.値2.と値3.の改行を、に置き換た値を連結させる

B-2:フィールドC、フィールドD

5.List関数を用いて、値4.を変数$集計データに加算する

【処理06.】
1.フィールド設定に処理05.5の値を指定

B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF

#6 昨日 15:35:00

uchiまか
ゲストユーザー

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

【処理01.】40個程度のフィールドのみを配置した専用レイアウトを作成し、レイアウト名を書き留める

───────────────────────────────────
【処理02.】変数を設定
Let ([
$Getフィールド名の一覧 = FieldNames ( "" ; "フィールド名の取得" ) ;
$フィールド数 = ValueCount ( $Getフィールド名の一覧 ) ;
$処理 = 1
];"")

───────────────────────────────────
【処理03.】Loop処理
Loop

変数を設定
Let ([
  $Getフィールド名 = GetValue ( $Getフィールド名の一覧 ; $処理 ) ;
  $FieldData = GetField ( $Getフィールド名 ) ;
  $JSONData = JSONSetElement ( $JSONData ; $FieldData & "." & $Getフィールド名 ; $処理 ; JSONNumber )
];"")

EXit Loop If[$処理 = $フィールド数]
変数を設定:$処理 = $処理 + 1
End Loop

───────────────────────────────────
【処理04.】変数を設定
Let ([
$Get値の一覧 = JSONListKeys ( $JSONData ; "" ) ;
$Getフィールドの一覧 = JSONListValues ( $JSONData ; "" ) ;
$値の一覧数 = ValueCount ( $Get値の一覧 ) ;
$フィールド集計処理 = 1 ;
$CountJSON = ValueCount ( $GetJSONListValues ) ;
$JSON処理 = 1
];"")

───────────────────────────────────
【処理05.】Loop処理
Loop

変数を設定
Let ([
  $GetJSONData = GetValue ( $Getフィールドの一覧 ; $フィールド集計処理 ) ;
  $Get値 = GetValue ( $Get値の一覧 ; $フィールド集計処理 ) ;
  $Getフィールド名 = JSONListKeys ( $GetJSONData ; "" ) ;
  $集計情報 = $Get値 & ":" & Substitute ( $Getフィールド名 ; "¶" ; "、" ) ;
  $集計データ = List ( $集計データ ; $集計情報 )
];"")

EXit Loop If[$フィールド集計処理 = $値の一覧数]
変数を設定:$フィールド集計処理 = $フィールド集計処理 + 1
End Loop

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer