• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【エクセル】新しいブックにコピーするVBA)

【エクセル】新しいブックにコピーするVBA

このQ&Aのポイント
  • 急ぎで必要なエクセルで、一覧シートの特定の情報を原本シートから新しいブックにコピーするVBAの作成方法について教えてください。
  • エクセルで一覧シートの情報を原本シートから新しいブックにコピーするVBAの作成方法を教えてください。
  • エクセルのVBAを使って一覧シートの特定の情報を原本シートから新しいブックにコピーする方法を教えてください。

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

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

>シート名の設定が必要なので、”一覧”シートのB列(商品名)を >シート名に設定しつつ、1つの新規ブックを作成したいです。 そういう余計な細工が追加されると,途端に例えば ・間違いでB列会社名がダブってたらエラーになる ・間違いでB列会社名が無記入だとエラーになる ・B列会社名にシート名で使えない文字が含まれているとエラーになる など,あれこれ追加で考えて具体的に手当しなきゃならない事がどんどん増えていきます。自力で対応を検討して下さい。 作成例: sub macro1r1()  dim w1 as worksheet  dim wg as worksheet  dim r as long  dim w as workbook  dim flg as boolean  set w1 = worksheets("一覧")  set wg = worksheets("原本")  on error resume next  for r = 55 to 78   if w1.cells(r, "H") = 1 then   ’追加    if flg then     wg.copy after:=w.worksheets(w.worksheets.count)    else     wg.copy     set w = activeworkbook     flg = true    end if    activesheet.name = w1.cells(r, "B")    range("G13") = w1.cells(r, "B")    range("G16") = w1.cells(r, "A")   end if  next r end sub

rutohamuni
質問者

お礼

目的のものができました。ありがとうございました。

その他の回答 (2)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

Sub Macro1() Set WS01 = Sheets("一覧") Set WS02 = Sheets("原本") For i = 55 To 78 If WS01.Range("H" & i) = 1 Then WS02.Copy Before:=WS02 Sheets(Sheets.Count - 1).Name = WS01.Range("B" & i) Range("G13") = WS01.Range("B" & i) Range("G16") = WS01.Range("A" & i) End If Next i Sheets.Select Sheets.Copy Application.DisplayAlerts = False Sheets(Array("一覧", "原本")).Select ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True End Sub という感じでいいと思います。

rutohamuni
質問者

補足

試させて頂きましたが、不具合が発生します。 ■1つ目 実行すると『インデックスが有効範囲にありません。』と出る 該当範囲>Sheets(Array("一覧", "原本")).Select ■2つ目 シート名に(2)と付いてしまう。 ■3つ目 シート名と、シートの中の情報が合わない。

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

作りたいじゃなくて作ってほしいの間違いですね。 sub macro1()  dim w1 as worksheet  dim wg as worksheet  dim r as long  set w1 = worksheets("一覧")  set wg = worksheets("原本")  for r = 55 to 78   if w1.cells(r, "H") = 1 then    wg.copy    range("G13") = w1.cells(r, "B")    range("G16") = w1.cells(r, "A")   end if  next r end sub みたいな。

rutohamuni
質問者

補足

そうですよね。「作ってほしい」です。申し訳ありません。 上記のVBAでほぼOKでした。 ですが、1点だけ考えていたのと違う結果になってしまいました。 このVBAだと、フラグが”1”の個数分の新規ブックが作成されるのですが、 1つの新規ブックに、全ての商品シートを作りたいのです。 そうすると、シート名の設定が必要なので、”一覧”シートのB列(商品名)を シート名に設定しつつ、1つの新規ブックを作成したいです。 すぐにお返事を送って頂いて大変申し訳ありません。 この1点だけ対応して頂けたら嬉しいです。

関連するQ&A