Excel VBA質問箱 IV

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

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


45959 / 76732 ←次へ | 前へ→

【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 と置き換えることも出来ます。普通はそのように書きます。

2 hits

【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 お礼

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