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

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

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

You are not logged in.

Announcement

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


#1 2020-12-10 16:31:21

抜刀才
Guest

年数の計算

フィールドA、B、C、Dと4つあります。すべて日付が入力できるようになっております。
フィールドAには必ず日付が入力されています。
フィールドBに日付がある場合はAより後の日付でCにも日付が入力されています。
その場合はBより後の日付です。
フィールドDに日付が入力されている場合はABC全部に日付が入力されていて
日付は 過去 A → B → C → D 未来
の順になっております。

フィールドEに年数を自動計算で入れたいのですが計算式を教えてください。
BCDが未入力の場合は、Aから現在まで
ABCが入力されている場合はAからBまでの年数プラスCから現在までの年数
ABCDが入力されている場合はAからBまでの年数プラスCからDまでの年数

仮にAからBが3年11か月、CからDが2年2か月の場合はEには6年としたいです。

よろしくお願いします。

#2 2020-12-10 17:24:42

チポ
Member

Re: 年数の計算

AとBのみに入力の場合は?

また、
> 仮にAからBが3年11か月、CからDが2年2か月の場合はEには6年
二つの期間の和 - ひと月
ということ?

「日」の大小はどう考えます?

Offline

#3 2020-12-10 18:20:37

抜刀才
Guest

Re: 年数の計算

>AとBのみに入力の場合は?

その場合はAからBの期間でお願いします。

>二つの期間の和 - ひと月
>ということ?
>「日」の大小はどう考えます?
日はすべて切り捨てでお願いしたいです。

よろしくお願いいたします。

#4 2020-12-10 23:30:45

Shin
Member

Re: 年数の計算

Let (
[
    YMa = Year ( A ) * 12 + Month ( A ) ;
    bb = Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) ;
    YMb = Year ( bb ) * 12 + Month ( bb ) ;
    YMc = Year ( C ) * 12 + Month ( C ) ;
    dd = Case ( IsEmpty ( C ) ; "" ; IsEmpty ( D ) ; Get ( 日付 ) ; D ) ;
    YMd = Year ( dd ) * 12 + Month ( dd ) ;
    du = YMb - YMa + YMd - YMc
] ;
    Div ( du ; 12 ) & "年" & Mod ( du ; 12 ) & "月"
)
月数の数え方で小さな修正が必要になるかも。

Last edited by Shin (2020-12-11 08:52:05)

Offline

#5 2020-12-11 08:57:38

抜刀才
Guest

Re: 年数の計算

ご回答ありがとうございます。
ちなみに今ファイルメーカー Pro 5.0 でやっているのですが
古すぎてうまくいきません。
よろしくお願いします。

#6 2020-12-11 09:19:04

チポ
Member

Re: 年数の計算

考え方は
  Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case  ( IsEmpty ( D ) ; Get ( 日付 ) ; D ) - C ; 0 )
これでいいでしょう。

実際には、A,B,C.Dはそのままの日付ではなく、
年 * 12 + 月
とした方がいいでしょう。

こうして得られる値は期間の月数です。
ひと月の補正が必要なら、-1を加えます。


FM5!!
20年以上前でしょうね。。
OSとのマッチングは大丈夫でしょうか?

Offline

#7 2020-12-11 10:15:38

抜刀才
Guest

Re: 年数の計算

最初のGet (でエラーがでてしまいます。

>実際には、A,B,C.Dはそのままの日付ではなく、
>年 * 12 + 月
>とした方がいいでしょう。

どういう意味でしょうか?
無知ですいません。

FM5はwin10でも問題なく使えています。
そこまで知識がないのでFM5で困っていないのが現状です。

#8 2020-12-11 10:29:01

チポ
Member

Re: 年数の計算

ああ、、、

Get ( 日付 )
に変えて
Today

Status ( 日付 )
のどちらかが使えるはずです。
・・記憶が定かではない・・



> 年 * 12 + 月
フィールドAを例にすると
  Year ( A ) * 12 + Month ( A )
とします。
これは月ごとに1ずつ増えるシリアル値になり、
年をまたいでも連続します。


Win10でか、、
あまり信用しない方がいいと思いますよ。。

Offline

#9 2020-12-11 11:17:16

抜刀才
Guest

Re: 年数の計算

Case ( IsEmpty ( B ) ; Today ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case  ( IsEmpty ( D ) ; Today ; D ) - C ; 0 )
Case ( IsEmpty ( B ) ; Status ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case  ( IsEmpty ( D ) ; Status ( 日付 ) ; D ) - C ; 0 )

これではやはりエラーになってしまいます。
上の式ですと   Today ; B
下の式ですと   Status (
でエラーになります。

> 年 * 12 + 月
>フィールドAを例にすると
>Year ( A ) * 12 + Month ( A )

フィールドA,B,C,Dは日付をいれているので
そこからそれぞれ計算のフィールドを作成した方がよろしいでしょうか?

よろしくお願いいたします。

#10 2020-12-11 11:43:47

チポ
Member

Re: 年数の計算

ああ、まだ間違っていました。。。

> Case ( IsEmpty ( B ) ; Today ; B ) - A
                                  ↑
               このセミコロンを全て「,」カンマに変えてください

6か8で変わったんだたかな・・


日付からの変換はフィールドにしてもいいですし、
式の中で計算してもいいです。
やりやすい方でお試しください。

Offline

#11 2020-12-11 15:24:07

抜刀才
Guest

Re: 年数の計算

なかなかうまくいきません。
やはり古いのが原因なんですかね?

Case ( IsEmpty ( B ) , Today , B ) - A + ( Case ( not IsEmpty ( C ) , Case  ( IsEmpty ( D ) , Today , D ) - C , 0 )
ですと)が足りないみたいです。

またフィールドAが2020/08/01で
Year ( A ) * 12 + Month ( A )
の計算をすると
24248
でいいんでしょうか?

#12 2020-12-11 15:48:48

チポ
Member

Re: 年数の計算

ごめんなさい、最後が足りていませんでした。
  Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case  ( IsEmpty ( D ) ; Get ( 日付 ) ; D ) - C ; 0 ) )


