アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

マクロで作成するとこうなりました。

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 というふうに毎月増えていく予定です。

初心者です。よろしくお願いします。

A 回答 (5件)

現在の現象から言えることは,次のどちらかの間違いが起こっています。



ケース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"」など””で囲わないといけない言葉と,変数「シート名」のように””で囲ってはいけない言葉を,よく見て間違えないように気を付けて作成してください。

マクロを修正し,よく見直して,間違い無い事が確信できたら実行して,それでもエラーが出たら先にお話ししたようにエラーが出た行で使っている変数の内容も再確認して,それでも手が尽きたときは「今現在ココまで直しましたマクロ」の全文と,その時の具体的な症状を添えて引き続きご相談を投稿してみてください。
    • good
    • 0
この回答へのお礼

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

ケース1)の通り、Y1と、Y2の間違いでした。直すとうまくいきました。
ありがとうございました。

お礼日時:2010/05/18 10:10

>「インデックスが有効範囲にありません」となりました


このエラーが出現する意味、箇所がわからないと先へ進めても上達できませんよ。
ここでいう「インデックス」とは何だろう???、とか。
がんばりましょう。

--------------------------
人のコーディングを追いかけるのは好きでないし、経過どうなっているか不明です。
機能的な面で再度教えてください。
同じ状況下を想定し検証しないときちんとしたアドバイスが出せません。

【状態例】
・当月入力用のブック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はシートが無くなるのですか????
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/18 10:19

変数を使い始めの頃に,大概のみんながやってしまう間違いです。


変数の名前を""で囲ってしまっては,それは変数ではなく「そういう文字列」としてしか取ってくれません。

間違い:
 Worksheets("シート名").Select
 ↑「シート名」という名前のシートをSelectしようとしている

正解:
 Worksheets(シート名).Select
 ↑シート名という名の変数に格納された2010.4YYという名前のシートをSelectする

他にも数カ所「"シート名"」がありますね。漏れなく全部直してください。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
やってみました。が、「インデックスが有効範囲にありません」となりました(T T)

シート名を表示させた「セルY1」は、移動させたいシートに入力してあります。
Workbook(GGGG)をアクティブにしたあと、
Worksheets(シート名).Select
だけでは、移動させたいシートを選択できないということでしょうか?
よい方法を教えてください。

お礼日時:2010/05/17 17:35

>移動先のブック名が移動させたいシートのセル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枚目のシートのその前」に移動しなさいと命令していますから,常に先頭に移動します。
    • good
    • 0
この回答へのお礼

やってみました。できました。が、シート名は複数あるので、
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

としてみましたが、エラーでした。何故でしょうか?
よろしくお願いします。

お礼日時:2010/05/17 16:00

移動先のブックを変数で確保すればできると思います。


 
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)
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/18 10:17

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