- ベストアンサー
マクロ一覧からシートを作成する方法
- マクロを使用して一覧から複数列に記載されたシート名を参照し、次々と新しいシートを挿入する方法について教えてください。
- シート名が一列に記載されている場合とは異なり、複数列にシート名が記載されている場合についてのマクロ記述についてもお教えいただけますか。
- また、マクロの実行中にエラーが発生した場合のエラーハンドリング方法についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sub macro2() dim h as range dim pos as long on error goto errhandle pos = worksheets("作業名一覧").index for each h in worksheets("作業名一覧").range("B2").currentregion if h <> "" then pos = worksheets(h.value).index end if next exit sub errhandle: worksheets.add after:=worksheets(pos) activesheet.name = h.value cells.columnwidth = 1 cells.rowheight = 15 resume end sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
sub macro1() dim h as range on error resume next for each h in worksheets("作業名一覧").range("B2").currentregion if h <> "" then worksheets.add after:=worksheets(worksheets.count) with activesheet .name = h.value .cells.columnwidth = 1 .cells.rowheight = 15 end with end if next end sub
お礼
範囲をcurrentregionで指定するだけでよかったんですね。 思いもつきませんでした。途中で空欄があっても、次々とシートが挿入されて完璧でした。 hのシートが有るか無いか確認しながらやる事を考え、下記のマクロを記述しましたが、途中空欄があった場合、エラーが発生してしまいます。 Sub シート挿入() Dim h As Range Dim s As Worksheet On Error GoTo errhandle For Each h In Worksheets("作業名一覧").Range("B2").CurrentRegion Set s = Worksheets(h.Value) MsgBox h.Value & "有り" Next Exit Sub errhandle: Worksheets.Add after:=Worksheets(Worksheets.Count) With ActiveSheet .Name = h.Value .Cells.ColumnWidth = 1 .Cells.RowHeight = 15 End With Resume End Sub また、下記のようにすると、空欄の所で永久ループに入ってしまいます。 Sub シート挿入() Dim h As Range Dim s As Worksheet On Error GoTo errhandle For Each h In Worksheets("作業名一覧").Range("B2").CurrentRegion Set s = Worksheets(h.Value) MsgBox h.Value & "有り" Next Exit Sub errhandle: If h <> "" Then Worksheets.Add after:=Worksheets(Worksheets.Count) With ActiveSheet .Name = h.Value .Cells.ColumnWidth = 1 .Cells.RowHeight = 15 End With End If Resume End Sub シートが有るか無いか確認しながら、シートを挿入する場合、どんな記述にしたらよろしいのでしょうか?御教授の程よろしくお願い致します。
お礼
さっそく貼り付けて確認してみました。 エラーも無く、思っていた通りの動作でした。Ifの位置をErrhandleの後に入れたのが間違っていたんですね。 記述を見ていて思った事ですが、 pos = worksheets(h.value).index と Set s = Worksheets(h.Value) の違いってなんなんでしょうか? 試しに、Set~で記述してみても、動作的には大差がなかったように思えるのですが。