プロが教えるわが家の防犯対策術!

Wordフィールドの挿入を使って、下記のような表示をしたいのですが、
可能でしょうか?

送付状の宛先が、顧客コード001、002、003、004の4社のいずれかの場合は、
「納品書」と表示し、この4社以外が宛先の場合は、「請求書」と表示する。

顧客コード001の1社だけなら、
{IF{MERGEFIELD 顧客コード}=001"納品書""請求書"}
としたら表示できましたが、複数の顧客になると上手くいきません。

どうぞ、宜しくお願いします。

A 回答 (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 "納品書""請求書"}

もっとスマートな方法があるかもしれませんが、私が知っている
フィールドコードでの対応方法だと、これが限界です。
    • good
    • 0
この回答へのお礼

式が複雑になってしまうことがわかり、とても助かりました!
後々、頻繁に修正があることがわかっているので、例1のような
時だけ使わせていただくことにしました。
ありがとうございました。

お礼日時:2011/08/14 00:29

エクセルのシート側で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)),"請求書","納品書")
    • good
    • 0
この回答へのお礼

基となるデータは、専用ソフトを使ったもので、触ることが一切できないのです。
せっかく教えていただいたのに、残念です。
次回、Excelを使う時に、参考にさせていただきます。
ありがとうございました。

お礼日時:2011/08/14 00:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています