dポイントプレゼントキャンペーン実施中!

皆様、どうかお知恵をお貸しください。

現在、wordで以下のような文章を作ろうとしています。

(1)果物
 1)林檎:~~
 2)梨:~~
 3)梨:~~
 4)蜜柑:~~
 5)蜜柑:~~

(2)肉
 1)豚:~~
 2)豚:~~
 3)牛:~~

ここで、「梨を表示しない」という条件が与えられた際に

(1)果物
 1)林檎:~~
 2)蜜柑:~~
 3)蜜柑:~~

(2)肉(以下略)

 のように、梨の項目を自動的に消して、上に詰めたいのです。できれば、「梨を表示する」となった時に元に戻したいです。
 エクセルで言えば「行の非表示」が一番近いでしょうか。
 フィールドコードも考えてみましたが、消す部分が複数の行に跨る為、作成も修正も非常に困難になり、できればしたくないと考えています。


VBAまで含め、このような挙動が可能とするにはどうすればいいのか、ご教示願います。

A 回答 (3件)

No.2の回答者です。



> { if 1 = 1 "{ LISTNUM NumberDefault \l 1 }" "×"}
> if文の中のlistnum文に対して、空白行が返されている
IF文の中に"{ LISTNUM NumberDefault \l 1 }"とだけ記載すると
LISTNUMフィールドが有効に働かないようです。

{ if 1 = 1 "{ LISTNUM NumberDefault \l 1 }○" "×"}
にしても駄目なので、仕様として覚えるしかないようです。

有効な例:(←┘は段落記号)

{ if 1 = 1 "←┘
{ LISTNUM NumberDefault \l 1 }○" "×"}

または

{ if 1 = 1 "□{ LISTNUM NumberDefault \l 1 }○" "×"}

最初の例は条件が一致したら改行して「1)○」が表示されます。
次の例は同じ段落内に□1)○が表示されます。

このことから、以下のように作成して検証してみてね。

{ LISTNUM NumberDefault \l 1 } ←┘
{ LISTNUM NumberDefault \l 1 }{ if 1 = 1 "←┘
{ LISTNUM NumberDefault \l 1 }○" "×"}←┘
{ LISTNUM NumberDefault \l 1 } ←┘

ちなみに、補足される場合は早めにしてくださいね。
質問日から補足されるまで2週間近くたった場合、メール受付を
補足などにしていないと気が付かないこともあるので。
私の場合は、古い質問になると補足のメールを受け付ける設定を
解除することもありますので。
「wordで、条件によって文章を非表示にし」の回答画像3
    • good
    • 0
この回答へのお礼

ありがとうございます!
{LISTNUM}の前に文字列を置いたり、改行すれば、LISTNUMがきちんと動きました。

時間が空いてしまった補足にも素早く回答して頂き、本当にありがとうございました。

お礼日時:2013/06/25 11:36

アウトライン番号があるのですよね。


非表示にしたい段落を消したときに、番号は繰り上がるのですね。
そのような設定を、単純な方法では対応できないと思います。

似たような質問があったので参考になりませんか?
http://oshiete.goo.ne.jp/qa/8082546.html
複数行に跨るとしても、フィールドコード内での改行をすることも
可能なので、作成方法を理解していれば難しくありません。
「林檎:~~」の一番最後へとIF文を設定して、林檎から梨までの
範囲にListNumフィールドで連番させます。
その他のアウトライン番号は通常の設定で対応できます。
修正はフィールドコードを表示しておき、「梨:」の後ろ部分などを
書き換えるだけで済みますね。

Excelでの[行の非表示]を使っても、連番の繰上りとかできるのか
疑問がありますが、似たようなことはWordだと隠し文字でも対応
できると思いますが、連番の繰上りができないので、過去の質問で
示した方法しかないと思っています。

マクロで対応するにしても、【梨の項目】をマクロにテキストとして
保存しておいて、特定の位置に挿入したり削除したりすることでの
対応になると思います。そのテキストへと段落番号がつくスタイルを
適用することで挿入による連番の追加や、削除による繰上りに対応し
希望していることに近いことができるかもしれません。
しかし、修正するにしても面倒であることは変わりませんよね。

この回答への補足

申し訳ありません。
自分でも色々調べて、試してみたのですが、LISTNUMフィールドコードが上手く働きません。


{ LISTNUM NumberDefault \l 1 }
{ LISTNUM NumberDefault \l 1 }
{ if 1 = 1 "{ LISTNUM NumberDefault \l 1 }" "×"}
{ LISTNUM NumberDefault \l 1 }

以上のようにフィールドコードを記述すると
1)
2)

3)
という表示になってしまいます。
if文の中のlistnum文に対して、空白行が返されているようなのです。

どこが問題なのでしょうか? どのように修正すれば、1)~4)の連番が表示されるようになるのでしょうか?

補足日時:2013/06/25 08:17
    • good
    • 0
この回答へのお礼

回答、及び過去回答の紹介、ありがとうございます。

>連番の繰り上がり
確かに、[隠し文字]プロパティではこれは実現できませんでした。

フィールドコードのif文だけだと、作成も修正も困難になるかな、と思っていたのですが、マクロで該当の文字列の場所を検索・特定する手間を考えれば、こちらの方が簡単かも知れません。

フィールドコード内での改行やListNumフィールドというテクニックは知らなかったのですが、かなり使えそうです。色々と試してみます。
ありがとうございました。

お礼日時:2013/06/15 19:24

Wordの文章のままでやるとちょっと面倒です。


⇒Wordの表を使うと
VBAで表の中の「セル」の言葉の検索と
その表の行間設定と行の高さの設定で済みます。
あとはそれを元に戻せるようにするだけです。

Excelはご希望ではないようですが
一般機能のフィルターだけで済みます。
・フィルターを設定します。
・フィルターの詳細設定、またはフィルターを設定したセルの右の▼のところで出るダイアログで、「テキストフィルター」で「指定の値を含まない」でできます。
  ↓
どうしてもWordということなら
 エクセルでフィルターのボタン?がある近辺をコピー
Wordにワークシート形式でリンク貼り付け
それをダブルクリックするとExcelが起動するので、
セルの右のフィルターのボタン▼をクリックして
上記のようにテキストフィルターをかけます。

 なお、Wordの表やエクセルでは
 1)林檎:~~
 ではなく
 1  林檎  ~~
のようにセルごとに分けておきます。
すでに入力済みの場合には
それらの言葉の範囲をすべて選択して
表を設定します。
 エクセルのセルに分けるには、データ ⇒ 「区切り位置」で分けておきます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

エクセルファイルを埋め込む方法は、条件を変更するのが大変だったり、埋め込んだ複数のファイル間で条件の共有ができなさそうなので、VBAでの修正を考えてみます。

表の高さを0にする、という方法は思いつきませんでした。
調べてみたら、書式設定の中に「隠し文字」というプロパティがあるようなので、これで何とかできないかな、と思っていますが、表を使った方が対象文字列の特定にはいいかもしれません。

色々と自分でも試してみます。

お礼日時:2013/06/15 19:04

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

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