Volkerは、マージフィールドの日付の比較に問題があります。彼のデータベースにはBirthdateフィールドが含まれています。このフィールドには、(明らかに)データベース内の各人の誕生日が含まれています。彼は各レコードをマージするときに、[Birthdate]フィールドを参照日と比較し、その結果に基づいて何らかのアクションを実行したいと考えています。彼が使用しようとしているロジックは次のようになります:

{IF {MERGEFIELD Birthdate} > "02/26/1981" "Under 30" "Over 30"}

問題は、比較が正しく機能しないことです。一貫した結果は返されません。考えられる解決策の1つは、次のように、マージフィールドでフォーマットスイッチを使用することです。

{IF {MERGEFIELD Birthdate\@"MM/DD/YYYY"} > "02/26/1981" "Under 30" "Over 30"}

これにより、受信情報が同等の形式になります。ただし、このアプローチから得られる結果は、Wordとは関係なく、データソースの特性に依存する場合があります。次のように、日付を年初の形式にすることもできます。

{IF {MERGEFIELD Birthdate\@"YYYY/MM/DD"} > "2011/02/26" "Under 30" "Over 30"}

それでも比較で一貫性のない結果が得られる場合、唯一の解決策は、実際の数値比較を行うために、日付(実際には生年月日と参照日の両方)で数学的な変換を行うことです。これを行うには、日付をジュリアン値に変換します。これには、次のような非常に複雑なマージフィールドが必要です。

{IF {QUOTE {SET a{=INT((14-{MERGEFIELD BIRTHDATE \@ M})/12)}} {SET b{={MERGEFIELD BIRTHDATE \@ yyyy}+4800-a}} {SET c{={MERGEFIELD BIRTHDATE \@ M}+12a-3}} {SET d{MERGEFIELD BIRTHDATE \@ d}} {SET jd{=d+INT((153c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}} {jd \#,0}} > 2,443,056 "over 30" "under30"}

このようなアプローチは威圧的に見えるかもしれませんが、場合によっては必要な強引な方法にすぎません。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(356)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ:

link:/ wordribbon-Proper_Comparisons_for_Dates_in_Merge_Fields [マージフィールドの日付の適切な比較]