2020/08/01は
  2020 * 12 + 8 = 24248
で合っていますね。

ちょっと見た目では意味が分からない数字ですが、
これで連続した値になり計算には都合がいいんです。

Offline

#13 2020-12-11 16:32:22

抜刀才
Guest

Re: 年数の計算

フィールドA、B、C、DをそれぞれフィールドAA、BB、CC、DDに変更し
それぞれをYear ( AA ) * 12 + Month ( AA )
にてフィールドA、B、C、Dを作成しました。
そこで

Case( IsEmpty( B ) , Today, B ) - A + ( Case( not IsEmpty( C ) , Case( IsEmpty( D ) , Today, D ) - C , 0 ))
をしたところ
フィールドAAに2019/8/1と入力したところ
結果が713534とでてしまいます。
1年もしくは1と出てほしいのですがどこが間違えていますか?

#14 2020-12-11 16:34:49

チポ
Member

Re: 年数の計算

Today
も他と同様に年月に変えないとダメでしょう。

Offline

#15 2020-12-11 17:13:18

抜刀才
Guest

Re: 年数の計算

>Today
>も他と同様に年月に変えないとダメでしょう。

どのようにしたらいいのですか?

#16 2020-12-11 17:28:32

チポ
Member

Re: 年数の計算

前と全く同じ考えでいいんですよ
  Year ( Today ) * 12 + Month ( Today )

Offline

#17 2020-12-11 17:53:38

抜刀才
Guest

Re: 年数の計算

Case( IsEmpty( Year ( B ) * 12 + Month ( B ) ) , Year ( Today ) * 12 + Month ( Today ), Year ( B ) * 12 + Month ( B ) ) - Year ( A ) * 12 + Month ( A ) + ( Case( not IsEmpty( Year ( C ) * 12 + Month ( C ) ) , Case( IsEmpty( Year ( D ) * 12 + Month ( D ) ) , Year ( Today ) * 12 + Month ( Today ), Year ( D ) * 12 + Month ( D ) ) - Year ( C ) * 12 + Month ( C ) , 0 ))

全部を1つにまとめるとこれであっていますか?

#18 2020-12-14 08:56:11

チポ
Member

Re: 年数の計算

> Case( IsEmpty( Year ( B ) * 12 + Month ( B ) )・・・
この条件式は単に
  IsEmpty ( B )
でいいでしょう。
以下同様です。

後はいい様ですね。。

Offline

#19 2020-12-14 09:08:54

himadanee
Guest

Re: 年数の計算

式の途中で適当に改行して、わかりやすく書く習慣にしましょう。
ファイルが開きっぱなしの場合(サーバで共有しているとか)、Todayの計算は日付が変わっても更新されないので要注意。

#20 2020-12-14 09:30:30

チポ
Member

Re: 年数の計算

Today関数はファイルが開かれるたびに評価されます。
Status ( 日付 )関数は、索引非保存にすれば毎日評価されます。

古い話しですが確かこれでいいかと。。

Offline

#21 2020-12-14 13:51:30

Shin
Member

Re: 年数の計算

FM5.5 のマニュアルを確認しましたが、Case() は並べてかけますので、入れ子にしなくても大丈夫ですよ。
Case(
    IsEmpty( B ) , Year ( Status( 日付 ) ) * 12 + Month ( Status( 日付 ) ),
    Year ( B ) * 12 + Month ( B )
)
  - Year ( A ) * 12 + Month ( A )
+ (
Case(
    IsEmpty( C ) , Year ( C ) * 12 + Month ( C ) ;
    IsEmpty( D ) , Year ( Status( 日付 ) ) * 12 + Month ( Status( 日付 ) ),
    Year ( D ) * 12 + Month ( D )
)
- Year ( C ) * 12 + Month ( C )
でいいでしょう。

FM5 が Win10 で動くんですね。標準の機能を標準的に使っている優等生のプログラムということでしょうね。MacOS は、OS 側が機能を変化させてしまっているので、4世代前のバージョンは動きが怪しいです。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 557.18 KiB (Peak: 577.72 KiB) ]