2014 年 4 月 10 日 索引文字列の抽出 益永八尋 索引作成や目次作成のための文字列、ページ、行数の抽出を行い、Text ファイルとして 保存する。 文字列抽出のためのマクロ(VBA)のコードは下記の通りである。このマクロの実行は 【Ctrl+Z】のキ―操作で行えるようにしている。 【Ctrl+Z】のキ―操作で行えるようにする ための手順は“Ⅰ.マクロを Ctrl+Z のキー操作で実行させるための手順”に示す。ただし、 手順は Microsoft Office Word 2007 の場合である。これ以外のバージョンでは多少異なる ので注意が必要である。このプログラムでは下記のようにページ番号の抽出が可能な場合 と不可能な場合がある。単純にページ番号がついただけの書式の場合には、ページ番号の 取得が可能であるが、ページ番号に飾り(〇付、リボン付等)が付いた書式の場合はペー ジ番号の取得はできません。下表に一覧表として示す。下表のページ書式は Word の書式で す。ただし、ページ番号は Footer に表示される場合である。Header や余白にページ番号 を表示している場合にはコードの変更が必要である。 抽出した文字列、ページ番号、行数のデータは、当該文書があるフォルダにテキストデー タとして日付付のファイル名で(Sakuin_Dat_20140410.txt)保存される。このファイル は NotePad で見れます。 文字列を抽出するための VBA のコードは“Ⅲ.標準モジュール NewMacros のプログラ ムコード”に示す。VBA のコードを VBA コードが記述できる場所にコピー&貼り付けす る。VBA コードが記述できる場所は“Ⅱ.VBA の記述場所作成手順”に示す。 ページ番号を取得できる 書式番号 ページ書式名 ページ番号の取得が不能 書式番号 ページ書式名 1 番号のみ 1 10 X/Y ページ太字の番号 1 2 番号のみ 2 11 X/Y ページ太字の番号 2 3 番号のみ 3 12 X/Y ページ太字の番号 3 4 ページ番号 1 13 図形付き ページの端氏折り 5 ページ番号 2 14 図形付き ボックス付き斜体 1 6 強調線 1 15 図形付き ボックス付き斜体 2 7 強調線 2 16 図形付き モザイク 1 8 強調線 3 17 図形付き モザイク 2 9 強調線 4 18 図形付き モザイク 3 42 かっこ 1 19 図形付き リボン 46 チルダ 20 図形付き 円 1 2014 年 4 月 10 日 48 細い線 21 図形付き 円周 1 53 太い線 22 図形付き 円周 2 54 大(色付き)1 23 図形付き 円周 3 55 大(色付き)2 24 図形付き 角丸四角形 1 56 大(色付き)3 25 図形付き 角丸四角形 2 26 図形付き 角丸四角形 3 27 図形付き 巻物 28 図形付き 三角形 1 29 図形付き 三角形 2 30 図形付き 星マーク 31 図形付き 正方形 1 32 図形付き 正方形 2 33 図形付き 正方形 3 34 図形付き 積み上げたページ 1 35 図形付き 積み上げたページ 2 36 図形付き 楕円 37 図形付き 矢印 1 38 図形付き 矢印 2 39 番号のみ 2 本線 1 40 番号のみ 2 本線 2 41 番号の未 3 本線 43 かっこ 2 44 タブ 1 45 タブ 2 47 ドット 49 縦方向のアウトライン 1 50 縦方向のアウトライン 2 51 上線 1 52 上線 2 57 大1 58 大2 2 2014 年 4 月 10 日 Ⅰ.マクロを Ctrl+Z のキー操作で実行させるための手順 ①ここをクリック 図Ⅰ-1 手順 1 ②ここをクリック 3 2014 年 4 月 10 日 ③ここをクリック 図Ⅰ-2 手順 2 4 2014 年 4 月 10 日 図Ⅰ-3 手順 3 ④ここをクリック 5 2014 年 4 月 10 日 ⑤ここを下にスクロールする 図Ⅰ-4 手順 4 図Ⅰ-5 手順 5 6 2014 年 4 月 10 日 図Ⅰ-6 手順 6 ⑦ここをクリックする ⑥ここをクリックする 図Ⅰ-7 手順 7 ⑨ここをクリックする 7 2014 年 4 月 10 日 図Ⅰ-8 手順 8 ⑩ここをクリックする 8 2014 年 4 月 10 日 Ⅱ. VBA の記述場所作成手順 Word を起動したときに作成される文書 1 のメニューに【開発】がない場合は、Word の オプションで【開発】を表示させます。この手順は以下のとおりです。 図Ⅱ-1 手順 1 ① ここをクリックする 9 2014 年 4 月 10 日 図Ⅱ-2 手順 2 ② ここをクリックする ③ ここにチェックを入れる する 図Ⅱ-3 手順 3 ④ 10 ここをクリックする 2014 年 4 月 10 日 図Ⅱ-3 手順 3 ⑤ ここをクリックする 図Ⅱ-4 手順 4 ⑥ ここをクリック する 赤線の枠内が VBA のコードを記述する場所です。 11 2014 年 4 月 10 日 Ⅲ.標準モジュール NewMacros のプログラムコード Public strDrive As String 'ドライブ名 Public strFolder As String 'フォルダ名 Public Mika As Integer Public Folder_Name(500) As String 'フォルダ名のリスト Public Folder_Count As Integer Public strPath As String Sub Get_Sakuin_Dat() '2014.4.10 'Word 文書から索引を作成するための文字列抽出を行い、Text ファイルに保存する。 'Text ファイルのファイル名は日付入りとする。 Dim I As Integer Dim J As Integer Dim a As Object Dim b As Object Dim strDat As String Dim MyPath As String Dim subFile_Name As String Dim n As Integer Dim M(1000) As Integer Dim Mn As Integer Dim Mg As Integer Dim Mo As Integer Dim Rn As Integer Dim D As Integer Dim strMika As Variant Dim secStrt_Num(100) As Variant Dim Page1(1000, 500) As Integer Dim wdFile_Name As String Dim Sakuin_Count As Integer '------------------------------------------------------------On Error Resume Next '--------------------------------'索引作成の対象文書がある Path に Sakuin_Dat_" & subFile_Name & ".txt"があるか を確認する 12 2014 年 4 月 10 日 strPath = ActiveDocument.Path Sakuin_Count = Data_Read(strPath) Sakuin_Count = Sakuin_Count + 1 '--------------------------------I=1 J=1 wdFile_Name = ActiveDocument.Name Set b = Documents(wdFile_Name).ActiveWindow.Selection M(J) = b.End K = ActiveDocument.Range(0, M(J)).Sections.Count 'Set c = ActiveDocument.Sections(K) '-----------------------------------------'Mn = Selection.Information(wdActiveEndPageNumber) 'ド キュメントの累計ページ数 Mn = b.Information(wdActiveEndPageNumber) ' ドキュメントの累計ページ数 'SecPage(I) = Mn 'P = Section_TotalPage(K) 'Mg = Selection.Information(wdFirstCharacterLineNumber) 'ペー ジ内の行番号 Mg = b.Information(wdFirstCharacterLineNumber) 'ペ ージ内の行番号 'Mo = Selection.Information(wdNumberOfPagesInDocument) 'ド キュメント全体のページ数 Mo = b.Information(wdNumberOfPagesInDocument) ' ドキュメント内のページ数 'Mn = Mn - Section_TotalPage(K - 1) + secStrt_Num(K) - 1 secStrt_Num(K) = ActiveDocument.Range(0, M(J)).Sections(K).Footers(wdHeaderFooterFirstPage - 1) strMika = ActiveDocument.Range(0, M(J)).Sections(K).Footers(wdHeaderFooterFirstPage - 1) '---------------------------If strMika = "" Then Else 13 2014 年 4 月 10 日 Rn = Len(strMika) Mn = Left(strMika, Rn - 1) 'セ クションの最初のページ番号 D = b.Selection.Information(wdActiveEndAdjustedPageNumber) 'ページ内の行番号 'Page1(I, J) = c.Footers(wdHeaderFooterPrimary) 'セクションのページ番号 '---------------------------------------------------------'検索文字列が英数字表記の文字列の処理 'If strIndex(I) <> Japanese Then 'Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend 'strKensaku_Moji = Selection 'If Right(strKensaku_Moji, 1) = "" Then '---------------'Page1(I, J) = Mo - secStrt_Num(K - 1) + 1 Page1(I, J) = D Page1(I, J) = Get_PageNum(strMika) 'End If 'End If 'strPage2(K, J) = c.Footers(wdHeaderFooterFirstPage) End If '-------------------------------------'MsgBox (StrConv(J, vbUpperCase) & " P." & Page1(I, J)) & Chr(13) & " P2." & Mn & " 行:" & Mg 'Set C = Nothing Set b = Nothing '----------------------------------------Set a = Selection n = ActiveDocument.Range(0, a.End).Sections.Count '文書のセクション数 Set a = ActiveDocument.Sections(n) '--------------------------------------------------------------------------------------------Selection.Font.Color = wdColorRed '選択した文字列の 色を赤色にする strDat = Selection.Text '選択した文字列 'MsgBox a.Headers(wdHeaderFooterPrimary) 14 'Header の中の 2014 年 4 月 10 日 文字列を表示 MsgBox " 索引文字列 = " & strDat & Chr(13) & "ページ番号 = " & Page1(I, J) & Chr(13) & "行番号 = " & Mg '----------------------------------------subFile_Name = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2) '------------------------------MyPath = strPath & "¥Sakuin_Dat_" & subFile_Name & ".txt" Open MyPath For Append Access Write As #1 '------------------------------------Write #1, Sakuin_Count, strDat, Page1(I, J), Mg Close #1 End End Sub Public Function Get_PageNum(AA As Variant) Dim Rn As Integer Dim cnt As Integer Dim BB As String Dim Page_Num As String '-------------------------Page_Num = "" BB = "" Rn = Len(AA) '-------------------------For cnt = 1 To Rn BB = Mid(AA, cnt, 1) Select Case BB Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" Page_Num = Page_Num & BB Case Else End Select Next cnt '----------------------Get_PageNum = Val(Page_Num) End Function 15 2014 年 4 月 10 日 Public Function Data_Read(AA As String) Dim MyPath As String Dim Page1(10, 10) As Integer Dim I As Integer Dim J As Integer Dim Mg As Integer '-----------------------On Error GoTo ErrorHandler I=1 J=1 '------------------------subFile_Name = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2) MyPath = AA & "¥Sakuin_Dat_" & subFile_Name & ".txt" Open MyPath For Input As #1 '--------------------------Do While EOF(1) = False Input #1, Sakuin_Count, strDat, Page1(I, J), Mg Loop '-------------Close #1 '--------------Data_Read = Sakuin_Count Exit Function ErrorHandler: errNo = Err.Number If errNo = 53 Then Mika = 0 Else Resume Next End If End Function Sub ListUp_FolderList(FolderSpec As String) 16 2014 年 4 月 10 日 Dim Folder_Collection As Object Dim Folder_List As Variant Dim cnt As Integer Dim Folder_Name(500) As String '------------------------------------------------------------------Set Folder_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(FolderSpec).SubFolders '---------------------------------------cnt = 0 '---------------------------------------For Each Folder_List In Folder_Collection cnt = cnt + 1 Folder_Name(cnt) = Folder_List.Name Next '---------------------------------------Folder_Count = cnt '---------------------------------------With UserForm1.ComboBox2 .Clear '-------------------------For I = 1 To Folder_Count .AddItem Folder_Name(I) Next I End With '------------------------------End Sub 17
© Copyright 2024 Paperzz