| 
    
     |  | この場合、たぶん >最初に開いたブック
 というのは「マクロを実行しているブック」ではなく「その次に開いたブック」という
 意味になるのでしょうか ? でないと
 >他のブックを開いたとき
 と矛盾してしまいますよね。つまりこのマクロを入れているのは ○×.xls であり、
 マクロを実行する前に日々違うブック(20060202歩み値.xls, 20060203歩み値.xls,
 20060204歩み値.xls・・・)を開く、ということになるわけでしょ ?
 ならばそれらのデータブックを、手作業で開くことを止めて
 
 Sub Test()
 Dim MyF As String
 Dim MyB As Workbook
 
 ChDir "C:\My Documents\Data" 'データブックの保存先フォルダー
 With Application
 MyF = .GetOpenFilename("エクセルブック(*.xls),*.xls")
 If MyF = "False" Then Exit Sub
 .ScreenUpdating = False
 End With
 Set MyB = Workbooks.Open(MyF)
 
 というように「実行したマクロの冒頭で目的のブックを開くダイアログを出す」
 と言う形にするのが定石です。そうすれば選んだブックを変数(MyB)に入れて確定し、
 自在に操作できます。ただし、ブックを開く操作もマクロでやるわけだから、そこから
 ユーザーが任意のシートや任意のセル範囲を選ぶ、ということは出来なくなりますから、必ずシート名やセル範囲を特定して、コピー等をするコードにしなくてはなりません。
 従って Selection とか ActiveCell などの曖昧な語句は使えなくなります。
 例えば上記のコードに続けて
 
 MyB.Sheets("任天堂").Range("A:D").Copy Workbooks("大口歩み値.xls") _
 Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1)
 
 などとすることになります。当然ながら「ダイアログから任意に選んだどのブック
 においても」"任天堂" という名前のシートがなければエラーになります。あと、
 貼り付け先の "大口歩み値.xls" が開かれていて、そちらにも "Sheet1" が
 存在しているという前提になります。 もしそうした前提条件を満たすのが困難なら、
 逆にそのような処理はマクロ向きでは無い、と言えるでしょう。
 ちなみにマクロを入れて実行するブックが、Workbooks("大口歩み値.xls") であれば
 それは ThisWorkbook と置き換えることも出来ます。普通はそのように書きます。
 
 |  |