• ベストアンサー

ワードの文中の日付抽出

会議資料をワードで作成しています。 文章の中に、日付(と曜日)が記載してあり、その日付と曜日が正しいかのチェックを、自動で行うことは可能でしょうか? 抽出して比較とか、作業用にエクセルに張り付けるとか、少し手作業があるのは構いません。 今は、目で見て確認しているため、精度向上と時間短縮する方法が知りたく、質問いたしました。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.12

XX月XX日(曜)~XX月XX日(曜) 指摘を受け気づきましたが、このケースも、 文章の先頭(厳密には5文字目以前)から始まる場合に 検査対象にならないのと同じ理由で、後者側が検査対象になりません。 いくつかヒットしないケースがあるかもしれないと危惧していましたが、 このケースには気づきませんでした。 また、検査してOKだった時にも結果を表示したい場合と 表示したくない場合とがあるとのことなので、 上記対応も含めコードを書き直してみました。 これなら、 XX月XX日(曜)~XX月XX日(曜) の場合も、 文章の先頭から始まる場合も 対応しているはずです。試してみてください。 なお、XX月XX日(曜)の文字列の途中で明示的に改行している場合は 検査対象になりません。 Option Explicit Const MyNen = 3  '年が省略されている場合に見なす令和の年(1~99) Sub DateCheck()  Dim SPos As Long  Dim EPos As Long  Dim WorkStr As String  Dim rc As Integer    rc = MsgBox("OKの場合も検査結果を表示しますか?", vbYesNo + vbQuestion, "確認")    ActiveDocument.Bookmarks("\StartOfDoc").Select  With Selection.Find      .Text = "([0-9| ]{1,2}月)([0-9| ]{1,2}日)([\(|()]?[(\)|)])"   .MatchFuzzy = False   .MatchWildcards = True   Do While .Execute    SPos = Selection.Range.Start    EPos = Selection.Range.End    If SPos < 5 Then   '※     SPos = 0    Else     SPos = SPos - 5   '※    End If    WorkStr = ActiveDocument.Range(SPos, EPos).Text    If Format(GetDay(WorkStr), "aaa") = _      Left(Right(WorkStr, 2), 1) Then     If rc = vbYes Then      'OKの場合      MsgBox "OK:" & _       Format(GetDay(WorkStr), "GGGE年M月D日") & Right(WorkStr, 3)     End If    Else     'NGの場合     MsgBox "★NG:" & _       Format(GetDay(WorkStr), "GGGE年M月D日") & Right(WorkStr, 3)    End If      Loop  End With  ActiveDocument.Bookmarks("\StartOfDoc").Select  '※の5は、"令和x年"、"令和xx年"を想定した文字数 End Sub '//------------------------------------------------ Function GetDay(InText As String) As Date '年月日を取得  Dim y As Long  Dim m As Long  Dim d As Long  y = GetY(InText)  m = GetM(InText)  d = GetD(InText)  GetDay = DateSerial(y + 2018, m, d) End Function '//------------------------------------------------ Function GetD(InText As String) As Long '日を取得  Dim i As Long  If IsNumeric(Left(Right(InText, 6), 1)) = False Then   GetD = Val(Left(Right(InText, 5), 1))  Else   GetD = Val(Left(Right(InText, 6), 2))  End If End Function '//------------------------------------------------ Function GetM(InText As String) As Long '月を取得  If Left(Right(InText, 7), 1) = "月" Then   If IsNumeric(Left(Right(InText, 9), 1)) = False Then    GetM = Val(Left(Right(InText, 8), 1))   Else    GetM = Val(Left(Right(InText, 9), 2))   End If  End If  If Left(Right(InText, 6), 1) = "月" Then   If IsNumeric(Left(Right(InText, 8), 1)) = False Then    GetM = Val(Left(Right(InText, 7), 1))   Else    GetM = Val(Left(Right(InText, 8), 2))   End If  End If End Function '//------------------------------------------------ Function GetY(InText As String) As Long '令和暦で年を取得  Dim i As Long  Dim FromY As Long  Dim ToY As Long  Dim wkY As Date    For i = 11 To 15   If Left(Right(InText, i), 2) = "令和" Then    FromY = i - 2    Exit For   End If  Next i  For i = 8 To 10   If Left(Right(InText, i), 2) = "年" Then    ToY = i + 1    Exit For   End If  Next i    wkY = Val(Left(Right(InText, FromY), FromY - ToY))  If wkY = 0 Then   GetY = MyNen  Else   GetY = wkY  End If End Function

piro-roron
質問者

お礼

何度も本当にありがとうございます! 実際の会議資料で使わせていただいています。 ~で記載の部分も、チェック対象となりました。 ありがとうございます!!

その他の回答 (11)

  • kkkkkm
  • ベストアンサー率65% (1623/2463)
回答No.1

日付と曜日の関係が正しいかどうかということでしたら 日付をエクセルにコピーして A1に日付があればB1にでも =TEXT(A1,"aaaa") とすればその日付にたいする曜日が表示されます。

piro-roron
質問者

補足

