• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ 一覧からシートを作成する)

マクロ一覧からシートを作成する方法

このQ&Aのポイント
  • マクロを使用して一覧から複数列に記載されたシート名を参照し、次々と新しいシートを挿入する方法について教えてください。
  • シート名が一列に記載されている場合とは異なり、複数列にシート名が記載されている場合についてのマクロ記述についてもお教えいただけますか。
  • また、マクロの実行中にエラーが発生した場合のエラーハンドリング方法についても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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

kero1192kero
質問者

お礼

さっそく貼り付けて確認してみました。 エラーも無く、思っていた通りの動作でした。Ifの位置をErrhandleの後に入れたのが間違っていたんですね。 記述を見ていて思った事ですが、 pos = worksheets(h.value).index と Set s = Worksheets(h.Value) の違いってなんなんでしょうか? 試しに、Set~で記述してみても、動作的には大差がなかったように思えるのですが。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

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

kero1192kero
質問者

お礼

範囲を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 シートが有るか無いか確認しながら、シートを挿入する場合、どんな記述にしたらよろしいのでしょうか?御教授の程よろしくお願い致します。

関連するQ&A

専門家に質問してみよう