シートを別のブックに移動させたい方法

このQ&Aのポイント
  • マクロを使用して、シートを別のブックに移動させる方法について教えてください。
  • 移動先のブック名を移動させたいシートの特定のセルに入力する方法を教えてください。
  • シートを常に移動先ブックの先頭に移動させる方法について教えてください。
回答を見る
  • ベストアンサー

シートを別のブックに移動させたいのですが、

シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

現在の現象から言えることは,次のどちらかの間違いが起こっています。 ケース1)変数「シート名」に正しい言葉が入れられていない。  特に,あなたは言葉の説明では「Y1セルに記入している」と仰有っていますが,実際のマクロはY2セルの値を変数「シート名」に入れていて,こちらで見ていても一体どっちが正解なのか判断できない間違いをしている可能性があります。 まず,今問題を起こしたselectの命令の前に msgbox シート名 という一行を追加して,selectで今エラーが起きようとしている寸前にそもそも「シート名」に何が入っているのか目で見て確認し,結果を教えてください。 確認したらすぐに回答を返答「しない」で,この下の続きの説明に戻ってください。 ケース2)変数「シート名」で指定できているシート名のシートの載っているブックが,実際には今アクティブなブックでは無い  掲示されたマクロは非常に断片的ですし,またそもそもが間違えていたので質疑に応じてちょこまか直しています。結果して,最新版であなたが実行して今回のエラーを起こした「いま現在のマクロの内容」が具体的に一体どうなっているのか,ワタシの方でさっぱり見えなくなっています。 最初のマクロに手を入れてとりあえず当初のご質問内容をクリアしたあと,新しい疑問や問題点に課題がシフトした場合,本来は当初ご相談を「解決」で閉じていただいた上で改めて「現時点の最新版のマクロ」を掲示して,「新しく今度はこんな問題が起こりました」と次のご相談投稿に移行していただくのが,こちらのような質問相談掲示板での一般的なマナーです。 少なくとも,もう少し丁寧に「今こうなっています」「そしたらここでこうなりました」と”ほうれんそう”を心がけてご相談も進めてみてください。 さて。 >よい方法を教えてください。 では,今から最善の方法を2つお話ししますので,頑張ってしっかり行ってみてください。 1点目は,今のマクロから「全ての」Selectの行とActivateの行を抹消します。 消し:Windows("GGGG.xls").Activate 消し:Worksheets(シート名).Select これまでに掲示されたマクロには含まれていませんが,「Selection」とか「Activeなんたら」がマクロにあったら,そちらも修正します。 こちらは行を削除するのではなく,次の2点目の方法に従ってマクロを書き換えます。 2点目は今のマクロの「全て」を,「どのブックの.どのシートの.…」という書きぶりに「漏れなく」直します。 修正: sub macro1r1()  Dim シート名 As String  シート名 = workbooks(正しく記入する).worksheets(正しく記入する).Range("Y2").Value  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & workbooks(正しく記入する).worksheets(正しく記入する).Range("F1").Value & ".xls"  worksbooks(正しく記入する).Sheets(シート名).Move Before:= _   Workbooks(Workbooks("GGGG.xls").Worksheets(シート名).Range("F1").Value).Worksheets(1) end sub 先ほどのように,「"GGGG.xls"」など””で囲わないといけない言葉と,変数「シート名」のように””で囲ってはいけない言葉を,よく見て間違えないように気を付けて作成してください。 マクロを修正し,よく見直して,間違い無い事が確信できたら実行して,それでもエラーが出たら先にお話ししたようにエラーが出た行で使っている変数の内容も再確認して,それでも手が尽きたときは「今現在ココまで直しましたマクロ」の全文と,その時の具体的な症状を添えて引き続きご相談を投稿してみてください。

yuukoron
質問者

お礼

まず、回答者の方のご指摘通り、質問相談掲示板のシステムをよく理解できてなくて、マナー違反をしてしまい、申し訳ありませんでした。以後気をつけます。 ケース1)の通り、Y1と、Y2の間違いでした。直すとうまくいきました。 ありがとうございました。

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

>「インデックスが有効範囲にありません」となりました このエラーが出現する意味、箇所がわからないと先へ進めても上達できませんよ。 ここでいう「インデックス」とは何だろう???、とか。 がんばりましょう。 -------------------------- 人のコーディングを追いかけるのは好きでないし、経過どうなっているか不明です。 機能的な面で再度教えてください。 同じ状況下を想定し検証しないときちんとしたアドバイスが出せません。 【状態例】 ・当月入力用のブックAがある、シート名は「当月分」 ・累積用のブックBがある、シート名は「2010.4xx」「2010.3xx」「2010.2xx」 ・ブックAのF1セルにブックBのシート名「2010.5xx」が明記してある ・ブックBのシート挿入は1番目、「2010.5xx」「2010.4xx」「2010.3xx」「2010.2xx」とする 【目的】 ・ブックAの「当月分」のマクロを実行し、 ブックBの1番目に、シート名「当月分」を「2010.5xx」として(挿入)移動、 もともとあったシートは2番目以降にシフトする 1点確認します。 →ブックBへ挿入した後の、ブックAはシートが無くなるのですか????

