| 
    
     |  | ▼ハチ さん: 
 こんにちは。
 ハチさんありがとうございます。
 早速試しました。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
 
 
 |  |