|
▼ハチ さん:
こんにちは。
ハチさんありがとうございます。
早速試しました。Sample2のほうが少し、早いような気がしました。
同じような方法で作り直してみようとおもいます。
リンク元の必要なデータを自ブックにもってくれば少し改善されるということですよね?
足りない頭で考えてみたんですが、
ブックを開くときに、リンク元の必要なデータをコピーして貼り付けて
それを参照するようにしてみようと思います。
他にいい方法あれば、アドバイスお願いします。
>▼菜実 さん:
>
>>Vlookupを使用しているのは、各ブックで1列だけです。
>>他は、リンク元の値を表示するのに単純な数式入れてます。
>
>何度も同じ値を参照するのであれば、
>Book間のリンクは最小限にして、
>自Bookにもってきた値を参照するようにすると改善されると思います。
>
>以前に書いたサンプルがありましたので、
>参考までに載せときます。(Book間VLOOKUPを改善したものです)
>
>Sample1.xls, Sample2.xls, data.xlsの3つのBookが作成されます。
>Sample1.xls と Sample2.xls の開く速度の違いを確認してください。
>
>Option Explicit
>
>Sub Sample_VLOOKUP()
> Dim Wb(2) As Workbook
> Dim i As Integer
> Dim myPath As String
>
> myPath = ThisWorkbook.Path
>
> 'data.xls
> Set Wb(0) = Workbooks.Add(xlWBATWorksheet)
> With Wb(0)
> .Worksheets(1).Name = "data"
> With .Worksheets("data")
> .Range("A1:A1000").Formula = "=ROW()"
> .Range("B1:J1000").Formula = _
> "=""data"" & ROW() & ""-"" & COLUMN()"
> .UsedRange.Value = .UsedRange.Value
> End With
> .SaveAs myPath & "\data.xls"
> End With
>
> 'Sample1.xls
> Set Wb(1) = Workbooks.Add(xlWBATWorksheet)
> With Wb(1)
> .Worksheets(1).Name = "main"
> With .Worksheets("main")
> .Range("A1:A1000").Formula = "=ROW()"
> .Range("A1:A1000").Value = .Range("A1:A1000").Value
> .Range("B1:J1000").Formula = _
> "=VLOOKUP($A1,'[data.xls]data'!$A$1:$J$1000,COLUMN(),0)"
> End With
> Wb(1).SaveAs myPath & "\Sample1.xls"
> End With
>
> 'Sample2.xls
> Set Wb(2) = Workbooks.Add(xlWBATWorksheet)
> With Wb(2)
> .Worksheets.Add Before:=.Worksheets(1)
> .Worksheets(2).Name = "tmp"
> With .Worksheets("tmp")
> .Range("A1:J1000").Formula = "='[data.xls]data'!A1"
> End With
>
> .Worksheets(1).Name = "main"
> With .Worksheets("main")
> .Range("A1:A1000").Formula = "=ROW()"
> .Range("A1:A1000").Value = .Range("A1:A1000").Value
> .Range("B1:J1000").Formula = _
> "=VLOOKUP($A1,tmp!$A$1:$J$1000,COLUMN(),0)"
> End With
> Wb(2).SaveAs myPath & "\Sample2.xls"
> End With
>
> Application.AskToUpdateLinks = False
>
> For i = 0 To 2
> Wb(i).Close
> Set Wb(i) = Nothing
> Next
>End Sub
|
|