ご回答ありがとうございます! ワードは、15ページくらいあり、文章の中に日付が入っています。 一つずつセルにコピーしていくとなると、かなりの数になるので、 できれば、一気に文章全体でコピーして、そのあと確認するか、ワードから日付だけを一括で抽出(◯月◯日(曜日)という記載で統一)し、まとめて確認できたら…と思っています。 ワードからエクセルに一気にコピーすると、ワードの1文章単位でエクセルの1セルにコピーされますが、1文章内に2回、日付が出てくる場合もあります。

関連するQ&A

  • ワードの日付をエクセルの日付に変えたいのですが。

    どなたかエクセルに詳しい方にお尋ねします。 ワードでできたリストがあり、たとえば、10 Mar 2000のように英語の日付が入っています。これをエクセルに貼り付けることはすぐにできたのですが、エクセルのセルはこれを文字と認識してしまい、日付とは認識しないのです。この日付を元に年齢計算などをしたいので、どうしても日付として認識してもらいたいのです。どうすればよいのでしょうか。データは2000以上あるので、手作業で変更することは不可能なのです。お願いします。

  • ワードでの日付の取り扱い

    WORD2003を使用しています。 Excelで出来た事なのですが、WORDで出来る方法ありましたらご教授下さい。 項目(1) 日付を入力(10/4) ⇒ 2006/10/4 項目(2) 上記項目(1)の日付+1が自動セット ⇒ 2006/10/5 項目(3) 上記項目(2)の日付+1が自動セット ⇒ 2006/10/6 宜しくお願いします

  • エクセルの日付で抽出し、

    日付でデータを抽出しその隣の列の金額の数字を別シートに合計したいのですが いい方法があったら教えて欲しいです。 なお、日付はバラバラです。7月もあれば8月もあるので自動的に抽出できる方法ありますか? 日付を入力すれば8月の分は8月金額合計へへ9月の分は9月の金額合計へというようなかt5亜地にしたいです。難しいとおもうので、また、エクセルが得意ではないので 細かく分かりやすく教えていただけたら助かります。 日付  金額       7/1   100000 8/1   200000 8/25  100000 7/20  20000 これを別シートに自動で金額が入るようにしたいのです。 7月合計 120000  8月合計 300000 9月合計 ・・・・・ というようにできたらお願い致します

  • ワードで自動的に未来の日付を入れる

     エクセルでは自動で日付を入れるときに算式に+1とか 入れると次の日が入ります。  ワードではどうやれば良いのでしょうか?もしくは出来ないのでしょうか?

  • アクセスで日付を入力すると曜日がついてきちゃう

    アクセス2002を使い始めたばかりの初心者です。 フォームで日付の入力をすると日付のみしか出てこないのですが、テーブルの方を見ると日付と一緒に曜日が書かれています。 またクエリの抽出条件で日付を入力すると、曜日が自動的にくっついてきて「指定した式の構文が正しくありません」と出てしまいます。 自分でそうしたものなのか、さっぱりわかりません。 とても困っています。 どなたか教えてください。 よろしくお願いします。

  • 横型カレンダーから日付を抽出するには

    横型カレンダーに、それぞれの工程が記載されている表があります。 NETWORKDAYSで発注~納品の日数を出すにはどうすればいいでしょうか? またはこれを工程ごとに日付を抽出する たとえば 発注日 2/23 納品日 3/1 のように別のセルに落とす方法はありますか? excel2007です。

  • Wordでの日付入力なのですが・・・・・・

    Wordで書面を作成する際に作成日付を入力を「挿入」TABの「日付入力」から入力すると日付が変わりますと書面の日付も自動的に変わりますが、これをEXCELのCtrl +セミコロンの様に一旦入力すると日付が変わっても入力した日付のままにしておく方法はありませんか?いちいち入力せずに一発簡単入力方法を教えてください。

  • ワード エクセル 日付表示について

    お世話になります。 ワード、エクセル共に、 文書を作成、更新(又はプリントアウト)した時に、 自動的に日付を入れることはできませんでしょうか? (いちいち設定せずに、過去に作成した文書も、です) ワードなら、右上に入れられるのかもしれませんし、 エクセルなら、ヘッダー、フッダーでできるのかもしれませんが、 できれば、右下に入れたいのです。 (不可能ならどこでもよいのですが、 ワード、エクセル、同じ位置に入るとありがたいです) とにかく、一番は、自動で入って欲しいのです。 説明がわかりにくいかもしれませんが、 文書をプリントアウトした時に、 手動でゴム印を押す感覚です。 よろしくお願い致します。

  • ワード2002での日付挿入について

    ワードに日付を挿入するため、「挿入」→「日付と時刻」→「カレンダーの種類」→「西暦」→表示形式選択後、[自動的に更新する]をチェックし[OK]をクリックしたら、 {TIME\@"yyy'年'M'月'd'日'"} と表示されます。コピー&ペイストで他に貼り付けたり、印刷プレビューを見る限りはちゃんと数字で表わされるのですが・・・。 こういうものなんでしょうか?ワードに日付を入れた時点でちゃんと数字が入るようにするにはどうしたら良いのでしょうか。 アドバイス宜しくお願いします。

  • 日付を自動表示させたい

    Excelを使い、一覧表(メンバー表)を毎日作る作業を行っています。 メンバーは変動があるので、VLOOKUPを使いコード番号の入力だけで、氏名を表示させるように設定してありますが、日付と曜日だけでも立ち上げるたびに自動で表示できたら便利だと考えています。 そんな方法などあるのでしょうか?

専門家に質問してみよう