お蔵入り

clip!clip!
Ads By Google

シートコピーのVBAでもっと早くならないか考えております。どなたか見てください

Private Sub ShtCopy1(土井シート, yr)
   Shtname1 = 土井シート.Name & yr
   
   'あれば作らない
   For Each Sht1 In Worksheets
       If Sht1.Name = Shtname1 Then Exit Sub
   Next
   
   '無ければ作る
   土井シート.Copy Before:=土井シート
   ActiveSheet.Name = Shtname1
End Sub

Private Sub ShtCopy2(井戸シート, yr)
   Shtname2 = 井戸シート.Name & yr
   
   'あれば作らない
   For Each Sht2 In Worksheets
       If Sht2.Name = Shtname2 Then Exit Sub
   Next
   
   '無ければ作る
   井戸シート.Copy Before:=井戸シート
   ActiveSheet.Name = Shtname2
End Sub

Sub シート作成()
   Set Org土井 = Worksheets("土井")
   Call ShtCopy1(Org土井, Year(Date) - 2)
   Call ShtCopy1(Org土井, Year(Date) - 1)
   Call ShtCopy1(Org土井, Year(Date))
   Call ShtCopy1(Org土井, Year(Date) + 1)
   
   Set Org井戸 = Worksheets("井戸")
   Call ShtCopy2(Org井戸, Year(Date) - 2)
   Call ShtCopy2(Org井戸, Year(Date) - 1)
   Call ShtCopy2(Org井戸, Year(Date))
   Call ShtCopy2(Org井戸, Year(Date) + 1)
   
   '不要シートの削除
   For Each Sht1 In Worksheets
       If Sht1.Name = ("土井") & (Year(Date) - 3) Then
           Application.DisplayAlerts = False
           Sht1.Delete
           Application.DisplayAlerts = True
       End If
   Next
   
   For Each Sht2 In Worksheets
       If Sht2.Name = ("井戸") & (Year(Date) - 3) Then
           Application.DisplayAlerts = False
           Sht2.Delete
           Application.DisplayAlerts = True
       End If
   Next

2008-05-18 21:05の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。

回答(1)

1.

2008-05-28 11:40:11
1.CALLを全て外す。
  プロシージャ名だけで、呼び出せるので
  外す。
   CALL文の解釈をしなくて済むので。

2.何回も出てくる文は、まとめる。
  具体的には、Year(Date) は、事前にyyyy
  などの変数に代入しておいて、
  yyyy-2,yyyy-1,yyyy,yyyy+1を使う。
   year関数の解釈をせず、変数を参照させる。

3.Application.DisplayAlerts = Trueは、外す。
  マクロが終了すれば、自動的にTrueになります。
Ads By Google

コメント

まだコメントがありません

トラックバック(2)

トラックバックURL: