アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

表罫線で区切られているマスの中に、今年の「年の数字」を「和暦」で「全角」で挿入したいのですが、どのようにすべきでしょうか。[挿入]からですと、数字だけということが選べなく、困りました。


例えば、平成19年ならば"19"の数字だけを全角で挿入し、ファイルを開くたびに自動更新するようにしたいのです。
もし、今日が平成19年4月12日だとしたら、その「年」「月」「日」のマスには、
「年」のマスは19
「月」のマスは4
「日」のマスは12
と表示するようにしたいのです。

また、ファイルを使いまわししたいので、もし、自動的に挿入された日付を手入力で修正したくなったとき、上書きで数字を入力しても、その日付を挿入する式は変更されず、次回ファイルを開いたときには、その日の日付の数字が挿入されると助かります。


さらに、できたらなのですが、
同じように別の3つのマスには、今日から3日後の「年」「月」「日」をそれぞれ入れたいのです。

例えば、今日が平成19年12月30日だとしたら、その「年」「月」「日」のマスには、
「年」のマスは20
「月」のマスは1
「日」のマスは2
と表示するようにしたいのです。

こんなことは出来るのでしょうか?


よろしくお願いします。

A 回答 (9件)

ANo.4のenunokokoroです。

補足されていたのですね。
最近は回答数が減ったこともあって、気が付くのが補足だと遅い場合が
あります。
補足内容である程度質問者さんの環境が判りました。

マクロも使用可能のようですが、その場合はWendy02さんが回答したもの
を利用するほうが良いでしょうね。私も勉強になる内容なので。

文書の保護やマクロを使用しないで作成するとなるとフィールドコード
を利用する方法になると思います。
その場合は、↓の本を購入することで可能だと思います。
『Word Hacks ― プロが教える文書活用テクニック』 (2,520円)
http://www.oreilly.co.jp/books/4873112389/

購入することを前提にヒントをしますと、URL先のダウンロード先から
日本語版サンプルファイルを手に入れます。
その中の日付フィールドが入っているWord文書を開きます。
「301~」という部分の後ろのフィールドコードを表示させます。
「301」を変更して、日付の表示部分を全角の表示形式に変更することで
可能になります。
本をご購入すれば具体的な使用内容が書かれていますから、私がここに
載せた内容も理解できると思います。

これを使用したいテンプレートにコピーして、それぞれを配置すること
で使用可能になります。
これ以上詳しいことは書けないので、ご自身で調べて利用して下さい。
紹介したものはフィールドコードを表示すると長いものですが、これを
非表示にすれば3日後の全角で表示ができますから、いろいろ便利だと
思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

作者名から検索してもたどり着けず、どうしようかと思っていました。

教えていただいた本はとても勉強になりそうですので、早速購入します。

お世話になりました。


また、返信が遅れてすみませんでした。

最近、ネットを見ることが出来なかったもので、ご迷惑をおかけしました。

お礼日時:2007/04/24 12:55

こんにちは。



>おそらく、Wendy02様がお考えのような複雑なものではないと思います。

さあ、それは、どうかしらね。

今、オライリーの計算方法をみてみました。フィールドの処理と比較してみたらよいかと思います。もちろん、抜き出して貼り付けることの簡単さから言えば、それは、是非もないことだから、私としては何も言えませんが、フィールドの計算過程を見る限り、さすがに、キリスト教国のことだけはありますね。たぶん、それは伝統的な計算方法だと思います。

その計算方法のアルゴリズムは、たぶん、何とかの公式という名前がついたものかもしれません。昔は、表計算でも、日付の計算ができなくて、それでやむを得ず、似たような関数によるアルゴリズムを使った経験があります。

今でこそ、Excelでは簡単な日付計算も、日付からですと、単純な十進の計算とは違いますから、シリアル値を取れない限りは、なかなか、3日後とか、Weekend を除くというのは、思った以上に複雑だと思います。

それで、今、自信がなかったので、試してみたところ、「日付自動設定用イベント型マクロ」の方法は、書式が使えることが分かりましたので、それは、そのままフィールドで以下のようにすれば解決できます。


{DOCPROPERTY myDate \@ e \* DBCHAR}

{DOCPROPERTY myDate \@ M \* DBCHAR}

