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

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

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

You are not logged in.

Announcement

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


#1 2019-02-04 19:43:02

まっくす
Guest

スクリプト上でのノットイコール検索

いつもお世話になっております。

現在絞り込まれているレコードの中から一定の条件に該当するものを更に絞り込みたいのですが、どうスクリプトを組んでいいか悩んでいます。
ノットイコールの検索をしたいのです。
通常であれば

検索モードに切り替え [一時停止:オフ]
フィールド設定[Aフィールド ; "=あ"]
レコードを対象外に
対象レコードの絞り込み []

のようにすればノットイコールに出来るかと思います。
しかし、今回は下記のような条件で絞り込みたいのです。

(
 Aフィールド ≠ "あ" and
 Aフィールド ≠ "い"
) or
(
 Bフィールド ≠ "う" and
 Bフィールド ≠ "え"
) or
(
 Cフィールド ≠ "お" and
 Cフィールド ≠ "か"
)

これをスクリプトで検索するにはどのようにしたら良いでしょうか?
お知恵を貸していただきたいです。

#2 2019-02-05 08:46:26

Shin
Member

Re: スクリプト上でのノットイコール検索

ノットイコール の意味を説明してください。
  普通は、同じでない、とか、同じものを除外、という意味ですが。

上の条件でしたら、loop で条件を複数作っていけばいいです。

または、not ( A and B ) は、notA or not B に展開できますので、これを利用します。

Offline

#3 2019-02-05 09:54:08

まっくす
Guest

Re: スクリプト上でのノットイコール検索

Shinさん

回答ありがとうございます。
ノットイコールの意味というのは、そのまま ≠ のことで、仰る通り「同じでない」ものの検索のことです。
loopで条件を複数作る方法と展開する方法を教えていただいたのですが、
申し訳ないのですがスクリプト上でどのようにすればいいか全く分かっておりません。

例えば、例で挙げさせていただいた

(
 Aフィールド ≠ "あ" and
 Aフィールド ≠ "い"
) or
(
 Bフィールド ≠ "う" and
 Bフィールド ≠ "え"
) or
(
 Cフィールド ≠ "お" and
 Cフィールド ≠ "か"
)

の検索を実現するためにはどのようにスクリプトを組めば良いのでしょうか?
なかなか理解が及ばずすいません。

#4 2019-02-05 10:14:07

Shin
Member

Re: スクリプト上でのノットイコール検索

検索モード
フィールド設定[Aフィールド ; "≠あ"]
フィールド設定[Aフィールド ; "≠い"]
新規検索条件
フィールド設定[Bフィールド ; "≠う"]
フィールド設定[Bフィールド ; "≠え"]
新規検索条件
フィールド設定[Cフィールド ; "≠お"]
フィールド設定[Cフィールド ; "≠か"]
検索実行
でいいのでは。

Offline

#5 2019-02-05 10:43:44

まっくす
Guest

Re: スクリプト上でのノットイコール検索

Shinさん

≠ がそのまま使えるんですね!
目から鱗でした。

ちなみに素朴な疑問ですが

検索モード
フィールド設定[Aフィールド ; "≠あ"]
フィールド設定[Aフィールド ; "≠い"]

これって、Aフィールドって最終的に "≠い" の検索条件で上書きされないのでしょうか?
これで Aフィールドに「あ」も「い」も含まれない という検索になるということですよね?
感覚的に、"≠あ" & ¶ & "≠い" みたいにしないとダメかと思っておりました。
早速試してみたいと思います。
ありがとうございます。

#6 2019-02-05 11:05:59

チポ
Member

Re: スクリプト上でのノットイコール検索

「≠」
演算子としては使えませんよ。
検索値になってしまいます。


  検索モード
  フィールド [設定Aフィールド ; "A"]
  レコードを対象外に
  新規検索条件
  フィールド [設定Aフィールド ; "B"]
  レコードを対象外に
  検索実行

これで最初の検索ができます。

その次の
  or
の意味が分からないのですが、
普通にor検索のつもりなら、
新規検索条件をどんどん増やせばいいです。

Offline

#7 2019-02-05 12:02:14

チポ
Member

Re: スクリプト上でのノットイコール検索

間違えた!
  A B
これは
  あ  い
と読み替えてください-_-

Offline

#8 2019-02-05 12:40:10

Shin
Member

Re: スクリプト上でのノットイコール検索

あぁ、勘違いしていました。申し訳ないです。

Offline

#9 2019-02-05 12:52:39

Hiro
Member

Re: スクリプト上でのノットイコール検索

複雑な複合条件でのFM検索は、酷く面倒ですよネ。
そんな時、複雑な検索条件もより簡潔な計算式で表現できるFM機能で代替させるのも一法です。
例えば、
全件ヒットするデカルト積[X]ポータルに、条件計算式のポータルフィルターを掛け、
そのフィルターを反映した結果「関連レコードへ移動」して、目的条件検索の完了。

Offline

#10 2019-02-05 12:55:59

himanine
Guest

Re: スクリプト上でのノットイコール検索

その次の
  or
