Blog

URLから特定箇所のHTMLを抽出して文字数をカウントするマクロ

2018年7月3日

すごい久しぶりにブログを書きます。あんまりWEBの事と関係ないけど、とある案件で翻訳の見積を作成する際にさすがに人力はきついというか日が暮れるなと思ったのでマクロを探しました。

この記事の内容

用途

今回はページ数は数百ページあり明日までに見積がほしいと夕方頃に言われたので急遽調べました…。

サイトの多言語サイトの見積でコンテンツ部分の日本語文字数をカウントするという用途でのマクロです。

マクロ

Public Sub StringsCount()
Dim url As Range
Dim Http, buf As String
Dim re, mc
Set Http = CreateObject("MSXML2.XMLHTTP")
Set re = CreateObject("VBScript.RegExp")
Set url = Range("A2")
Do While (url.Value <> "")
Http.Open "GET", url.Value, False
Http.Send
With CreateObject("ADODB.Stream")
.Open
.Type = 2 'adTypeText
.Charset = "unicode"
.Writetext Http.ResponseBody
.Position = 0
.Charset = "utf-8"
buf = .ReadText()
.Close
End With
With re
.IgnoreCase = True
.Global = True
'ダブルクオーテーションをエスケープする時は""文字列""とする。
.Pattern = "<article.*?>([\s\S]*?)</article>"
Set mc = .Execute(buf)
If mc.Count <> 0 Then url.Offset(0, 1) = mc(0).SubMatches(0)
End With
Set url = url.Offset(1, 0)
Loop
Set Http = Nothing
Set re = Nothing
End Sub

説明

簡単に説明するとエクセルのA列にURLを入れます。URLのHTML内のarticleタグの中身をB列に抽出します。マクロの内容はここまでですが、エクセルのほうでC列に関数でB列の全角/半角の文字数-半角の文字数を入れておきます。関数は=LENB(B2)-LEN(B2)みたいな感じ。するとタグやスクリプトといった半角英数字が除外されて全角の日本語本文のみの文字数をカウントできます。

手作業でテキスト抜いてWordなんかでカウントすると多分1日仕事ですがマクロなら数分といった所です。