pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

WordVBA:箇条書き(リスト段落)を標準段落にする(もがいているけどここまでかな…)

まず、課題となるWordの状態を画像でご覧ください。Word2007です。
f:id:PageTAKA:20130814205537j:plain

「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を実行すると、下の図のようになります。
f:id:PageTAKA:20130814210049j:plain
左ボーダーに罫線が黄金色(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を実行します。結果が下の画像です。この時点で、左罫線があるのが処理対象になることに…。
f:id:PageTAKA:20130814210438j:plain

対象の箇条書き(リスト段落)を標準段落に変更します

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を実行したら、下の画像のようになりました。
f:id:PageTAKA:20130814211127j:plain
左罫線のところはすべて「標準」になりました。

①から始まらない箇条書きができたので手動でとりあえず…

しかし、問題発生です。赤で囲んだところが、1-(ア)の①、②に続いて、③から始まっています。本来なら①からでないとNGです。
少し、VBAで何とかならないのだろうかとやってみたですがTAKAのチカラではできんかったです。したがって、対象箇条書き段落を選択→右クリック→メニュー表示→「①から再開」をクリック、という手順でなんとか済ませました…。できたらVBAでちゃんとしたい…妄想…
f:id:PageTAKA:20130814212109j:plain

左罫線の黄金色を消す

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で書いてくださいな~などと切望~