の意味が分からないのですが、
普通にor検索のつもりなら、
新規検索条件をどんどん増やせばいいです。

「対象外に」がor動作でないので、そう単純でもない。

あorい and うorえ and おorか
を除外すればよさそうだけど、2x2x2で8行の条件になる。

#11 2019-02-05 13:36:14

チポ
Member

Re: スクリプト上でのノットイコール検索

「あ」かつ「う」かつ「お」
のレコードを除外

ということなら、
対象レコードの絞り込み
を使って3回検索するのが簡単でしょう。

Offline

#12 2019-02-05 14:29:29

Moz
Member

Re: スクリプト上でのノットイコール検索

or 検索には[対象レコードの拡大]も利用できます。
チポさんの

検索モード
フィールド [設定Aフィールド ; "あ"]
レコードを対象外に
新規検索条件
フィールド [設定Aフィールド ; "い"]
レコードを対象外に
検索実行

に続いて

検索モード
フィールド [設定Bフィールド ; "う"]
レコードを対象外に
新規検索条件
フィールド [設定Bフィールド ; "え"]
レコードを対象外に
対象レコードの拡大

で or となりますが、この場合は最初の検索条件で除外したレコードも出てきます。

チポさんが書かれている[対象レコードの絞り込み]に変えれば
すべての検索条件を満たす結果となります。

質問者さんが求めているのはどちらでしょう?

Last edited by Moz (2019-02-05 14:31:05)

Offline

#13 2019-02-05 14:33:03

まっくす
Guest

Re: スクリプト上でのノットイコール検索

チポさん

回答ありがとうございます。
仰る通り、恐らく複数回の検索で絞り込まないと難しそうですよね・・・

今回で言えば
①Aフィールドが「あ」でも「い」でもない
②Bフィールドが「う」でも「え」でもない
③Cフィールドが「お」でも「か」でもない

という条件の①~③のどれかに当てはまるレコードのみを抽出したい という複雑な内容なので頭がこんがらがっています。。


Shinさん

いえいえとんでもないです!
いつもありがとうございます。


Hiroさん
回答ありがとうございます。
なるほど、複雑な絞り込みになるとそちらの方法が現実的な方法な気がしますね。
そちらのやり方を試してみたいと思います。


himanineさん
回答ありがとうございます。
対象外に というのが、andで動作してしまうので難しいところですよね・・・
あー、なるほど全てのパターンを網羅させればいけそうですね。
数が少ない時にはこの方法でもいけそうですね!


皆様ありがとうございました!
少し方向性が見えてきたかと思います。
他にも良い方法があれば教えていただきたいですが、
とりあえず解決を付けさせていただきます。

#14 2019-02-05 14:37:38

まっくす
Guest

Re: スクリプト上でのノットイコール検索

Mozさん

回答ありがとうございます。
求めているのは、今絞り込まれているレコードの中から、更に上記の条件で絞り込みたいというわがままなのです。
そのため、「対象レコードの拡大」を使ってしまうと、最初に絞り込まれているレコード以外も出てきてしまうという懸念があります。
でも「対象レコードの拡大」は、うまく使えばもしかして・・・とも思っています。

#15 2019-02-05 16:11:12

himanine
Guest

Re: スクリプト上でのノットイコール検索

まっくす wrote:

更に上記の条件で絞り込みたい

逆に見れば、すでにある程度絞り込まれているということなので、スクリプトのLoopで1行ずつ除外していけば簡単(わかりやすい、早い)かもしれない。

#16 2019-02-05 19:11:42

まっくす
Guest

Re: スクリプト上でのノットイコール検索

himanineさん

スクリプトのLoopで1行ずつ除外というのは、
今回で言えば2x2x2で8行の条件をループにして除外していくという意味でしょうか?
それであれば項目数が増えてもそこまで手間がかかりそうにないですね。
ありがとうございます!

#17 2019-02-05 19:18:49

チポ
Member

Re: スクリプト上でのノットイコール検索

> ①Aフィールドが「あ」でも「い」でもない
> ②Bフィールドが「う」でも「え」でもない
> ③Cフィールドが「お」でも「か」でもない
>
> という条件の①~③のどれかに当てはまるレコードのみを抽出したい

これなら、前に書いた通り、
新規検索条件を6個分作り、そこへ除外条件を設定すればいいんですよ。

Offline

#18 2019-02-05 20:54:37

wader
Member

Re: スクリプト上でのノットイコール検索

1行ずつ除外

検索をしないで条件式で除外するという意味ですよ。大体こんな感じ。
Loop
If[条件]
   レコードを除外
End If
  次のレコード
End Loop
IFの条件なら好きなように<>とかorとか書けますので。

Offline

#19 2019-02-05 21:10:55

まっくす
Guest

Re: スクリプト上でのノットイコール検索

チポさん

こういうことでしょうか?