{DOCPROPERTY myDate \@ d \* DBCHAR}

{} は、Ctrl + F9 です。
    • good
    • 0
この回答へのお礼

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

私には及びもつかない難しいことだったのですね。

大変参考になりました。

じっくりと研究したいと思います。

ありがとうございました。

お礼日時:2007/04/25 12:54

enunokokoro様へ+質問者さんへ



>Wendy02さんが書かれたフィールドコードのIF文は、質問の
>意味と少し違うのではないでしょうか?

それは承知で書いております。その後に、

#質問者様は、こういうことではないような気がします。もう少し複雑の計算ではないでしょうか?

と、私が書いてありますね。例を出して、こんな風かと、質問者さんに、打診するつもりでったのですが、私が、きちんとした回答を書かない限りは、そのような、ご批判は免れ得ないですね。単なるフィールドの数式への興味で書いてしまったので、思わぬ誤解されてしまったようです。

私は、あくまでも、フィールドだけの解決には、限界があるのではないかと考えています。質問者不在で回答者が続けることは、マナー違反ですが、以下の方法は、おそらくは、さまざまな要求に耐えられるはずだと思っています。いくつかの海外のWordの有名なサイトをみてきて、満足できなかったので、私は独自に考え出しました。

ただ、
>QUOTE { =ある計算式で8桁表示にしたもの \#"####/##/##" } \@ d \* DBCHAR }
>3日後でも10日前でも好きな日付で表示できるようになります。

どのような方法なのか、よく分かりません。8桁というのは、20070411 という数値ではありませんか?シリアル値<->日付値が可能なら、それもできるかと思いますが、何か複雑そうな気がします。日付は、変則的な繰り上がりで、10進の世界ではありませんから、見かけ上の文字列を10進にして計算すると、存在しない日付などが出てきてしまいます。シリアル値 <-> 日付値ということが約束されないとできないように思います。

以下の方法なら、どのような設定でも、プログラム上のVBAやVBさえ分かれば、複雑な計算でも、フィールドで出すことができるはずです。しかし、残念ながら、マクロを載せたままになってしまいます。別にアドイン型でも可能のはずです。

ThisDocument モジュールに以下を貼り付けます。現在は、単純に3日加えるというような仕様になっていますが、土日などを避けることも可能です。一旦、貼り付けて、保存し、再び、Wordを立ち上げます。そうしたら、フィールドを挿入する場所で、InsertCustomField というマクロを実行しますと、フィールドが挿入されます。

なお、ご質問者さんは、マスと書いていますから、それは、コントロールツールやフォームツールのテキストボックスを指すのでしたら、これよりも遥かに簡単にできます。ただ、どちらかというと、コントロールツールのほうが、ロックで拘束されない分だけ使いやすいです。(最後のTextBox3_KeyDown型マクロを参照)


------------------------------------------------------------
Private Sub Document_Open()
'日付自動設定用イベント型マクロ
Dim myDate As Date
Const ADDDATE As Integer = 3 '三日加える
 
 On Error GoTo ErrHandler
 ThisDocument.CustomDocumentProperties("MyDate").Value = _
   Format(Date + ADDDATE, "yyyy/MM/dd")
 ActiveDocument.Fields.Update
 Exit Sub
ErrHandler:
   myDate = Format(Date + ADDDATE, "yyyy/MM/dd")
 With ThisDocument.CustomDocumentProperties
    .Add Name:="MyDate", _
    LinkToContent:=False, _
    Type:=msoPropertyTypeDate, _
    Value:=myDate
 End With
 Resume Next
End Sub


Sub InsertCustomField()
'フィールド挿入マクロ
 Dim oField As Field, MyRange As Range
 Set MyRange = Selection.Range
 Set oField = ActiveDocument.Fields.Add(Range:=MyRange, _
    Type:=wdFieldDocProperty)
   oField.Code.Text = " DOCPROPERTY myDate \* MERGEFORMAT"
   oField.Update
End Sub

======================================
これは別の方法です。テキストボックスは、もう少しイベント型マクロで手を加えないと、使い勝手がよくありません。

テキストボックスが、6つがあり
入力側 :年, 月, 日 ここの3つ目のTextBox3 に設定する場合
表示側 :年, 月, 日



Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim y As String, m As String, d As String
Dim myDate As Date
Const ADDDATE As Integer = 3 '加える日
 If KeyCode = 13 And TextBox3.Text <> "" Then
  If IsNumeric(TextBox1.Text) Then y = TextBox1.Text
  If IsNumeric(TextBox2.Text) Then m = TextBox2.Text
  If IsNumeric(TextBox3.Text) Then d = TextBox3.Text
  If IsDate(y & "/" & m & "/" & d) Then
   myDate = CDate(y & "/" & m & "/" & d)
   Else
   Exit Sub
  End If
  TextBox4.Text = Format$(Year(myDate + ADDDATE), "00")
  TextBox5.Text = Format$(Month(myDate + ADDDATE), "0")
  TextBox6.Text = Format$(Day(myDate + ADDDATE), "0")
 
 End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
ワードのマクロはまったくわからないので、勉強して使います。

本当に細かくありがとうございました。

お礼日時:2007/04/25 13:00

質問者さんへ


Wendy02さんが本について書かれましたので少し補足しますね。
>思い当たる本というと、オライリーのハックシリーズでしょうか?
そのシリーズですね。

本を購入しなくても、フィールドでの計算式が入っているテンプレート
を手に入れることはできますが、それでは著作権がある出版社に悪いと
思い、あえて濁した表現で前の回答ではしました。
ネットで公開しているサンプルのテンプレートなので、そこからコピー
して編集すれば、日付の変更は可能になります。
複雑な計算式ですから、私はそれをサンプルテンプレートから定型句に
登録したものを編集して個人で利用させて頂いています。

ところで、Wendy02さんが書かれたフィールドコードのIF文は、質問の
意味と少し違うのではないでしょうか?
「平成20年1月2日」とは、あくまで今日の日付が「平成19年12月30日」で
3日後の日付として計算させた結果として表示してほしい日付ですよね。
ですから、Wordでフィールドとして認識できる日付の形式である数値を
計算式で導き出して、例えば8桁の数字を「####/##/##」のようにしてから
日付のスイッチを付けて文字列として表記させます。参考例として
{QUOTE { =ある計算式で8桁表示にしたもの \#"####/##/##" } \@ d \* DBCHAR }
で3日後でも10日前でも好きな日付で表示できるようになります。
これを「年」「月」「日」それぞれにコピーして、[日付スイッチ]で表示する
ものを変更すれば可能になります。

オライリーのハックシリーズで、マクロやフィールドコードを(忙しくて
なかなか勉強する時間が無いがゆっくりと)勉強を現在している途中です。
質問者さんも興味があるのなら、購入してじっくりと勉強されることを
お勧めします。

公開しても良いのかもしれませんが、購入した側からすればタダで知る
ことには少し抵抗があるので、ここではあえて公開しません。
(実際、公開しても長いフィールドコードですから、ここへと入力する
のも疲れるし、フィールドコードをマクロで文字列に変換することも、
ハックシリーズの本を使用すれば可能ですが、面倒なのでしません)
    • good
    • 0
この回答へのお礼

詳しく解説いただき、ありがとうございます。

紹介の本を購入します。

お礼日時:2007/04/25 12:59

こんちは。

割り込み失礼します。

enunokokoro さん、読ませていただきました。

興味を感じました。ご質問者の詳しい内容にもよりますが、フィールドで、違った日にちを設定するのは、無理かなって思います。

>その場合著作権の関係で教えることが難しいので、本の購入が出来るかどうか?
> (ある本に日付をフィールドコードで計算する方法が載っている)

ワードで思い当たる本というと、オライリーのハックシリーズでしょうか?私は、その書籍は手には入れておりませんが、もし、オライリーでしたら、それについては、その会社で言及しています。良かったら確認してみてください。その会社の扱っているものは、GNUに関わっているので、オープンソースである限りは、使用に関しては、特別な義務は必要はありませんが、著作権は留保しています、と書いています。なお、直接の関係がありませんが、私自身は、自分の著作権を主張したい場合は、掲示板には公開しません。多くは、他人のものを、あたかも自分のもののように書く人がほとんどです。ただ、自分の実力にふさわしくなければ、すぐにバレますけれどね。

ところで、

>今日が平成19年12月30日だとしたら
平成20年1月2日

というものと、

>平成19年4月12日
当日の平成19年4月12日

というロジックで表現するのは、フィールドの数式では、DATE はシリアル値で取るのではなく、年,月,日 で採るということなので、複雑なものは、入力自体が面倒だと思います。

ためしに作ってみました。これは、ひとつの式になっていますが、実際は、ばらばらでフィールドに入れるわけですね。

{QUOTE{IF {DATE\@"yyMMdd "}"=071230 "平成20年1月2日" "{DATE \@"GGe年M月d日"}"}}
(これ自体は、フィールドには認識しません。)

でも、質問者様は、こういうことではないような気がします。もう少し複雑の計算ではないでしょうか?そうすると、数式を公開しても、フィールドでは、マニュアルで入力しないと認識しません。複雑な計算式ですと、入力自体が面倒なので、ちょっと、大変ではないかなって思います。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。自分なりに、いただいた回答を理解しようとしていて、遅くなりました。

また、私は「表の挿入」で作成できるマスの中に 年 月 日 を別々に入れています。

おそらく、Wendy02様がお考えのような複雑なものではないと思います。

大変お恥ずかしい限りです。


ありがとうございました。

お礼日時:2007/04/24 13:13

まずは簡単な質問から。


[今日の日付]を「年」「月」「日」で分け、それぞれを[全角]数字のみにする
にフィールドコードを↓に載せますね。

年:19→ { DATE \@ e \* DBCHAR }
月: 4→ { DATE \@ M \* DBCHAR }
日:13→ { DATE \@ d \* DBCHAR }

これで全角の日付になります。日付フィールドですから日付が更新した
ときはファイルを開いた日の日付に自動でなります。

次に質問されている少し難しい問題について。
>ファイルを使いまわししたいので
テンプレートにすることは駄目なのでしょうか?
基本内容をテンプレートに登録し、そこから新規文書を作成すれば済む
と思いますが、テンプレートにしないでファイルを使いまわすと、その
文書に次々と履歴がたまり、文書が重くなることと破損がし易くなると
思いますのでやめたほうが良いと思います。
テンプレートから新規作成していれば、その文書を保存するなり上書き
していても、再度テンプレートから新規作成することで最初に設定した
状態から始めることが出来ますしね。

最後に難しい問題である今日以外の日付を自動で出す方法ですが、これ
をするにはいろいろな条件によって対処方法が違います。
以下の条件の内、使用が可/不可を教えてくれませんか。

・表を含む範囲を保護して、[フォームフィールド]以外入力不可にして
 良いかどうか?(セクションごとの保護の考慮するとして)
・マクロを使用しても可能かどうか?(テンプレート保存先も知りたい)
・保護やマクロを使用しない場合、フィールドコードで作成することに
 なるが、その場合著作権の関係で教えることが難しいので、本の購入
 が出来るかどうか?
 (ある本に日付をフィールドコードで計算する方法が載っている)

ちなみに、WordにJIS関数やTODAY関数は無いのでExcelのような計算は
出来ません。Excelの日付管理に使うシリアル値も基本的には無いので
直接Wordで管理できません。
もしもこれらを使用したいのなら、Excelシートをオブジェクトとして
Word文書内に挿入してそれを表形式で表示するようにするしかないです。
この場合文書サイズが大きくなるとか、文書全体のスタイルなどの統一
し難くなるなど、Wordで作る意味がなくなりますから、最初からExcelで
すべてを作成したほうがはるかに楽です。

この回答への補足

頂いた確認事項へのお返事が遅くなり大変申し訳ありません。

「現在の日付を全角で」はできました。ありがとうございました。

「テンプレートで」は、素人で思いつきませんでした。今後はテンプレートで作業しようと思います。(テンプレートは使ったことがないので、使い方を調べてからですが)

今日以外の日付を自動で出す方法ですが、以下の条件の内、
使用が可/不可についてですが、

・表を含む範囲を保護して、[フォームフィールド]以外入力不可にして
 良いかどうか?(セクションごとの保護の考慮するとして)

 表は、日付の場所のほかに、文字を入力する箇所があります。
 ちなみに、この表は「企画書」や「報告書」の表紙のようなものです。
 
 文字を打つ場所も表の別のセルになっています。


・マクロを使用しても可能かどうか?(テンプレート保存先も知りたい)

 マクロを使用するのは可能です。個人使用としてテンプレートをCドライブ、もしくは外付けハードディスクに保存しますので。


・保護やマクロを使用しない場合、フィールドコードで作成することに
 なるが、その場合著作権の関係で教えることが難しいので、本の購入
 が出来るかどうか?

 できれば、保護やマクロを使用しないで作成したいです。
 本はよほど高額でない限り購入できます。(3,000円くらいですよね?)


 よろしくお願いいたします。

補足日時:2007/04/19 12:37
    • good
    • 0

ANo.2です。

全角というところを見落としていました。すいません。
それぞれの式を
jis()でくくると全角になります。

「年」
=JIS(MID(TEXT(TODAY(),"ge.mm.dd"),2,2))
「月」
=JIS(IF(MID(TEXT(TODAY(),"ge.mm.dd"),5,1)="0",MID(TEXT(TODAY(),"ge.mm.dd"),6,1),MID(TEXT(TODAY(),"ge.mm.dd"),5,2)))
「日」
=JIS(IF(MID(TEXT(TODAY(),"ge.mm.dd"),8,1)="0",MID(TEXT(TODAY(),"ge.mm.dd"),9,1),MID(TEXT(TODAY(),"ge.mm.dd"),8,2)))
    • good
    • 0
この回答へのお礼

エクセルではこのようにできると思います。

ありがとうございました。

エクセルでの操作時に使わせていただきます。

お礼日時:2007/04/25 12:55

「年」のマスに19を入れるには


=MID(TEXT(TODAY(),"ge.mm.dd"),2,2)
「月」のマスは4を入れるには
=IF(MID(TEXT(TODAY(),"ge.mm.dd"),5,1)="0",MID(TEXT(TODAY(),"ge.mm.dd"),6,1),MID(TEXT(TODAY(),"ge.mm.dd"),5,2))
「日」のマスに12を入れるには
=IF(MID(TEXT(TODAY(),"ge.mm.dd"),8,1)="0",MID(TEXT(TODAY(),"ge.mm.dd"),9,1),MID(TEXT(TODAY(),"ge.mm.dd"),8,2))
で可能だと思いますよ。

3日後を表示するのでしたら上の式のtoday()を全てtoday()+3に
置き換えるとOKです。

この回答への補足

これは、エクセルということでしょうか?

それとも、ワードのフィールドコードなどの一部でしょうか?

細かく説明いただき、ありがとうございました。

よろしかったら、再度ご教示ください。

補足日時:2007/04/19 12:28
    • good
    • 0

Word 2000ユーザーです。

バージョンが違うと細かいところは違う可能性があります。

こういうことをしたい場合は,フィールドコードにスイッチを付けます。スイッチは自分で記述しても良いですが,下記の方法を用いることもできます。

メニューの「挿入」→「フィールド」→「日付と時刻」→「日付」→「Date」を選択し「オプション」ボタンを押す→「M/d/yyyy」などをダブルクリックすると,スイッチが付いた式が表示されます(「DATE \@ "M/d/yyyy"」など)→そのスイッチを下記のように変更します。

「年」の数字のみ(和暦)を表示する場合
 DATE \@ "e" または DATE \@ "ee"

「年」の数字と元号(和暦)を表示する場合
 DATE \@ "ggge"

「月」の数字のみを表示する場合
 DATE \@ "M"

「日」の数字のみを表示する場合
 DATE \@ "d"

詳しくはWordのヘルプで「共通スイッチ」と入力して検索してみてください。

注意点ですが,フィールドは更新されないと前のままのデータが表示されている場合があります。習慣として[Ctrl]+[A]で文書全体を選択してから[F9]を押してフィールド全てを更新しておくと良いと思います。

また,[Alt]+[F9]を押すと,フィールドコードを表示させることができますので,後からスイッチを自分で変更することも可能です。
    • good
    • 0
この回答へのお礼

できました。

現在の日付はできました。

ありがとうございました。

お礼日時:2007/04/19 12:26

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