シートを別のブックに移動させたいのですが、
マクロで作成するとこうなりました。
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 というふうに毎月増えていく予定です。
初心者です。よろしくお願いします。
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"」など””で囲わないといけない言葉と,変数「シート名」のように””で囲ってはいけない言葉を,よく見て間違えないように気を付けて作成してください。
マクロを修正し,よく見直して,間違い無い事が確信できたら実行して,それでもエラーが出たら先にお話ししたようにエラーが出た行で使っている変数の内容も再確認して,それでも手が尽きたときは「今現在ココまで直しましたマクロ」の全文と,その時の具体的な症状を添えて引き続きご相談を投稿してみてください。
まず、回答者の方のご指摘通り、質問相談掲示板のシステムをよく理解できてなくて、マナー違反をしてしまい、申し訳ありませんでした。以後気をつけます。
ケース1)の通り、Y1と、Y2の間違いでした。直すとうまくいきました。
ありがとうございました。
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はシートが無くなるのですか????
No.3
- 回答日時:
変数を使い始めの頃に,大概のみんながやってしまう間違いです。
変数の名前を""で囲ってしまっては,それは変数ではなく「そういう文字列」としてしか取ってくれません。
間違い:
Worksheets("シート名").Select
↑「シート名」という名前のシートをSelectしようとしている
正解:
Worksheets(シート名).Select
↑シート名という名の変数に格納された2010.4YYという名前のシートをSelectする
他にも数カ所「"シート名"」がありますね。漏れなく全部直してください。
早速の回答ありがとうございました。
やってみました。が、「インデックスが有効範囲にありません」となりました(T T)
シート名を表示させた「セルY1」は、移動させたいシートに入力してあります。
Workbook(GGGG)をアクティブにしたあと、
Worksheets(シート名).Select
だけでは、移動させたいシートを選択できないということでしょうか?
よい方法を教えてください。
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枚目のシートのその前」に移動しなさいと命令していますから,常に先頭に移動します。
やってみました。できました。が、シート名は複数あるので、
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
としてみましたが、エラーでした。何故でしょうか?
よろしくお願いします。
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)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
複数ファイルから特定シートの...
-
エクセルを共有するとPCによっ...
-
フォルダ内の複数ファイルから...
-
指定ファィルの指定シートをシ...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
エクセルの関数について教えて...
-
エクセルで機能が使えない
-
複数のブックをひとつのブック...
-
エクセル2016です。「ブッ...
-
Excelで複数ブックの同一セルに...
-
複数のExcelブックのシート1の...
-
外部ブック参照が#REF!になって...
-
Excel起動時に特定のワークシー...
-
複数のセルをコピーし、別シー...
-
Excel VBAでブックを閉じる時、...
-
【ExcelVBA】シートをそれぞれ...
-
Excel(2010)のフィルターが保...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報