まず、課題となるWordの状態を画像でご覧ください。Word2007です。
「1.」の並びは本来「見出し1」(段落書式)相当なのですが、「リスト段落」として書式設定してあります。「(ア)」の並びは「見出し2」ですが同様に「リスト段落」です。「①」のならびが「リスト段落」(箇条書き)です。目標は、「見出し」になるべきものは、その前の「標準」段落にVBAでしたい、というものです。
まず、箇条書き(リスト段落)に目印をつける。
Sub 箇条書きかの判定() ' 'リスト段落かどうかの判定 'リスト段落なら、左ボーダーに、黄金色の直線が引かれる ' Dim para As Paragraph For Each para In ActiveDocument.Paragraphs With para.range .Borders(wdBorderLeft).LineStyle = wdLineStyleNone '≒HTML/CSSのborder-left属性を削除 If .ListParagraphs.Count = 1 Then 'リスト行かどうかの判定 1=yes .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle '直線 .Borders(wdBorderLeft).Color = wdColorGold '黄金色 .Borders(wdBorderLeft).LineWidth = wdLineWidth600pt '600pt = 6point幅 End If End With Next End Sub
上のVBAを実行すると、下の図のようになります。
左ボーダーに罫線が黄金色(wdColorGold)で印されました。ただし、「4.」は非該当です。ありがちな、どこかでリスト段落書式がうまく続かず、似たような書式にした、という流れです。
処理対象としない箇条書き(リスト段落)の罫線を消す
Sub 箇条書きのうち処理対象としない段落のマークをはずす() Dim para As Paragraph For Each para In Selection.Paragraphs '選択範囲内にある段落(paragraphs)を処理対象にする If para.range.ListParagraphs.Count = 1 Then 'リスト段落でなかったら処理をスルー Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone '黄金色の左罫線を削除 End If Next Selection.Collapse End Sub
処理対象としない箇条書き(リスト段落)を選択し、上のVBAを実行します。結果が下の画像です。この時点で、左罫線があるのが処理対象になることに…。
対象の箇条書き(リスト段落)を標準段落に変更します
Sub 箇条書き段落を標準段落に変換() Selection.EndKey Unit:=wdStory '作業開始は最後の段落でファイル内すべてが作業対象 Do While 1 = Selection.MoveUp(Unit:=wdParagraph, Count:=1) '処理循環開始:段落単位 With Selection.range.ListFormat If 0 < .ListType And Selection.Paragraphs _ .Format.Borders(wdBorderLeft).Color = wdColorGold Then '処理対象の判定 Selection.TypeText Text:=.ListString & " " 'リスト段落に、リスト番号と空白を挿入 Selection.MoveUp Unit:=wdParagraph, Count:=1 'ひとつ上の段落に移動 .RemoveNumbers '番号を消去 End If End With Loop '処理循環終了:段落単位 End Sub
上のVBAの大部分は、「【Word】箇条書きや段落番号を外すマクロ」からいただきました。これが無かったら、前進できなかったです。感謝。TAKAが追加したのは、左罫線を処理対象として判断する、という部分だけです。
上のVBAを実行したら、下の画像のようになりました。
左罫線のところはすべて「標準」になりました。
①から始まらない箇条書きができたので手動でとりあえず…
しかし、問題発生です。赤で囲んだところが、1-(ア)の①、②に続いて、③から始まっています。本来なら①からでないとNGです。
少し、VBAで何とかならないのだろうかとやってみたですがTAKAのチカラではできんかったです。したがって、対象箇条書き段落を選択→右クリック→メニュー表示→「①から再開」をクリック、という手順でなんとか済ませました…。できたらVBAでちゃんとしたい…妄想…
左罫線の黄金色を消す
Sub 左ボーダー装飾を消す() ' '左ボーダー装飾を消す ' Dim para As Paragraph For Each para In ActiveDocument.Paragraphs With para.range .Borders(wdBorderLeft).LineStyle = wdLineStyleNone '装飾属性を削除 End With Next End Sub
左罫線の黄金色のところは、「見出し1」「見出し2」など段落書式を適用すると、消えます。しかし、直接消すことが必要なこともあるかもしれませんので、上のVBAを実行します。
以上であります…。どなたか~、①としたいところが自動で③になったのを、①から始まるようにVBAで書いてくださいな~などと切望~