|
こんばんは。
いつも勉強させていただいております。
いい方法があれば教えていただきたく
書かせていただきました。よろしくお願いいたします。
全データ.xls sheet名data (情報の期間は2007年4月から2008年3月)
A B C D E F G N
NO. 2007年4月 2007年5月 2007年6月 2007年7月 2007年8月 ・・・ 2008年3月
済 11 0 0 160 0 0 0
変更 11 0 0 0 150 0 0
済 13 210 250 0 0 300 0
変更 13 0 410 0 0 300 0
済 16 250 0 0 0 0 0
済 17 0 0 0 0 0 0
11.xls
sheet3
A B C D E L
2007年6月 2007年7月 2007年8月 2007年9月 2007年10月 ・・・ 2008年5月
160 0 0 0 0
sheet1
A B
番号NO. 11
13.xls
sheet3
A B C D E L
2007年4月 2007年5月 2007年6月 2007年7月 2007年8月 ・・・ 2008年3月
210 250 0 0 300 0
sheet1
A B
番号NO. 13
下記のコードは11.xlsや13.xlsの各モジュールに書いています。
シート1のB1セルの番号が全データ.xlsのB列にあり、かつA列が"済"になっている
ものを探す
↓
全データのC1:N1と各xlsのシート3のA1:L1の月があったところの下に
データを入力させる
ことをしています。
(各エクセルのシート3は始まり月が違いますが
1年分しか書きません。)
しかし、全データのエクセルがかなり大きい容量で
開くのに1分ほどかかってしまいます。
どうにか時間を短縮させるか
全データ.xlsを開かずにデータを写す・・などということは
できるのでしょうか?
Sub 参照()
Dim WS As Workbook
Dim i As Integer
Dim montharray As Variant
Dim TheNO As Long
Dim R, C As Range
Dim MR As Variant
Set WS = Workbooks.Open("C:\document and settings\ddd\my documents\4204.xls")
With Worksheets("data")
For i = 0 To 11
montharray = Array("2007年4月", "2007年5月", "2007年6月", "2007年7月", "2007年8月", "2007年9月", _
"2007年10月", "2007年11月", "2007年12月", "2008年1月", "2008年2月", "2008年3月")
.Cells(1, i + 3).NumberFormatLocal = "yyyy年m月"
Next i
End With
TheNO = ThisWorkbook.Worksheets("Sheet1").Range("B1").Value
For Each R In WS.Worksheets("data").Range("B2:B800")
If R.Value = TheNO Then
If R.Offset(, -1) = "済" Then
For Each C In WS.Worksheets("data").Range("C1:N1")
With ThisWorkbook.Worksheets("Sheet3")
MR = Application.Match((C.Value), .Range("A1:L1"), 0)
If Not IsError(MR) Then
.Cells(2, MR).Value = WS.Worksheets("data").Cells(R.Row, C.Column).Value
End If
End With
Next
End If
End If
Next
End Sub
|
|