Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7948 / 13645 ツリー ←次へ | 前へ→

【35753】最初に開いたブックを基準にコピペを繰り返させたいのですが ringotyanZ 06/3/12(日) 13:52 質問[未読]
【35754】Re:最初に開いたブックを基準にコピペを繰... かみちゃん 06/3/12(日) 14:14 発言[未読]
【35922】Re:最初に開いたブックを基準にコピペを繰... ringotyanZ 06/3/16(木) 7:02 お礼[未読]
【35756】Re:最初に開いたブックを基準にコピペを繰... Kein 06/3/12(日) 14:56 回答[未読]
【35923】Re:最初に開いたブックを基準にコピペを繰... ringotyanZ 06/3/16(木) 7:03 お礼[未読]

【35753】最初に開いたブックを基準にコピペを繰り...
質問  ringotyanZ  - 06/3/12(日) 13:52 -

引用なし
パスワード
   最初に開いたブックを基準にコピペを繰り返させたいのですが、マクロを登録すると下記の通りになってしまいます。

Windows("20060202歩み値.xls").Activateの部分を、最初に開いたブックを基準にするように置き換えたいのですが、可能でしょうか?


Sub 最後尾に歩み値追加テスト2()

  Sheets("任天堂").Select
  Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
  Selection.Copy
  Windows("大口歩み値.xls").Activate
  Sheets("任天堂").Select
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  ActiveSheet.Paste
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  
  Windows("20060202歩み値.xls").Activate
  Sheets("マクド").Select
  Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
  Application.CutCopyMode = False
  Selection.Copy
  Windows("大口歩み値.xls").Activate
  Sheets("マクド").Select
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  ActiveSheet.Paste
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  
  Windows("20060202歩み値.xls").Activate
  Sheets("ギャガ").Select
  Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
  Application.CutCopyMode = False
  Selection.Copy
  Windows("大口歩み値.xls").Activate
  Sheets("ギャガ").Select
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  ActiveSheet.Paste
  ActiveCell.SpecialCells(xlLastCell).Select
  ActiveCell.Offset(1, -4).Range("A1").Select
  
End Sub


この場合最初に開いたブックは、20060202歩み値.xlsになるのですが、日々新しいデータを追加して行きたいので、ブック名で指定してしまうと、他のブックを開いたときに機能しなくなってしまうのです。

なにか良い方法があったら教えて下さい。よろしくお願いします。

【35754】Re:最初に開いたブックを基準にコピペを...
発言  かみちゃん E-MAIL  - 06/3/12(日) 14:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Windows("20060202歩み値.xls").Activateの部分を、最初に開いたブックを基準にするように置き換えたい

「最初に開いたブック」とはどのように指定するのですか?
開くコードがないのですが、開いているブックなのですか?

いずれにしても、
Sub test()
 Dim WB As Workbook
 Set WB = ActiveWorkbook
 '〜処理〜
 MsgBox "最初のアクティブブックは" & WB.Name
End Sub
のようなことでできるような幹事もするのですが・・・

【35756】Re:最初に開いたブックを基準にコピペを...
回答  Kein  - 06/3/12(日) 14:56 -

引用なし
パスワード
   この場合、たぶん
>最初に開いたブック
というのは「マクロを実行しているブック」ではなく「その次に開いたブック」という
意味になるのでしょうか ? でないと
>他のブックを開いたとき
と矛盾してしまいますよね。つまりこのマクロを入れているのは ○×.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 と置き換えることも出来ます。普通はそのように書きます。

【35922】Re:最初に開いたブックを基準にコピペを...
お礼  ringotyanZ  - 06/3/16(木) 7:02 -

引用なし
パスワード
   かみちゃん、いつもありがとうございます!

紹介していただいた方法試してみます。

仕事の関係で間が開いてしまいそうなのですが、また質問させて下さい。

よろしくお願いします。

【35923】Re:最初に開いたブックを基準にコピペを...
お礼  ringotyanZ  - 06/3/16(木) 7:03 -

引用なし
パスワード
   Kein さん、ありがとうございます。

紹介していただいた方法試してみます。

仕事の関係で間が開いてしまいそうなのですが、また質問させて下さい。

よろしくお願いします。

7948 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free