yuukoron
質問者

お礼

ありがとうございました。解決できました。 がんばって勉強していきたいと思います。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

変数を使い始めの頃に,大概のみんながやってしまう間違いです。 変数の名前を""で囲ってしまっては,それは変数ではなく「そういう文字列」としてしか取ってくれません。 間違い:  Worksheets("シート名").Select  ↑「シート名」という名前のシートをSelectしようとしている 正解:  Worksheets(シート名).Select  ↑シート名という名の変数に格納された2010.4YYという名前のシートをSelectする 他にも数カ所「"シート名"」がありますね。漏れなく全部直してください。

yuukoron
質問者

お礼

早速の回答ありがとうございました。 やってみました。が、「インデックスが有効範囲にありません」となりました(T T) シート名を表示させた「セルY1」は、移動させたいシートに入力してあります。 Workbook(GGGG)をアクティブにしたあと、 Worksheets(シート名).Select だけでは、移動させたいシートを選択できないということでしょうか? よい方法を教えてください。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>移動先のブック名が移動させたいシートのセルF1に入力されている という事ですから, 変更前: Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 変更後: Sheets("2010.4YY").Move Before:=Workbooks(workbooks("GGGG.xls").worksheets("2010.4YY").range("F1").value).worksheets(1) です。 つまり「どのブックの.どのシートの.どのセル番地.value」を,目的の "YYYY.xls" の部分にすっぽり当てはめるだけです。 >常にブックの先頭に 今のマクロで「左から数えて1枚目のシートのその前」に移動しなさいと命令していますから,常に先頭に移動します。

yuukoron
質問者

お礼

