- ベストアンサー
Wordフィールドの挿入(IF文?)
Wordフィールドの挿入を使って、下記のような表示をしたいのですが、 可能でしょうか? 送付状の宛先が、顧客コード001、002、003、004の4社のいずれかの場合は、 「納品書」と表示し、この4社以外が宛先の場合は、「請求書」と表示する。 顧客コード001の1社だけなら、 {IF{MERGEFIELD 顧客コード}=001"納品書""請求書"} としたら表示できましたが、複数の顧客になると上手くいきません。 どうぞ、宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Excel側で対応したほうが簡単なのですが。 Wordだけで対応したいとすると、かなり面倒になります。 Wordにも簡易な計算用関数が用意されていますが、それを使うと なると、フィールドコードがかなり長くなります。 顧客コードが文字列だと計算の対象にならないので、関数処理を するためには数値に変換する必要があるためです。 今回の場合、2つの条件ならばOR関数を使えますが、3つ以上だと OR関数の組み合わせをするか別方法を使います。 例1:顧客コードの条件が2つの場合 { IF {= OR ({ IF { MERGEFIELD 顧客コード }="001""1""0" },{ IF { MERGEFIELD 顧客コード }="002""1""0" }) } = 1 "納品書""請求書"} この例だとOR関数での計算式の中にIF文を入れて1または0を返す ことで、どちらかが1ならば1を返すことで最初のIF文の条件での TrueとFalseを有効にしています。 例2:顧客コードの条件が4つの場合 OR関数を使う方法もあるのですが、演算子を組み合わせたほうが 分かりやすくなります。 (1={ IF { MERGEFIELD 顧客コード }="001""1""0" }) これ一つでTrueとFalseの条件を返しますので、顧客コードでの 指定文字列が増えても対応できるようになります。 { = ((1={ IF { MERGEFIELD 顧客コード }="001""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="002""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="003""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="004""1""0" }))>0) } この式で条件が合えば1を返すので、有効な数式になります。 納品書にするか請求書にするかの条件を満たすためには、以下の フィールドコードにします。 { IF { = ((1={ IF { MERGEFIELD 顧客コード }="001""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="002""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="003""1""0" })+(1={ IF { MERGEFIELD 顧客コード }="004""1""0" })>0) } = 1 "納品書""請求書"} もっとスマートな方法があるかもしれませんが、私が知っている フィールドコードでの対応方法だと、これが限界です。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルのシート側で1列作業列を作り、そこに納品書と請求書の区別を入れて、差込フィールドでその 作業列を参照するのは出来ませか。基データのシートは触れないのですか。 001 納品書 002 納品書 003 納品書 004 納品書 のような表を作っておいて VLOOKUP関数で =IF(ISNA(VLOOKUP(A1,$G$1:$H$4,2,FALSE)),"請求書","納品書") 4(社)つぐらいなら =IF(ISNA(VLOOKUP(A9,{"001";"002";"003";"004"},1,FALSE)),"請求書","納品書")
お礼
基となるデータは、専用ソフトを使ったもので、触ることが一切できないのです。 せっかく教えていただいたのに、残念です。 次回、Excelを使う時に、参考にさせていただきます。 ありがとうございました。
お礼
式が複雑になってしまうことがわかり、とても助かりました! 後々、頻繁に修正があることがわかっているので、例1のような 時だけ使わせていただくことにしました。 ありがとうございました。