人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの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

1262826409
●拡大する

●質問者: anglar
●カテゴリ:コンピュータ
✍キーワード:name NeXT ON sub VBA
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● jccrh1
●35ポイント

anglar様

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

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

 ActiveSheet.Name = 処理セル.Value

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

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

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

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

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

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

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

◎質問者からの返答

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

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

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


2 ● ardarim
●35ポイント

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ではこのコードでも動作します。

◎質問者からの返答

ありがとうございます。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