みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
お世話になります。
Excelから日付入りのデータをインポートしたところ、
日付部分が正常に変換されませんでした。
文字化けといっていいかわかりませんが、
すべての日付が「0000年00月00日」となっています。
その部分をクリックすると5桁の数字に変わります。
たとえば、
2015年5月27日
をインポートすると、
0000年00月00日
と見え、そこをクリックすると、
42151
となります。
ほかの日付も「0000年00月00日」となっていて、
クリックすると、別の5桁の数字になります。
上の例では、Excel側は「2015/5/27」と入力さていて、
見た目は「2015年5月27日」となっています。
ファイルメーカー側のフィールドは日付タイプです。
元のExcelに戻ってやり直せば何か方法があるかもしれませんが、
実は、ファイルメーカーで様々な入力作業をしてしまい、
もう元には戻れません。
すでにインポートしたデータをもとに、
日付を正常にすることは可能でしょうか?
修正方法をご存じでしたらご教示くださいませ。
よろしくお願い申し上げます。
Offline
計算フィールドを追加し、式を
Date ( 1 ; -1 ; 1900 ) + インポートした日付のフィールド
としてみてください。
Offline
おそらく、Excelの起算年(1900年)とFMの起算年(0001年)との違いから来るものと思われます。
Excelよりの「42151」は 1900/1/1 からの経過日数を表すので、
FMとの差異分 0001/1/1~1899/12/31 までの経過日数を補足したものを、
日付書式変換すれば良いでしょう。
既存レコードを下記計算値で「フィールド内容の全置換」書換補正が簡便です。
GetAsDate(日付フィールド + Date(12;31;1899)*1 -1)
Offline
mic様
ご回答くださり、ありがとうございました。
さっそく「放送日new1」という計算フィールドを追加し、
計算式「 Date ( 1 ; -1 ; 1900 ) + 放送日」を入力したところ、
すべてのレコードが「1899/12/30」になりました。
(元の日付のあるフィールドは「放送日」です)
「データベースの管理」のところを見ると、
タイプは「計算」
オプション/コメントは「= Date ( 1 ; -1 ; 1900 ) + 放送日」
となっています。
念のため、再度フィールドを追加してみましたが、結果は同じでした。
私の理解が不十分なため、このような結果になったのだと思います。
どういたらよいか、再度ご教示いただければ幸いです。
よろしくお願い申し上げます。
Offline
Hiro様
ご回答くださり、ありがとうございました。
さっそく「放送日new2」という日付フィールドを追加し、
「フィールド内容の全置換」で「GetAsDate(放送日 + Date(12;31;1899)*1 -1)」
を入力したところ、
すべてのレコードが「1899/12/30」になりました。
(元の日付のあるフィールドは「放送日」です)
「データベースの管理」のところを見ると、
タイプは「日付」
オプション/コメントは空欄
となっています。
見た目には上記のmic様と同様の結果でした。
念のため、再度フィールドを追加してみましたが、結果は同じでした。
私の理解が不十分なため、このような結果になったのだと思います。
どういたらよいか、再度ご教示いただければ幸いです。
よろしくお願い申し上げます。
Offline
放送日を明示的に数値化した式
GetAsDate(放送日*1 + Date(12;31;1899)*1 - 1)
で試してみてください。
Last edited by Hiro (2017-09-04 12:31:40)
Offline
Hiro様
再度ご回答いただき、ありがとうございました。
やってみましたが、
前回と同様に、すべてのレコードが「1899/12/30」になりました。
フィールドの名前には、
入れてはいけない文字(スペースなど)があるようでした。
確認してみましたが、特に問題はありませんでした。
元のフィールド「放送日」の見え方は、すべて「0000年00月00日」ですが、
クリックすると「42151」などの数字にかわります。
(おそらく正しい日付に応じた数字なのでしょう)
何か関係があるかもしれませんが、私にはわかりません。
ちょっとお手上げの状態です。
Offline
バックアップをしっかり行って、
放送日を
self + Date(12;30;1899)
で全置換してみるといいでしょうね。
重箱の隅をほじくる話ですが、
本来はDate(12;31;1899)をたすべきなのですが、なぜ、それではなく、Date(12;30;1899)をたすかというと、
Excel には、1900年の閏日の処理が間違っている、という重要なバグがわざと放置されていています。オプションで 1904年から計算する、という通し数字が2通りあるのは、そのためです。昔は、こちらがデフォルトだったような。(子の計算ですとバグはありません)
> Excelよりの「42151」は 1900/1/1 からの経過日数を表すので、
はそのバグのために1900/2/28以前では正しいのですが、それ以降では不正確です。正確には、
「Excelよりの「42151」は 1899/12/31 からの経過日数を表す」
Last edited by Shin (2017-09-04 13:20:03)
Offline
Shin様
ご回答くださり、ありがとうございました。
バックアップを取ってやってみたところ、
「この式では、この関数を使用できません。」
というメッセージが表示され、置換できませんでした。
「放送日」フィールを選択して(1つのレコードに挿入点を入れて)、
「フィールド内容の全置換」を選択し、
「計算結果で置き換える」で計算式を入れてみました。
このフィールドは日付タイプです。
このようにしたのですが、
メッセージが出てしまいました。
原因がおわかりでしたらご教示くださいませ。
よろしくお願い申し上げます。
Offline
別途中間作業用フィールドを作って、
そこに「放送日」フィールのインポート数値を
確実に表示させることを試みてください。
Last edited by Hiro (2017-09-04 14:02:16)
Offline
Hiro様
ありがとうございます。
「放送日」フィールドの内容をコピーする方法を調べていたのですが、
Excelでフィールドをコピーするように簡単にはできないようでした。
「管理」→「データベース」から「放送日」フィールドを複製したら、
データの内容は複製されず、フィールド名しか複製させませんでした。
追加したフィールドのオプションでいろいろやってみたのですが、
コピーされたりはしませんでした。
初歩的すぎることを質問するのもどうかと思い調べてみたのですが、
どうしてもわかりませんでした。
過去の質問にも、こんな初歩的なものはないようでした。
申しわけありません。
お恥ずかしい限りですが、ご教示願えいますでしょうか。
Offline
元のExcelデータのセルの書式設定を「日付」にしないと、
インポート時にトンチンカンな数字になった気がします。
Last edited by bottu3 (2017-09-04 17:17:25)
Offline
bottu3様
ご回答いただき、ありがとうございました。
Excelファイルを調べたところ、
フィールドの設定は「ユーザー設定」で「yyyy"年"m"月"d"日"」となっていました。
事前に「日付」にしておくべきだったのですね。
取引先から送られてきたファイルで知らなかったのですが、
「yyyy"年"m"月"d"日"」と同じものは「日付」にあるので、
選べばよかったですね。
ただ、もはやExcelまで戻ることができないので、
正しく表示できないなら手動で一つずつ修正します。
間違えるのがこわいので一括でできるのが望ましいですが。
もしかしたらファイルメーカーからエクスポートして、
Excelで一括修正し、
再びファイルメーカにインポートする方法があるかもしれません。
あとで試してみようと思います。
Offline
フィールド内容の一括コピーをしたい場合、コピー先のフィールドを作成後にレイアウトにそのフィールドを追加。
そのあとブラウズモードで表示してコピー先のフィールドを選択し、メニューの
「レコード」>「フィールド内容の全置換」>「計算結果で置き換える」>「指定」ボタン
で、コピー元のフィールドを指定し、「置換」ボタンを押せば対象レコードの全てを一括で処理できます。
あと計算式が正常に動作していないのは、おそらく「放送日」のフィールドに数値が入力されているのに、データタイプが日付のままになっているせいではないでしょうか。
これを数字に変更すれば計算式が機能するような気がします。
Offline
全置換では self はダメでした。
放送日 + Date(12;30;1899)
ではどうでしょう。
Offline
> 2015年5月27日
> をインポートすると、
> 0000年00月00日
> と見え、そこをクリックすると、
> 42151
> となります。
これが理解出来ません。
日付フィールドに数値を入れれば日付を返しますよね(もちろん手打ちではダメですが)
0000年00月00日
どうしたらこのような日付ができるのでしょうか?
Offline
mic様
ご回答くださり、ありがとうございました。
「放送日」フィールドの内容を別のフィールドに一括コピーできました。
こういう方法があったとは考えもしませんでした。
ありがとうございました。
>あと計算式が正常に動作していないのは、おそらく「放送日」のフィールドに数値が入力されているのに、
>データタイプが日付のままになっているせいではないでしょうか。
>これを数字に変更すれば計算式が機能するような気がします。
はい、そんな気がしてきました。
試しにフィールドタイプを「日付」から「数字」にしてみたところ、
「42151」などの数字があらわれました。
「数字」にすると、見えていなかった数字があらわれるようです。
ふたたび「日付」に戻したところ、
見た目は「0000年00月00日」になりました。
クリックすると「42151」などの数字が見えます。
Offline
Shin様
ご回答いただき、ありがとうございました。
「放送日 + Date(12;30;1899)」で全置換したところ、
見た目は「0000年00月00日」のままですが、
クリックすると「693594」という数字になりました。
どのレコードも同じです。
「42151」のときは、レコードによって違いがありましたが、
今回はすべて同じでした。
Offline
チポ様
ご回答くださり、ありがとうございます。
なぜそうなるのかはわかりませんが、
mic様のご回答にあるように、
フィールドに数値が入力されているのにデータのタイプが日付だからかもしれません。
試しに、Excelで以下のようなファイルをつくって、
ファイルメーカーの新しいファイルにインポートしてみました。
-----
「番号」フィールド(標準形式)
1
2
「日付A」フィールド(日付形式)
2017年3月15日
2015年7月20日
「日付B」フィールド(ユーザー設定「yyyy"年"m"月"d"日"」)
2017年3月15日
2015年7月20日
-----
ファイルメーカー側は「番号」は数字タイプ、
「日付A」と「日付B」は日付タイプです。
「番号」と「日付A」は正常に表示されましたが、
「日付B」には「42809」と「42205」が表されました。
(これはExcelとファイルメーカーの日付の差分でしょうか)
残念ながら「0000年00月00日」という表示はされず、
再現できませんでした。
Excelの情報をファイルメーカーが正しく認識したからでしょうか……。
もしかしたら、いろいろやってみると再現できるかもしれません。
Offline
なんか変ですね。
GetAsDate ( 放送日 + Date(12;30;1899) )
で全置換するといかがでしょう。
これで同じならば、フィールドの定義が間違っている?
Offline
日付フィールドで
> 0000年00月00日
この表示をするのは不可能では?
例えば、
二つのフィールドが重なっているとか、、、
とんでもない可能性も考えた方がよろしいかと。。
Offline
> 0000年00月00日
上記の再現方法:
フィールド タイプ:日付|表示書式:2014年12月25日
手動では、「42809」は入力出来ない。
エクセルからのインポートの場合「42809」の入力が可能。
上記のようにすると「フィールド タイプ:日付」に数値「42809」が保存され、0000年00月00日 このような表示になります。
Excelファイル(Book1.xlsx)内のxmlデータを確認した所、日付は、42809 このような数値で管理しているようです。
以下の様な場合、FileMakerでインポートすると
「日付A」は、日付と認識され日付でインポートされる。
「日付B」は、数値と判断され数値でインポートされる。
のようです。
>「日付A」フィールド(日付形式)
>「日付B」フィールド(ユーザー設定「yyyy"年"m"月"d"日"」)
変換の式は、
GetAsDate ( Date(1;1;1900) + GetAsNumber ( GetAsText ( フィールド:放送日 ) )-2)
こんな感じで大丈夫です。
「-1」で良いはずなのに「-2」にしないとイケないので、調べてみたら、Excelは、1900年をうるう年としているようです。バグかな?....。
Last edited by qb_dp (2017-09-05 14:22:17)
Offline
数値の入力されている日付フィールドで、インスペクタの「データの書式設定」「書式」部分で「2014年12月25日」の形式を設定してあると、
> 0000年00月00日
通常はこの表示でアクティブ時に数値が表示されるようになるみたいですね。
Offline
> Date(1;1;1900) + GetAsNumber ( GetAsText ( フィールド:放送日 ) )-2
と云うことは、GetAsText(放送日) テキスト化変換の前処理がミソだったのかな?
Offline
今回のは、フィールド タイプ:日付 に 数値 が入っているという、かなりイレギュラーな事案ですね。
Date(1;1;1900) + フィールド:放送日 |そのままだとどんな計算になっているのか不明
GetAsNumber(フィールド:放送日 )|GetAsNumberは、「0」になる
GetAsNumber ( GetAsText ( フィールド:放送日 ) )|左記でOKな感じでした。
Offline
[ Generated in 0.045 seconds, 9 queries executed - Memory usage: 583.36 KiB (Peak: 619.9 KiB) ]