0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで Wordの文をすべて抽出

Last updated at Posted at 2024-01-20

概要

  • Excel VBAで指定されたWord文書からすべての文を抽出して、配列に格納するためのコードを作成しました。
  • 以下の動画で使われているものです。

実行環境

以下の環境で動作確認をしました。

  • Windows11でのExcel 2021

注意点

  • プログラムの実行については、すべて自己責任で行ってください。実行により発生した、いかなる直接的または間接的被害について、作者はその責任を負いません。

コード

VBA
Option Explicit

Sub TestExtractSentences()
    ' Wordファイルのパスを指定
    Dim filePath As String
    filePath = _
    "Your_Path"
    
    ' ExtractSentencesFromWordFile 関数を呼び出して文を取得
    Dim sentencesArray As Variant
    sentencesArray = ExtractSentencesFromWordFile(filePath)

    Dim i As Integer
    For i = LBound(sentencesArray) To UBound(sentencesArray)
        ' 配列の各要素をデバッグ表示
        Debug.Print "Index " & i & ": " & sentencesArray(i)
    Next i
End Sub


' Wordファイルの文章の中から文をすべて抽出して、配列として返す
Function ExtractSentencesFromWordFile(ByVal filePath As String) As Variant
    Dim objWord As Object
    Dim objDoc As Object
    Dim sentenceArray() As String
    Dim sentenceCount As Integer
    Dim i As Integer
    Dim sentence As String    
    ' Wordファイルが既に開かれていないか確認
    Call CheckIfWordFileIsOpen(filePath)

    ' Wordアプリケーションの新しいインスタンスを作成
    Set objWord = CreateObject("Word.Application")

    ' Wordアプリケーションの表示を非表示にする
    objWord.Visible = False

    ' 指定されたWordドキュメントを開く
    Set objDoc = objWord.Documents.Open(filePath)

    ' 変数の初期化
    sentenceCount = 0
    
    ' ドキュメント内の各文に対してループ
    For i = 1 To objDoc.Sentences.count
        ' 文を取得
        sentence = objDoc.Sentences(i).Text
        ' 文のカウントを増やす
        sentenceCount = sentenceCount + 1
        ' 配列をリサイズして新しい文を収めるスペースを作成
        ReDim Preserve sentenceArray(1 To sentenceCount)
        ' 配列に文を格納(改行は削除)
        sentenceArray(sentenceCount) = Replace(sentence, vbCr, "")
    Next i

    ' Wordドキュメントを閉じる
    objDoc.Close

    ' オブジェクト参照を解放
    Set objDoc = Nothing
    Set objWord = Nothing

    ' 文の配列を戻り値として返す
    ExtractSentencesFromWordFile = sentenceArray
End Function


' 指定のWordファイルが既に開かれているか確認
Function CheckIfWordFileIsOpen(ByVal filePath As String) As Boolean
    ' 関連するオブジェクトの宣言
    Dim wordApp As Object
    Dim doc As Object
    
    ' エラーが発生してもスクリプトの実行を続行
    On Error Resume Next
    ' 既存のWordアプリケーションがあるか確認
    Set wordApp = GetObject(, "Word.Application")
    ' エラーハンドリングを元に戻す
    On Error GoTo 0
    
    ' Wordアプリケーションが存在する場合
    If Not wordApp Is Nothing Then
        ' 開かれている全てのドキュメントに対して処理を実行
        For Each doc In wordApp.Documents
            If doc.Path & "\" & doc.Name = filePath Then
                ' ファイルが開かれている場合はTrueを返し、関数を終了
                CheckIfWordFileIsOpen = True
                ' 既に開かれている場合はメッセージを表示し、処理を中止
                MsgBox "指定されたWordファイルは既に開かれています。ファイルを閉じてから再度実行してください。"
                End
            End If
        Next doc
    Else
        ' Wordアプリケーションが実行されていない場合
    End If
    
    ' オブジェクトの解放
    Set doc = Nothing
    Set wordApp = Nothing
End Function



0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?