• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シートを別のブックに移動させたいのですが、)

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

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

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答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/7941)
回答No.3

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

yuukoron
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答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

専門家に質問してみよう