|
>ThisWorkbook.Names.Count
というのは、[名前の定義]の個数です。
15171個は多いですね。
Webクエリでデータを取得した後、クエリの定義はどうされるのでしょう?
一度設定して、後は更新ですか?
それとも Cells(lastrow, 2) という指定から推測すると、
毎回、ご提示のコードでWebクエリを実行されているのですか?
『もし、そうであれば、』必要なものはデータのみなので、
データ取得直後にWebクエリ定義を削除するようにしてはどうでしょう。
また、クエリはクエリ定義と名前定義を行いますから、それも削除する必要があります。
具体的には
> .Refresh BackgroundQuery:=False
.Parent.Names(.Name).Delete
.Delete
> End With
>End Sub
この2行を追加します。
また、今まで溜まった[名前定義]を削除したほうが良いでしょう。
(他に、必要な[名前定義]がなければの話ですが)
Sub try()
Dim n As Name
With ActiveWorkbook
For Each n In .Names
n.Delete
Next
MsgBox .Names.Count
End With
End Sub
※該当BookをActiveにして実行してください。
※念の為バックアップをとっておいてくださいね。
>IEオブジェクトを使う方法
は以前書いたサンプルがあったので載せておきますね。
Sub sample()
Const READYSTATE_COMPLETE As Long = 4
Const sCHK As String = "日付始値高値"
Dim sURL(0 To 9) As String
Dim x As Object
Dim i As Long
Dim j As Long
Dim n As Long
'httpは半角で。
sURL(0) = "http://table.yahoo.co.jp/t?"
sURL(1) = "c=2007"
sURL(2) = "a=11"
sURL(3) = "b=1"
sURL(4) = "f=2007"
sURL(5) = "d=11"
sURL(6) = "e=30"
sURL(7) = "g=d"
sURL(8) = "s=6758"
With CreateObject("InternetExplorer.Application")
.Visible = True
.navigate Join(sURL, "&")
While .busy Or (.readyState <> READYSTATE_COMPLETE)
DoEvents
Wend
For Each x In .document.getElementsByTagName("TABLE")
If Left(x.innertext, 6) Like sCHK Then
If x.Rows(0).Cells.Length = 7 Then Exit For
End If
Next x
If Not x Is Nothing Then
n = x.Rows.Length
ReDim v(n - 1, 6)
For i = 0 To n - 1
For j = 0 To 6
v(i, j) = x.Rows(i).Cells(j).innertext
Next j
Next i
Set x = Nothing
Sheets.Add
Range("A1:G1").Resize(n).Value = v
End If
.Quit
End With
MsgBox "finish"
End Sub
("TABLE"名が取れたらもっと簡単になるのかもしれません。
その辺りはよくわかりませんでした)
>CPUの稼働率が100%
あと、シート上にグラフを配置して、その上に[図のコピー]で作成したShapeを使ったりはしていませんか?
|
|