ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Copying rows to a new sheet (https://www.excelbanter.com/excel-programming/309378-copying-rows-new-sheet.html)

dave

Copying rows to a new sheet
 
We have some infection control data which is stored on 12
sheets, 1 for each month. Each row on a sheet is data. We
would like to make a new sheet for totals, and have it
automatically copy all rows of data from the other 12 onto
itself, so basically we have an anual summary sheet.

How can this be accomplished?

dave

update...
 
Making a little progress. I found the following script
online and have tried this. This is very close. I just
need it to do the following:

When it makes a sheet called Master and copies, start
copying the data at row 3 (row 1 & 2 are headers).

I have it hard coded to copy from A3 to R30. I will always
start at A3, but the data may go past row R, it may not. I
would like this to check and keep copying rows until Row A
contains a blank value in column 1.... essentially I do
not want ot hard code the rows to copy.


Sub CopyRange()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
'If SheetExists("Master") = True Then
' MsgBox "The sheet Master already exist"
' Exit Sub
'End If
Application.ScreenUpdating = False
Set DestSh = Worksheets.Delete
Set DestSh = Worksheets.Add
DestSh.Name = "Master"
For Each sh In ThisWorkbook.Worksheets
If sh.Name < DestSh.Name And sh.Name
< "Definitions" Then
If sh.UsedRange.Count 1 Then
Last = LastRow(DestSh)
sh.Range("A3:R30").Copy DestSh.Cells(Last
+ 1, 1)
End If
End If
Next
Application.ScreenUpdating = True
End Sub

Sub CopyRangeValues()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
' If SheetExists("Master") = True Then
' MsgBox "The sheet Master already exist"
' Exit Sub
'End If
Application.ScreenUpdating = False

Set DestSh = Worksheets.Add
DestSh.Name = "Master"
For Each sh In ThisWorkbook.Worksheets
If sh.Name < DestSh.Name And sh.Name
< "Definitions" Then
If sh.UsedRange.Count 1 Then
Last = LastRow(DestSh)
With sh.Range("A3:R30")
DestSh.Cells(Last + 1, 1).Resize
(.Rows.Count, _
.Columns.Count).Value = .Value
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub

Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function

Function Lastcol(sh As Worksheet)
On Error Resume Next
Lastcol = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function

Function SheetExists(SName As String, _
Optional ByVal WB As Workbook) As
Boolean
On Error Resume Next
If WB Is Nothing Then Set WB = ThisWorkbook
SheetExists = CBool(Len(Sheets(SName).Name))
End Function


Tom Ogilvy

Copying rows to a new sheet
 
Sub CopyData()
Dim sh as Worksheet, rng as Range
for each sh in ActiveWorkbook.Worksheets
if lcase(sh.name) < "summary" then
set rng = sh.Range("A1").CurrentRegion
rng.copy Destination:=Worksheets("Summary") _
.Cells(rows.count,1).End(xlup)(2)
end if
Next
End Sub

This assumes your data starts in Cell A1 and there are no completely blank
rows or columns within the data.

if you have a header on each sheet, it will be copied. If you want to avoid
that
Sub CopyData()
Dim sh as Worksheet, rng as Range
for each sh in ActiveWorkbook.Worksheets
if lcase(sh.name) < "summary" then
set rng = sh.Range("A1").CurrentRegion.Offset(1,0)
rng.copy Destination:=Worksheets("Summary") _
.Cells(rows.count,1).End(xlup)(2)
end if
Next
End Sub

--
Regards.
Tom Ogilvy


"Dave" wrote in message
...
We have some infection control data which is stored on 12
sheets, 1 for each month. Each row on a sheet is data. We
would like to make a new sheet for totals, and have it
automatically copy all rows of data from the other 12 onto
itself, so basically we have an anual summary sheet.

How can this be accomplished?




Tom Ogilvy

update...
 
Sub CopyData()
Dim sh as Worksheet, rng as Range
On error resume next
set sh = worksheets("Summary")
On error goto 0
if sh is nothing then
with ActiveWorkbook
.worksheets.Add After:=.Worksheets(.Worksheets.count)
End with
Activesheet.Name = "Summary"
End if
for each sh in ActiveWorkbook.Worksheets
if lcase(sh.name) < "summary" then
set rng = sh.Range("A1").CurrentRegion.Offset(2,0)
rng.copy Destination:=Worksheets("Summary") _
.Cells(rows.count,1).End(xlup)(2)
end if
Next
End Sub

--
Regards,
Tom Ogilvy

"Dave" wrote in message
...
Making a little progress. I found the following script
online and have tried this. This is very close. I just
need it to do the following:

When it makes a sheet called Master and copies, start
copying the data at row 3 (row 1 & 2 are headers).

I have it hard coded to copy from A3 to R30. I will always
start at A3, but the data may go past row R, it may not. I
would like this to check and keep copying rows until Row A
contains a blank value in column 1.... essentially I do
not want ot hard code the rows to copy.


Sub CopyRange()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
'If SheetExists("Master") = True Then
' MsgBox "The sheet Master already exist"
' Exit Sub
'End If
Application.ScreenUpdating = False
Set DestSh = Worksheets.Delete
Set DestSh = Worksheets.Add
DestSh.Name = "Master"
For Each sh In ThisWorkbook.Worksheets
If sh.Name < DestSh.Name And sh.Name
< "Definitions" Then
If sh.UsedRange.Count 1 Then
Last = LastRow(DestSh)
sh.Range("A3:R30").Copy DestSh.Cells(Last
+ 1, 1)
End If
End If
Next
Application.ScreenUpdating = True
End Sub

Sub CopyRangeValues()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
' If SheetExists("Master") = True Then
' MsgBox "The sheet Master already exist"
' Exit Sub
'End If
Application.ScreenUpdating = False

Set DestSh = Worksheets.Add
DestSh.Name = "Master"
For Each sh In ThisWorkbook.Worksheets
If sh.Name < DestSh.Name And sh.Name
< "Definitions" Then
If sh.UsedRange.Count 1 Then
Last = LastRow(DestSh)
With sh.Range("A3:R30")
DestSh.Cells(Last + 1, 1).Resize
(.Rows.Count, _
.Columns.Count).Value = .Value
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub

Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function

Function Lastcol(sh As Worksheet)
On Error Resume Next
Lastcol = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function

Function SheetExists(SName As String, _
Optional ByVal WB As Workbook) As
Boolean
On Error Resume Next
If WB Is Nothing Then Set WB = ThisWorkbook
SheetExists = CBool(Len(Sheets(SName).Name))
End Function




dave

update...
 
Thank you!


All times are GMT +1. The time now is 05:31 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com