やってみました。できました。が、シート名は複数あるので、 2010.4YY をシート名という変数でしてみました。(シート名をセルY1に表示させる) Dim シート名 As String シート名 = Range("Y2").Value Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Worksheets("シート名").Select Sheets("シート名").Move Before:= _ Workbooks(Workbooks("GGGG.xls").Worksheets("シート名").Range("F1").Value).Worksheets(1) で、Worksheets("シート名").Select のところでうまくいかないので 「どのブックの.どのシートの.どのセル番地.value」を,目的の部分にすっぽり当てはめるだけです。」 ということから、 Worksheets("Workbooks("GGGG.xls").Worksheets("シート名")).Select としてみましたが、エラーでした。何故でしょうか? よろしくお願いします。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

移動先のブックを変数で確保すればできると思います。   Sub 移動()  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls"  Set 移動先ブック = ActiveWorkbook  Windows("GGGG.xls").Activate  Sheets("2010.4YY").Select  ActiveSheet.Move before:=移動先ブック.Sheets(1) End Sub >Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? ブックの先頭?は理解ができませんが、上記だと一番先頭のシートになります。 もしシートの最後に移動したい場合は以下のように変更すればOKです。  ActiveSheet.Move After:=移動先ブック.Sheets(移動先ブック.Worksheets.Count)  

yuukoron
質問者

お礼

ありがとうございました。 この方法でもできました。

関連するQ&A

  • エクセルVBAでブックを開きたいのですが、

    エクセルVBAでブックを開きたいのですが、 アクティブシートを別のブックに移動させたいのですが、 まず、目的のブックを開く → 移動させたいシート名を右クリック → 移動またはコピー を選択 → 移動先ブック を選択  というふうにしようと思っていますが、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\YYYY.xls" のようにファイル名を入れると開くことができました。 が、   Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\Range("F1").Value.xls" のように、アクティブシートの セルF1にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。

  • ブック間のシート移動

    EXCEL VBA初心者です。 ブックAのシートAをブックBのシートの一番左側に移動させようと思います。 以下を実行するとエラーが出ますがなぜでしょうか? エラーの原因と対策方法を教えて下さい。 Sub シート移動() Worksheets("シートA").Move _ Before:=Workbooks("ブックB.xls").Sheets(1) End Sub ブックAはブック名が毎回変わります。 ブックAはメール添付を開いたブックです。 ブックAはシートがシートAしかありません。 シートAは名前が変わりません。 マクロコードはブックBあるいは個人用マクロブックに置きます。 よろしくお願いします。

  • Book間の移動

    Excel VBA でBook2にシートを移動した後、元のBook1に自動で戻る VBAを教えたください。 Sub シートを移動する() Windows("Book1.xls").Activate Sheets(エリカ).Select Sheets(エリカ).Move After:=Workbooks("Book2").Sheets(1) このあとBook1に戻りたい! End Sub

  • Excel VBAでシートを別なBookにするには?

    Book ABC.xls の Sheet("TEST") を書式と値(数式でなく)だけコピーし別なBookとして保存したいのです。 その際、Sheets("LOGIC").Range("A1")を、マクロで1回目は2、2回目は3とし、12回目の13まで行います。Sheets("TEST")はSheets("LOGIC").Range("A1")を参照しているので、その結果として、Sheets("TEST")の値は当然12通りに変化します。 新たに自動作成される別なBookは Sheet1~Sheet12の12枚のシートをもち、それぞれがABC.xls の Sheets("TEST") の12通りのコピーとなるようにしたいのです。 このようなマクロはどう作ればいいのでしょうか? お手上げです。何卒よろしくお願いします。

  • VBAであるBOOKの「sample」というシートを別BOOKに

    VBAであるBOOKの「sample」というシートを別BOOKに 別Bookにコピーしたいのですが、 ネットを参考にして下記のようにするとエラーになります。 実行時エラー'9' 「インデックスが有効範囲にありません」 と表示されます。 どこが間違っているでしょうか? どなたか教えてください。 ---------------------------------------- Dim NewBook As Workbook Dim fName As String Set NewBook = Workbooks.Add fName = ThisWorkbook.Path & "cp.xls" NewBook.SaveAs Filename:=fName Workbooks("moto.xls").Sheets("ピッキング").Cells.Copy Workbooks(fName).Sheets("Sheet1").Paste Destination:=Cells(1, 1) '<---ここでエラー Workbooks(fName).Save ----------------------------------------

  • 別ブック間のすべてのシートのある列を比較

    こんにちは、 エクセルvba超初心者で修行中のものです。 別ブック間のすべてのシートのある列を比較し、同じ値に色を付けるというマクロを 作りたいのですが、 下記のようにシートを限定する→With Workbooks("マクロ1.xls").Sheets("Sheet1") とうまくいくのですが、それぞれのブックのすべてのシートに対して比較をしたいので With Workbooks("マクロ1.xls").worksheets と書くと コンパイルエラー、メソッドまたはデータメンバーが見つかりません と出てきてSet search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) このなかの左から二つ目のRangeの色が反転します。 vba に関する勉強不足は重々承知しておりますが、意味が理解できません。 どうすれば、シート全体を検索できるようになるのでしょうか? ぜひお力をお貸しください よろしくお願いいたします。 Sub search() Dim search1 As Range, search2 As Range, s As Range, ss As Range With Workbooks("マクロ1.xls").Sheets("Sheet1") Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) End With With Workbooks("まくろ2.xls").Sheets("Sheet1") Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp)) End With For Each s In search1 For Each ss In search2 If s.Value = ss.Value Then s.Interior.ColorIndex = 6 ss.Interior.ColorIndex = 6 End If Next ss Next s End Sub

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。

  • シートを別のブックに複数自動コピー

    初質問です。よろしくお願いします。 マクロを使って、あるブックのシート(20から50枚程度)を、別の貼り付け先のブックに自動的にコピーしようとすると、10回をすぎたあたり(必ずしも一定せず)で 「実行時エラー'1004': WorksheetクラスのCopyメソッドが失敗しました。」 というエラーと共にマクロが止まり、デバッグしようとすると 「ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート")」 のところで止まっています。 マクロの記述内容は以下の通りです。 Sheets("貼り付け元シート").Activate ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート") Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("A1").Select Windows("貼り付け元ブック.xls").Activate ・・・以下貼り付け元シートを変えつつ複数回繰り返し これができる様になれば非常にラクになるので、ぜひご教授願います。

  • VBAにて別シートに貼り付けたいのでができません

    今開いているファイル(A)内のシート(依頼)にVBAを以下の用に記述しました。 これをデスクトップにあるファイル(提出)内のシート(データ更新)に貼り付けたいのですが できません。 「インデックスが有効範囲にありません。」と表示されます。 どこが悪いか教えて下さい。 sub 取り込み( ) Sheets("依頼").Range(Cells(15, 2), Cells(30, 21)).Copy Workbooks.Open Filename:="C:\Documents and Settings\Administrator\デスクトップ \作業中\提出.xls" Sheets("データ更新").Select Range(Cells(15, 2), Cells(15,2)).Select     ActiveSheet.Paste Application.CutCopyMode = False End sub

  • エクセル bookの名称

    Sub 登録() Workbooks.Open Filename:= _ "\\buckup1\センタ\データ\連絡をください\シート.xls" Windows("入力.xls").Activate Sheets("管理").Select Sheets("管理").Copy Before:=Workbooks("シート.xls").Sheets(1) End Sub 上記はマクロの自動記録で行ったものですが、このマクロが入ってるbookを名前を変えて保存して(例えば"顧客管理"など)上記を実行すると、上記3行目のbookの名前でないのでエラーが出てきます。上記のbookを名前を変えて保存すると3行目の部分もそれに合わせて自動で変わるように(入力→顧客管理)出来ますでしょうか。

専門家に質問してみよう