検索モードに切り替え [一時停止:オフ]
フィールド設定[Aフィールド ; "=あ"]
レコードを対象外に
新規レコード/検索条件
フィールド設定[Aフィールド ; "=い"]
レコードを対象外に
新規レコード/検索条件
フィールド設定[Bフィールド ; "=う"]
レコードを対象外に
新規レコード/検索条件
フィールド設定[Bフィールド ; "=え"]
レコードを対象外に
新規レコード/検索条件
フィールド設定[Cフィールド ; "=お"]
レコードを対象外に
新規レコード/検索条件
フィールド設定[Cフィールド ; "=か"]
レコードを対象外に
対象レコードの絞り込み []

私の思い違いであれば申し訳ないのですが、新規検索条件を6個分作り、そこへ除外条件を設定すると

①~③の 「どれか」 に当てはまる  ものではなく
①~③の 「すべて」 に当てはまる  ものが抽出されるのではないかと考えています。
通常、「新規レコード/検索条件」で次のフィールド内容を指定すると or 検索になるのですが
この除外設定をした場合のみ、経験から and 検索になると思っています。
私の思い違いでしょうか?

#20 2019-02-05 21:14:20

まっくす
Guest

Re: スクリプト上でのノットイコール検索

waderさん

1レコードずつ判定、なるほど!
そういう方法もあるんですね。
確かにそれなら柔軟に対応できそうです。
ありがとうございます。

#21 2019-02-05 21:55:45

まっくす
Guest

Re: スクリプト上でのノットイコール検索

チポさん

書いておいてなんですが、①~③の 「すべて」 に当てはまる  という表現が正しくない気がしてきました
言葉で説明が難しいため写真で説明を・・・
https://screenshot.net/jp/23xxkck

ちなみに先程書いた
> こういうことでしょうか?
のコードで書くと、この画像でいう4~9が抽出されてしまいます。

#22 2019-02-06 08:59:15

チポ
Member

Re: スクリプト上でのノットイコール検索

こういうことですよね

  「あ」または「い」
   かつ
  「う」または「え」
   かつ
   「お」または「か」
のレコードを除外検索

ならば、
Mozさんの#12の方法でいいのでは。
対象が絞られた状態から始めるのなら、
検索前にフラグをたてておいて、
最後にそのフラグで絞込みをすればいいでしょう。

Offline

#23 2019-02-06 09:32:32

Shin
Member

Re: スクリプト上でのノットイコール検索

himanineさんの#10 に戻ったような

抽出した状態から、 A:「あ」または「い」 と B:「う」または「え」 と C:「お」または「か」の組み合わせの8条件を除外すればいいのでしょう。

Offline

#24 2019-02-06 09:40:30

Moz
Member

Re: スクリプト上でのノットイコール検索

チポさんありがとうございます。
#12 をまとめただけです(汗
※IF文の 0 / 1 で最初の検索を 全体からの検索/検索結果からの絞り込み に切り替えられます。

# 「Aフィールド」が "あ" または "い" ではないレコードを検索または絞り込み
検索モードに切り替え [ 一時停止: オフ ] 
フィールド設定 [ テーブル::Aフィールド ; "あ" ] 
レコードを対象外に
新規レコード/検索条件
フィールド設定 [ テーブル::Aフィールド ; "い" ] 
レコードを対象外に
# 検索結果から絞り込む場合は IF を 0 にする
If [ 1 ] 
	検索実行 [] 
Else
	対象レコードの絞り込み [] 
End If
# 
# 検索結果から「Bフィールド」が "う" または "え" ではないレコードを絞り込み
検索モードに切り替え [ 一時停止: オフ ] 
フィールド設定 [ テーブル::Bフィールド ; "う" ] 
レコードを対象外に
新規レコード/検索条件
フィールド設定 [ テーブル::Bフィールド ; "え" ] 
レコードを対象外に
対象レコードの絞り込み [] 
# 
# 検索結果から「Cフィールド」が "お" または "か" ではないレコードを絞り込み
検索モードに切り替え [ 一時停止: オフ ] 
フィールド設定 [ テーブル::Cフィールド ; "お" ] 
レコードを対象外に
新規レコード/検索条件
フィールド設定 [ テーブル::Cフィールド ; "か" ] 
レコードを対象外に
対象レコードの絞り込み [] 

Last edited by Moz (2019-02-06 09:42:04)

Offline

#25 2019-02-06 10:10:48

wader
Member

Re: スクリプト上でのノットイコール検索

Mozさん、順番に絞り込んでいくのであれば、条件を変換しないとだめでしょう。
#13で明示されてますが、
Aが「あ」でも「い」でもない
に対してBとCのor条件があるわけですから、
Aで検索したレコードは無条件で結果に含めないといけない(BとCの検索は絞り込まれる前の最初の対象レコードに対して実行しないといけない)ので。

他の方法としては、#9のHiroさんのと類似ですが
ExecuteSQL()で該当するレコードのIDをリスト化して、それをもとに検索(関連レコードへ移動)するとか... 絞り込む場合は現在の対象レコードのIDリストでFilterValuesする必要があります。
複雑な条件だと遅いかな。UNIONを使うとそれぞれの条件は複雑ではないか。

Last edited by wader (2019-02-06 10:12:44)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 624.73 KiB (Peak: 657.63 KiB) ]