• 締切済み

新たなワークシートへのコピペVBA

(1)Excelの一つのBOOKの中に複数のワークシートがあります。 (2)これらワークシートの中から、任意でいくつかのみを選びます。 (3)新たなワークシートを一つ作り、ここに、(2)で選んだワークシートを順番に横並びでコペピする。 上記をVBAで自動化させるには、どうしたらよろしいのですか?

  • plana
  • お礼率24% (21/85)

みんなの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 下記コードを当該ブックの標準モジュールに貼り付けてから、 Sub CrPickUpSh8318367()を実行。 後は指示通りに、  【任意】のシートを選択して、  実行ボタンを押し、  シート名を指定するだけ。 シーケンシャルなUI形式です。 #【任意】という言葉、の意味が合っている前提でお応えしています。 ' ' ================================= Sub CrPickUpSh8318367()  '  プロシージャ名は自由の変更可。   Dim oWshts As Worksheets   Dim tnWsht As Long   Dim i As Long   With Worksheets     tnWsht = .Count     With .Add(After:=.Item(tnWsht))       .Name = "PickUpSheets"       For i = 1 To tnWsht         With .OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=1, Top:=Cells(i, 1).Top, Width:=100, Height:=18)           .Object.Caption = Worksheets(i).Name         End With         With .Buttons.Add(144, 0, 72, 72)           .OnAction = "ShMerge"           .Caption = "シートの結合/実行"         End With       Next i     End With   End With   MsgBox "結合させたいシート名にチェックを入れて、実行ボタン。", , "シートの結合/シート選択" End Sub ' ' ================================= Private Sub ShMerge()  '  プロシージャ名は変更不可。   Dim arrShName() As String   Dim oOle As OLEObject   Dim oShape As Shape   Dim sBuf As String   Dim sName As String   Dim nPrCol As Long   Dim i As Long   With Sheets("PickUpSheets")     For Each oOle In .OLEObjects       If TypeName(oOle.Object) = "CheckBox" Then         If oOle.Object.Value = True Then sBuf = sBuf & vbLf & oOle.Object.Caption       End If     Next     If sBuf = "" Then       MsgBox "結合するシートが選択されていません。", , "シートの結合/シート選択"       Exit Sub     End If     For Each oShape In .Shapes       oShape.Delete     Next     arrShName() = Split(sBuf, vbLf)     For i = 1 To UBound(arrShName())       With .UsedRange         nPrCol = .Cells(.Cells.Count).Column + 1       End With       Worksheets(arrShName(i)).UsedRange.Copy _         Destination:=.Cells(nPrCol)     Next i     Do       sName = Application.InputBox(Prompt:="シートの結合/完了" & vbLf & "シート名を指定", _                     Title:="シートの結合/シート名を指定", _                     Default:="結合Sheet", Type:=2)       Select Case sName       Case "", "False"       Case Else         .Name = sName         Exit Do       End Select     Loop   End With End Sub ' ' =================================

関連するQ&A

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3コピー元ワークシート3 という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3ワークシート という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • VBAでブック内のワークシートを名前をつけて保存

    エクセルVBAで作業中のブックの一部のワークシート(2枚)を名前をつけて保存する方法を教えてください。 (例)  《ブックA》  sheet1 sheet2     sheet3 10/5     10個 10,000円    4個 25,000円 東京     25個 18,500円    6個 42,000円 というブックから『10/5 東京』というブックでsheet2,sheet3の内容を 保存したいのですが・・・ VBAは勉強し始めでほとんどわからないので教えてください。

  • エクセルVBAの処理でブックの中に複数のシートがあり、そのシート名と同

    エクセルVBAの処理でブックの中に複数のシートがあり、そのシート名と同じ名前の他のブックにそのシートを順々に挿入していきたいのですがどうすればよいのでしょうか。 宜しくお願い致します。

  • エクセル ワークシート操作

    エクセル VBAにてブックを閉じるときに作業をして追加した ワークシートを昇順、もしくは降順(名前、日付など)に 並び替えてから閉じるように する方法がわからないのですが? どのようにやるのでしょうか?

  • エクセル 一つのワークシートだけプログラムを無効にしたい

    こんにちは。 エクセルVBA初心者です。 ブックの複数のワークシートにVBAでプログラムを書いています。 Sheet1のモジュールにマクロ1~4 sheet2のモジュールにマクロ5~7 と言った具合です。 Sheet2で作業するのにプログラムが動作すると邪魔なので、Sheet2のプログラムだけを一時的に無効にしておきたいと思ってます。 このときの条件(というか希望)として、 ・マクロはまた使うので消さない ・Sheet1のマクロはSheet2の確認作業で使うのでそのまま使えるようにしておきたい ・有効/無効を簡単に切り替えたい があるのですが、このような要望をかなえる方法を教えて下さい。 尚、OSはWin2000、エクセルは97です。 よろしくお願いします。

  • エクセルVBA ワークシート操作について

    エクセル2000 VBAで ワークシートが左から順番に 入力フォーム⇒加工費単価マスタ⇒出荷日報(原紙)と 3個あり4個目に出荷日報(原紙)をコピーしたワークシートを 入力して⇒テキストボックス1 (日付入力します出来れば、日付入力の指定方法⇒テキストボックスの入力制限方法も教えていただきたいです)に入力した名前を ワークシートに付けて保存したいのですが? 翌日は また左から4番目の位置にコピーされ 右に行くほど古い日付の順番にしたいです。 説明が不足していましたら連絡お願いします。

  • EXCEL VBA ワークシート貼り付け

    EXCEL2000のVBAを使用して 元データーの左から5番目のワークシートをコピーして 同じフォルダー内にあるエクセルデーター(10個)の 一番左に貼り付けたいのですがVBAの処理で出来ますでしょうか? 実施する処理は元データーの左から5番目のワークシートを コピーして貼り付けたいデーターを開いて 開いたデーターを移動先ブック名に指定して一番左に元データーの 左から5番目のデーターを貼り付けて 処理が終了したら移動先ブックを閉じて次のデーターも 同じことを行いフォルダー内のデーター全てに同じ処理を 行ったら終了する? 文面だけの説明で大変申し訳ないのですがご教授していただけないでしょうか?

  • はじめに表示するワークシート

    Excel2000の質問です。 あるExcelのブックに30個程度のワークシートを作成しているとします。 その30個あるワークシートの中から、ブックを開いたときにはじめに表示させるワークシートを指定するにはどうすればいいのでしょうか。 Outlook2000でいえば、[起動時のフォルダの指定]のようなものです。 どなたかご教授願います。

  • エクセルのワークシート

    エクセルのワークシート エクセルのブックを開いたときに、シートが3枚あったら そのまま開いて、 3枚なかったら1枚追加する、ということをしたいのですが どのようにすればよいか、教えていただけないでしょうか。

専門家に質問してみよう