by Allen Wyatt
(last updated January 25, 2020)
Ryan has an Excel worksheet that he needs to use for each of 3 shifts every day. He makes a copy of this worksheet for each shift, each day, over and over. It seems to Ryan that it would be helpful if he had a macro that could copy the master worksheet 3 times for each day in a month, naming the worksheets "February 1 Shift 1," "February 1 Shift 2," etc. He can't find a macro to do something like this and was wondering if anyone could help.
This actually doesn't take that long to put together as a macro. The trick is to remember that the macro needs to copy your master worksheet 3 times for each day in the desired month. This also implies that the macro needs to determine how many days there are in the month. Once this is known, you can set up two nested For...Next loops to handle the actual creation process.
Sub CopyShiftSheets() Dim iDay As Integer Dim iShift As Integer Dim iNumDays As Integer Dim wMaster As Worksheet Dim sTemp As String iMonth = 2 ' Set to month desired, 1-12 iCurYear = Year(Now()) iNumDays = Day(DateSerial(iCurYear, iMonth + 1, 0)) Set wMaster = Worksheets("Master") 'change to name of master For iDay = 1 To iNumDays For iShift = 1 To 3 sTemp = MonthName(iMonth) & " " & iDay & " Shift " & iShift wMaster.Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = sTemp Next iShift Next iDay End Sub
Note that the desired month (in this case February) is assigned to the iMonth variable and that iCurYear is set to the current year. The number of days in that month and year is then calculated and stored in iNumDays.
The two For...Next loops go through each day and each shift, copying the Master worksheet and renaming it. When you are done, your workbook will have all the desired worksheets, named correctly. You'll want to be careful, however, that you don't run the macro twice for the same month. If you do, an error is generated because you will have duplicate-named worksheets in the workbook.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (13730) applies to Microsoft Excel 2007, 2010, 2013, 2016, 2019, and Excel in Microsoft 365.
Save Time and Supercharge Excel! Automate virtually any routine task and save yourself hours, days, maybe even weeks. Then, learn how to make Excel do things you thought were simply impossible! Mastering advanced Excel macros has never been easier. Check out Excel 2010 VBA and Macros today!
It is possible to create macros that send out reports, via e-mail, from within Excel. Frank did this and ran into ...Discover More
VBA provides a few different ways you can search for information within strings. This tip looks at the most efficient ...Discover More
Do you need a cell in your worksheet to display the date on which the workbook was last saved? This can be a bit tricky, ...Discover More
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.