[[20170108151523]] 『Wordの文章をExcelに抜き出して表示させる』(ウルトラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Wordの文章をExcelに抜き出して表示させる』(ウルトラ)

下記のようなことがマクロを設定することで、可能でしょうか

 Wordで作成した文章をExcelに字数を設定して複数のセルを結合したところに、入れ込みたい。また、それを1行ごとに飛ばした行にいれて行きたい。(例えば、1行目・3行目・5行目というようにする)
 例えば、Wordで1行が45文字の文章が8行ほどあるとしたら、それを35文字ずつで改行させて、一行ごとに飛ばした行のExcelの複数のセルを結合したところに表示させる。(例えば、C列の12行目からJ列の12行目の間に表示させる)

条件
※ 既存のExcelの申請書があり、Wordで作成した文章だけを抜き出す
1.Wordの文章は45文字程度になっている
2.Excelは1行を35文字にする
3.特定のセルの結合したところに表示させる
4.飛び飛びの行ごとに入れて行く
6.35文字以上は改行して次の行に自動的に送っていく
7.禁則処理で行頭・行末の句読点の処理は自動的に行われる

< 使用 Excel:Excel2013、使用 OS:Windows10 >


こんな感じのマクロでたぶんできると思います。

1)Word文書のページ設定を、1行あたり35文字にする
2)1行ずつ配列に取り込む
3)配列の各要素をエクセルで1行おきに表示する

(マナ) 2017/01/08(日) 16:41


ところで、8行程度なら手作業でよいのでは?

(マナ) 2017/01/08(日) 16:54


(追加質問)
>7.禁則処理で行頭・行末の句読点の処理は自動的に行われる
自動的に行われるとは?
マクロ側は黙って見ていればいいの?
そうでなく、マクロ側で禁則処理を代替するなら、
禁則処理を具体的に述べて下さい。
どこまでを考えているのか、Wordの禁則処理を参考に説明してください。
 
 
# 私なら、Word側でまず一行35文字にさせるよ。禁則も含めてね。
# それをそのままExcelに移すかな。
# いずれにせよ、Excel君は文章作成機じゃないと思うので。
# 他人に依頼するのはごく簡単だけどねえ。

(γ) 2017/01/08(日) 17:02


後半部分はマナさんとまるかぶりでした。失礼。
 
(1)Wordの文章はバックアップをとって、ページの行数を35に設定。
(2)表示上の一行ごとに切り出すのは、下記参照ください。
http://www.relief.jp/itnote/archives/word-vba-get-text-each-line.php
 
質問者さんは、どこまでトライされているのか、それも書いてください。

(γ) 2017/01/08(日) 17:29


正直なところ、マクロでWordの文章をExcelに取り込むことができるとは考えもしなかった初心者です。Wordでマクロを組むのか、Excelで組むのかすら分かりません。http://www.relief.jp/itnote/archives/word-vba-get-text-each-line.phpを参照しましたがどのようにしてよいのかもわかりません。8行程度なら手作業でやっていましたが、申請の時間が短いことと、主たる業務以外のことで、毎日の仕事の目処をつけてからのことや、40名程度を2・3日でやらなくてはならず、当然のことながら個々の資料を基に、考えながら文章を作成するので、コピぺでやっていましたが、少しでも省力できればとお伺いしたような訳です。
今できたことは、昨年作成したWordの文章をダミーで35文字にして、5名分だけ取りあえず準備したみました。4行から5行のものです。Excelの申請書のフォーマットも準備できています。どんなものでしょうか、勝手なお願いですが、ご返事のほどよろしく小貝します。
(ウルトラ) 2017/01/08(日) 19:14

γさん紹介のページを参考に、こんな感じで

 1)新規のWord文書に転記したい文章だけををコピペ
    ・1ページにおさめること
   ・図形などはなし文章だけにすること
 2)元のword文書は閉じる(word文書は1個だけ開いた状態にする)
 3)エクセルの転記したい最初のセルを選択した状態で
 4)下記のマクロを実行

 Option Explicit

 Sub test()
    Dim ws As Worksheet
    Dim wd As Object
    Dim doc As Object
    Dim ln As Object
    Dim s As String
    Dim v()
    Dim n As Long
    Dim i As Long

    Set wd = GetObject(, "Word.application")
    Set doc = wd.ActiveDocument
    doc.PageSetup.CharsLine = 35
    With doc.ActiveWindow
'        .View.Type = 3 ' wdPrintView
        With .Panes(1).Pages(1).Rectangles(1)
'            If .RectangleType = 0 Then 'wdTextRectangle
                For Each ln In .Lines
                    s = Replace(Replace(ln.Range.Text, Chr(13), ""), Chr(11), "")
                    s = Trim(s)
                    If Len(s) > 0 Then
                        n = n + 1
                        ReDim Preserve v(0 To n)
                        v(n) = s
                    End If
                Next
'            End If
        End With
    End With

    For i = 1 To n
        ActiveCell.Offset(i * 2 - 2).Value = v(i)
    Next

    Set doc = Nothing
    Set wd = Nothing

 End Sub

(マナ) 2017/01/08(日) 20:14


うまくできました。色々な方に毎度のことながらご迷惑掛けて申し訳ないです。なお、よく初心者の私みたいものに親切に教えて下さり、ありがとございます。私自身も勉強しなくてはと改めて思っています。重ね重ねお礼いたします。ありかごとうございました。
(ウルトラ) 2017/01/09(月) 12:59

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.