今、このように白と黒の星が3つ並んだ表が、あるWebにあります。
パターンはこの4種類です。
(あくまでこれはサンプルで、実際の表は10行あります。4種類がランダムに10行並んでいます。)
これをExcelに10行分取得し、白の星は「☆」に、黒の星は「★」として変換したいです。
取得から☆、★の変換までVBAで実施できれば理想です。
やり方が思いつかないため質問いたします。
どうぞよろしくお願い致します。
エラー処理も施していない、芸の無いものですが。
Sheet1のセルA1からA2,A3と下方へ、URLのリストを入力していただくと
取得・変換結果が各シートに格納されます。
Option Explicit Option Base 0 Sub Main() Const strShtUrlList As String = "Sheet1" Const strShtPrf As String = "Result" Dim lngCntR As Long Dim strURL As String Dim strHTMLsrc As String Sheets(strShtUrlList).Activate For lngCntR = 1 To Columns(1).SpecialCells(xlCellTypeLastCell).Row strURL = Cells(lngCntR, 1).Value If Left(strURL, 7) = "http://" Then strHTMLsrc = GetHTMLSource(strURL) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = strShtPrf & Worksheets.Count Cells(1, 1).Value = strURL ConvStarChart strHTMLsrc End If Next End Sub Function GetHTMLSource(ByVal strURL As String) As String Dim objXmlHttp As Object Set objXmlHttp = CreateObject("MSXML2.XMLHTTP") objXmlHttp.Open "GET", strURL, False objXmlHttp.send (Null) GetHTMLSource = objXmlHttp.ResponseText Set objXmlHttp = Nothing End Function Sub ConvStarChart(ByVal strHTMLsrc As String) Dim objRegExp As Object Dim varMatch Dim lngCntM As Long Dim strStar(3) As String strStar(1) = "☆☆☆" strStar(2) = "★☆☆" strStar(3) = "★★☆" strStar(0) = "★★★" Set objRegExp = CreateObject("VBScript.RegExp") With objRegExp .IgnoreCase = True .Global = False Do .Pattern = "<td class=""col13Td"".*?>" Set varMatch = .Execute(strHTMLsrc) If varMatch.Count = 0 Then Exit Do End If With varMatch(0) strHTMLsrc = Mid(strHTMLsrc, .FirstIndex + .Length + 1) End With .Pattern = "</td>" Set varMatch = .Execute(strHTMLsrc) With varMatch(0) Cells(lngCntM + 2, 1).Value = strStar(InStr(Left(strHTMLsrc, varMatch(0).FirstIndex), "<font color=""dcdcdc"">")) strHTMLsrc = Mid(strHTMLsrc, .FirstIndex + .Length + 1) End With lngCntM = lngCntM + 1 Loop End With End Sub
あれっ!?、データをExcelに読み込むものだと思っていたのですが
HTMLソースを置換することが目的なのですか!?
---
星の数がずれるミスは「Cells(lngCntM + 2, 1).Value =…」で
始まる行に誤りがありましたので訂正いたしました。
このマクロを試して下さい。
変換後のHTMLファイルはローカルディスクに保存します。
hogeConvの第1引数に変換対象のURLを、第2引数に変換後のフォルダ名+ファイル名をセットしてください。
白い☆は、HTMLタグが
<font color="dcdcdc">★★★</font>
になっているかどうかで判断しています。
これ以外のHTMLタグの場合は認識できないので、お知らせ下さい。
★の数は任意個数に対応しています。
Option Explicit 'メインプログラム Sub main() Call hogeConv("http://mik39.dousetsu.com/hatena_test.htm", "C:/test/test.html") End Sub 'Web読み込み・変換処理 Sub hogeConv(url As String, outfname As String) 'Web読み込み処理 Dim oHttp As Object Dim str As String On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If (Err.Number <> 0) Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") End If On Error GoTo 0 If oHttp Is Nothing Then MsgBox "内部エラー", vbCritical Exit Sub End If With oHttp .Open "GET", url, False .Send str = StrConv(.responseBody, vbUnicode) '文字コード変換 End With Set oHttp = Nothing '変換処理 Dim re, mc, m As Object Dim s2 As String Set re = CreateObject("VBScript.RegExp") re.Pattern = "<font color=""dcdcdc"">([★]+)</font>" '検索パターン re.Global = True Set mc = re.Execute(str) For Each m In mc s2 = Replace(m.Value, "★", "☆") str = Replace(str, m.Value, s2) Next '書き出し Open outfname For Output As #1 Print #1, str Close #1 End Sub
会員制サイトは、IDとパスワードで認証していると思うので、回答のようなマクロでは読むことができないと思います。どのような認証方式を使っているのかお知らせいただければ、対応できるかもしれません。
それと回答にも書きましたが、☆印の出現パターン(HTMLタグのパターン)が一定していないと、検索・置換ができません。
会員制サイトなのですが、IDとPWを入力してログイン状態を保っているため、この状況下では私にとっては通常のWebと同じような状態になっているかなぁとは思います。
htmlの記述 → Excelでの読み込み
<font color="dcdcdc">★★★</font> → ☆☆☆
★<font color="dcdcdc">★★</font> → ★☆☆
★★<font color="dcdcdc">★</font> → ★★☆
★★★ → ★★★
こんな法則で変換できれば上手くいきそうです。(私にその技術はありませんが^^)
いろいろありがとうございます!
エラー処理も施していない、芸の無いものですが。
Sheet1のセルA1からA2,A3と下方へ、URLのリストを入力していただくと
取得・変換結果が各シートに格納されます。
Option Explicit Option Base 0 Sub Main() Const strShtUrlList As String = "Sheet1" Const strShtPrf As String = "Result" Dim lngCntR As Long Dim strURL As String Dim strHTMLsrc As String Sheets(strShtUrlList).Activate For lngCntR = 1 To Columns(1).SpecialCells(xlCellTypeLastCell).Row strURL = Cells(lngCntR, 1).Value If Left(strURL, 7) = "http://" Then strHTMLsrc = GetHTMLSource(strURL) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = strShtPrf & Worksheets.Count Cells(1, 1).Value = strURL ConvStarChart strHTMLsrc End If Next End Sub Function GetHTMLSource(ByVal strURL As String) As String Dim objXmlHttp As Object Set objXmlHttp = CreateObject("MSXML2.XMLHTTP") objXmlHttp.Open "GET", strURL, False objXmlHttp.send (Null) GetHTMLSource = objXmlHttp.ResponseText Set objXmlHttp = Nothing End Function Sub ConvStarChart(ByVal strHTMLsrc As String) Dim objRegExp As Object Dim varMatch Dim lngCntM As Long Dim strStar(3) As String strStar(1) = "☆☆☆" strStar(2) = "★☆☆" strStar(3) = "★★☆" strStar(0) = "★★★" Set objRegExp = CreateObject("VBScript.RegExp") With objRegExp .IgnoreCase = True .Global = False Do .Pattern = "<td class=""col13Td"".*?>" Set varMatch = .Execute(strHTMLsrc) If varMatch.Count = 0 Then Exit Do End If With varMatch(0) strHTMLsrc = Mid(strHTMLsrc, .FirstIndex + .Length + 1) End With .Pattern = "</td>" Set varMatch = .Execute(strHTMLsrc) With varMatch(0) Cells(lngCntM + 2, 1).Value = strStar(InStr(Left(strHTMLsrc, varMatch(0).FirstIndex), "<font color=""dcdcdc"">")) strHTMLsrc = Mid(strHTMLsrc, .FirstIndex + .Length + 1) End With lngCntM = lngCntM + 1 Loop End With End Sub
あれっ!?、データをExcelに読み込むものだと思っていたのですが
HTMLソースを置換することが目的なのですか!?
---
星の数がずれるミスは「Cells(lngCntM + 2, 1).Value =…」で
始まる行に誤りがありましたので訂正いたしました。
メール拝領いたしました。暫くお待ち下さい。
お返事お送りいたしました。動作確認宜しくお願いいたします。
メール拝領いたしました。暫くお待ち下さい。
2012/11/24 17:56:43お返事お送りいたしました。動作確認宜しくお願いいたします。
2012/11/24 20:07:00