|
VBA初心者です。
現在、全国保険者情報一覧というウェブページから保険者種別ごとにマクロ1でクエリデータをシートに貼り付け、マクロ2でマクロ1で貼り付けたデータの保険者番号を元に詳細情報ウェブページにアクセスし、を貼付シートを作成しそこに一時的貼り付け、必要箇所をコピして保険者番号の横にペーストしたら、今度はその下の保険者番号を元に詳細情報ウェブページにアクセスし、先ほどの貼付シートに上書きし、必要箇所をコピして保険者番号番号の横にペーストするというループマクロを組んだのですが、マクロ1はそれなりにすぐにおわりますが、マクロ2は保険者種別にもよりますが、件数が多いもので3000ぐらいあり、処理が終わるのに2時間ほどかかります。
このwebクエリマクロを早くする方法をご教授いただけないでしょうか。
実際に使用しているマクロは下記のとおりです。
注釈:URLは保険者番号を変えるだけでそれぞれの詳細情報ウェブページにアクセスできることから、セルに保険者番号のぞくURL入力し、そのセルを元にURLを組み合わせてアクセスしています。
Sub 詳細情報取込み介護保険除く()
'確認ボタン
Dim rc As Integer
rc = MsgBox("この作業は数時間を要します。(途中で止めることもできません)実行しますか?", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
MsgBox "処理を行います。「終わりました」と表示されるまで触らないで下さい"
'高速化
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'シート名の取得(SNはSheetNameの略)
Dim SN As String
SN = ActiveSheet.Name
'繰り返し準備(HNは保険者HokenjaNumberの略また回数の定義としても使用)
HN = 2
Do Until Cells(HN, 1) = ""
'URL取得(KURLはKobetsuURLの略)
Dim KURL As String
KURL = "URL;" & Sheets("保険者一覧").Cells(2, 3) & Sheets(SN).Cells(HN, 1) & Sheets("保険者一覧").Cells(2, 4)
'データ取り込み
Sheets("貼付シート").Activate
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
KURL, Destination:=Range( _
"$A$1"))
.Name = "dt01010016"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
.Delete
End With
'詳細情報の転記
Sheets(SN).Cells(HN, 4) = Sheets("貼付シート").Range("A10")
Sheets(SN).Cells(HN, 5) = Sheets("貼付シート").Range("A12")
Sheets(SN).Cells(HN, 6) = Sheets("貼付シート").Range("A14")
Sheets(SN).Activate
'項目作成
Range("D1") = "郵便番号"
Range("E1") = "住所"
Range("F1") = "電話番号"
'回数増やす
HN = HN + 1
Loop
'確認ダイアログ表示
Application.DisplayAlerts = True
'高速化停止
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "終わりました。"
Else
MsgBox "処理を中断します。"
End If
End Sub
|
|