1262826409 エクセルのVBAでお願いします。バージョンは2002です。

添付画像のように、期日を選択して一番下のVBAを動かすと〔ひな型〕というシートが選択したセル数(ここでは17個〕だけ自動生成されます。しかし,バージョン2007では、うまく動いてくれません。
特に、ActiveSheet.Nameによりシート名が17個選ばれているはずが別のシートの文字列になってしまうし、17個自動生成されるところ2個のみのシートしか作られません。
どのように直したらいいのでしょうか?

Sub ひな型コピー()

For Each 処理セル In Selection

On Error Resume Next
Sheets("ひな型").Copy after:=Sheets(Worksheets.Count)
ActiveSheet.Name = 処理セル.Value

Next 処理セル

End Sub

回答の条件
  • 1人2回まで
  • 登録:2010/01/07 10:06:50
  • 終了:2010/01/14 10:10:02

回答(2件)

id:jccrh1 No.1

jccrh1回答回数111ベストアンサー獲得回数192010/01/07 17:16:17

ポイント35pt

anglar様

 

次の個所でエラーになると思います。

ただ、2002も2007も同様の動きになる(エラー)と思います。

 ActiveSheet.Name = 処理セル.Value

シート名には特殊文字に"/"は使えないのですが

処理セル.Valueは"2010/04/01"なのが原因です。

※セルの内容が文字列なのか日付なのか分かりませんが、日付としたら上記の状況になります。

 

例えば次のように訂正すれば動作すると思います。

 ActiveSheet.Name = Format(処理セル.Value, "M月DD日")

>17個選ばれているはずが別のシートの文字列…2個のみのシートしか作られません。

理解ができません。シートは「ひな型 (2)」「ひな型 (3)」…と作成されると思いますが?

id:anglar

うーん。ご指摘の通り、ActiveSheet.Name = 処理セル.Valueがエラーの原因です。しかし、今のところ、できません。処理セルにエラーを示す▼マークが出ているのがまず、だめなのでしょうね。これを消すことにまず、取り組みたいと思います。

>17個選ばれているはずが別のシートの文字列…2個のみのシートしか作られません。

理解ができません。→現実的にそうなので・・・<(_ _)>

2010/01/08 19:21:22
id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422010/01/09 23:53:13

ポイント35pt

Excel 2007を使ったことが無いので確定的なことはわかりませんが、「別のシートの文字列になってしまう」「2個のみのシートしか作られません」という状況から推測すると、Excel 2007ではシートコピーを行った後にSelectionの参照範囲が別のシートに(予想としては、コピー後のシートの現在の選択範囲に)変わってしまっているのではないかと思います。


というわけで、元のSelectionが指し示すシート、範囲を確実に参照できればよいのではないでしょうか?

Sub ひな型コピー()

    Set 処理範囲 = Selection.Worksheet.Range(Selection.Address)
    For Each 処理セル In 処理範囲
    
        On Error Resume Next
        Sheets("ひな型").Copy after:=Sheets(Worksheets.Count)
        ActiveSheet.Name = 処理セル.Value
    
    Next 処理セル
    
End Sub

とりあえずExcel2003ではこのコードでも動作します。

id:anglar

ありがとうございます。

>予想としては、コピー後のシートの現在の選択範囲に)変わってしまっているのではないか

→何となくそうかな?と思って期待しましたが、同じ結果でした。なお、添付画像は日付&曜日のセルを選択して、シート名がその名前になるようにしています。何月と何日と何曜日という3つのセルをconcatenateでくっつけているんですが、この部分がver2002ではエラーになっていなくて、ver2007ではエラーになっているのも、原因の一つなのかなと思っています。が、できません。m(_ _)m

2010/01/11 21:11:47
  • id:HALSPECIAL
    HALSPECIAL 2010/01/07 10:33:30
    On Error Resume Next
    をコメントにするとか、取ってしまえば
    エラー内容を知ることができるのでは?
  • id:SALINGER
    私の環境では2003でも2007でも同じように動作します。
    ということは、ここに書かれていないことが原因となっていると思われます。
    例えばコードで省略した部分とか。
    ひな型シートは非表示だったとか。
    2007のVBAは非表示のシートをコピーするときに挙動が違うので、
    そのせいかもしれませんし。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません