merge sheet vba help

Dan88

Active Member
Joined
Feb 14, 2008
Messages
258
Hello everyone. Is there a way to tweak the below vba so it only merges 2 sheets from my workbook vs ALL the sheets in the workbook?
For instance i need it to merge sheet name "hello" and sheet name "bye"

THanks!!

Sub merge()
Dim wrk As Workbook
Dim sht As Worksheet
Dim trg As Worksheet
Dim rng As Range
Dim colCount As Integer

Set wrk = ActiveWorkbook




Application.ScreenUpdating = False



Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))


trg.Name = "ARP "


Set sht = wrk.Worksheets(1)
colCount = sht.Cells(1, 255).End(xlToLeft).Column


With trg.Cells(1, 1).Resize(1, colCount)
.Value = sht.Cells(1, 1).Resize(1, colCount).Value


.Font.Bold = True
End With


For Each sht In wrk.Worksheets


If sht.Index = wrk.Worksheets.Count Then
Exit For
End If

Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount))


trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
Next sht


trg.Columns.AutoFit



Application.ScreenUpdating = True
End Sub
 

Some videos you may like

Excel Facts

Create a chart in one keystroke
Select the data and press Alt+F1 to insert a default chart. You can change the default chart to any chart type

Trebor76

Well-known Member
Joined
Jul 23, 2007
Messages
4,676
Hi Dan88,

Try this:

Code:
Option Explicit
Sub merge()

    Dim wrk As Workbook
    Dim sht As Worksheet
    Dim trg As Worksheet
    Dim rng As Range
    Dim colCount As Long
    Dim varMySheets As Variant
    
    Application.ScreenUpdating = False
    
    varMySheets = Array("hello", "bye") 'Sheet names to be consolidated
    
    Set wrk = ActiveWorkbook
    Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))

    trg.Name = "ARP " 'I would not have a tab with trailing space(s)
    
    Set sht = wrk.Worksheets(1)
    
    colCount = sht.Cells(1, Columns.Count).End(xlToLeft).Column

    With trg.Cells(1, 1).Resize(1, colCount)
        .Value = sht.Cells(1, 1).Resize(1, colCount).Value
        .Font.Bold = True
    End With

    For Each sht In wrk.Worksheets
        If IsNumeric(Application.Match(sht.Name, varMySheets, 0)) Then
            Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(Rows.Count, 1).End(xlUp).Resize(, colCount))
            trg.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
        End If
    Next sht

    trg.Columns.AutoFit

    Application.ScreenUpdating = True
    
End Sub

What happens if you need to merge a second time as the code will currently fail because it cannot create the tab "ARP " again?

Robert
 

Watch MrExcel Video

Forum statistics

Threads
1,109,013
Messages
5,526,268
Members
409,689
Latest member
martin_br

This Week's Hot Topics

Top