- 締切済み
新たなワークシートへのコピペVBA
(1)Excelの一つのBOOKの中に複数のワークシートがあります。 (2)これらワークシートの中から、任意でいくつかのみを選びます。 (3)新たなワークシートを一つ作り、ここに、(2)で選んだワークシートを順番に横並びでコペピする。 上記をVBAで自動化させるには、どうしたらよろしいのですか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 下記コードを当該ブックの標準モジュールに貼り付けてから、 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 ' ' =================================