プロが教えるわが家の防犯対策術!

こんにちは。
いろいろと試してみたのですが、どうしてもうまく行かないので教えてください。

『ブックA』の、2枚目以降のシートすべてを
『ブックB』の、末尾に移動したいと思っています。

どうか、よろしくお願いします。
今後の勉強のためにも、簡単なコードの説明などつけて頂けると
なおうれしいです^^;

A 回答 (4件)

こんにちは。


ブックA、ブックBを開いておく事が前提です。

Sub sample() 'ブックA...などは実際のBook名に修正が必要
  Dim wb As Workbook 'Workbook型変数準備
  Dim n As Long 'シート数用変数
  Dim i As Long 'Loopカウンタ用

  Set wb = Workbooks("ブックB.xls") 'ブックBを変数に格納
  'WithやFor...NextステートメントはHelpで調べましょう
  With Workbooks("ブックA.xls")
    'シート数カウント
    n = .Sheets.Count
    'シート名格納用の変数
    ReDim v(2 To n)
    '2枚目からn枚目までのシートをLoop
    For i = 2 To n
      '変数にシート名を格納
      v(i) = .Sheets(i).Name
    Next i
    '格納したシート名のSheetsをwbに移動
    .Sheets(v).Move after:=wb.Sheets(wb.Sheets.Count)
  End With
  'SetしたObject型変数の後始末
  Set wb = Nothing
End Sub
    • good
    • 2
この回答へのお礼

さっそくの回答ありがとうございます!!
やりたいこと、まさにそのものです><
みなさん、本当にすごいですね~~~
私も、このコードを、ただ貼り付けるだけでなく
自分のものに出来るように、頑張って勉強します!
またどうしても解らないことが出てきたら、ぜひ教えてください。
今回は、このコードを使用させていただきます。
本当にありがとうございました。

お礼日時:2007/02/14 15:30

こんばんは。



以下は、VBAの勉強のためにはならないと思いますが、私なりの考え方で作ってみました。
これは、人間が手作業ですることを、VBAに置き換えてみました。つまり、1つずつシートを選択するのではなく、複数選択して、まとめて移動します。

なお、厳密に、Worksheet と Sheet は、指定するものが違ってきます。グラフシートなどがあると、それは、ワークシートではなくなってしまいますので、今回は、全て、Sheet という扱いにしました。

これは、以下の二つのブックとは関係のないブックに登録して、移動させることを目的にしたものです。標準モジュールが良いと思います。

'---------------------------------------------

Sub FileSheetCopy()
 Dim Wb1 As Workbook
 Dim Wb2 As Workbook
 Dim i As Integer
 
 'ユーザー設定
 Const CBK1 As String = "BOOK_A.XLS" '移動元
 Const CBK2 As String = "BOOK_B.XLS" '移動先

 'エラートラップ
 On Error GoTo ErrHandler 
 Set Wb1 = Workbooks(CBK1)
 Set Wb2 = Workbooks(CBK2)
 
 If Wb1.Sheets.Count = 1 Then MsgBox "移動元ブックのシートがひとつしかありません", vbInformation: Exit Sub
 Wb1.Activate
 'シートをまとめて選択
 For i = 2 To Wb1.Sheets.Count
  If i = 2 Then
   Wb1.Sheets(i).Select
  Else
   Wb1.Sheets(i).Select False
  End If
 Next i
 '選択したシートを移動
 Wb1.Windows(1).SelectedSheets.Move after:=Wb2.Sheets(Wb2.Sheets.Count)

'エラー表示
ErrHandler:
 If Err.Number > 0 Then
  If Err.Number = 9 Then
   MsgBox Err.Number & ": おそらくブックが開いていないと思います。", vbInformation
  Else
   MsgBox Err.Number & " : " & Err.Description
  End If
 End If
 
 Set Wb1 = Nothing: Set Wb2 = Nothing
End Sub
    • good
    • 1
この回答へのお礼

さっそくの回答ありがとうございます!!
すごく丁寧なコードで感動しました。
メッセージボックスまでつけて頂いて!!!
また、WorkSheetとSheetの違いなど、なるほどーーー!!!です!
本当にありがとうございます!!
頑張って、このコードを自力で書けるように解読します!!!
本当にありがとうございました。
またどうしても解らないことがでてきたら、ぜひ教えてください!

お礼日時:2007/02/14 15:35

No.1です。


コードを貼り付けるときに、
別な方を貼り付けたようです。
あまり変わらないけど、訂正します。

Sub Sample()
Dim wb1 As Workbook, wb2 As Workbook
Dim i As Integer

Set wb1 = Workbooks("ブックA.xls")
Set wb2 = Workbooks("ブックB.xls")

For i = wb1.Worksheets.Count To 2 Step -1
wb1.Worksheets(i).Move after:=wb2.Worksheets(wb2.Worksheets.Count)
Next

Set wb1 = Nothing
Set wb2 = Nothing
End Sub
    • good
    • 0
この回答へのお礼

再回答ありがとうございます!!
どこが違うのか、ぱっと見ではわかりません^^;
勉強させていただきます!!!
本当にありがとうございました。
またぜひよろしくお願いします!!

お礼日時:2007/02/14 15:31

こんにちは。



ブックAのワークシートを後ろから順に
移動させるのがポイントでしょうか。
(前から移動させるとループが進んだ時に、
i番目のシートがなくなっているから)
後は特に難しいところは無いと思います。

Sub Sample()
Dim wb1 As Workbook, wb2 As Workbook
Dim i As Integer

Set wb1 = Workbooks("ブックA.xls")
Set wb2 = Workbooks("ブックB.xls")

For i = wb1.Worksheets.Count To 2 Step -1
Set sh = wb1.Worksheets(i)
sh.Move after:=wb2.Worksheets(wb2.Worksheets.Count)
Next
Set wb1 = Nothing
Set wb2 = Nothing
End Sub

この回答への補足

さっそくの回答、ありがとうございます!!
本当に勉強になります。
このコード、ただ貼り付けるだけでなく
読み取る勉強をして、自分のものに出来るように頑張りますね!!
またどうしても解らないことが出てきたら、ぜひ教えてください。
本当にありがとうございました。

補足日時:2007/02/14 15:25
    • good
    • 0
この回答へのお礼

まちがえて、補足にお礼を書いてしまいまして^^;
ごめんなさい。

お礼日時:2007/02/14 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!